리눅스 사용자 계정 생성과 그룹 권한 완벽 이해 종합 가이드
리눅스 시스템은 여러 사용자가 동시에 접근하여 작업할 수 있도록 설계된 다중 사용자 운영체제입니다. 이러한 환경에서 각 사용자의 독립적인 작업 공간을 제공하고, 중요한 시스템 자원이나 데이터를 안전하게 보호하며, 효율적인 협업을 가능하게 하는 핵심 요소가 바로 ‘사용자 계정’과 ‘파일 및 디렉토리 권한’입니다. 이 가이드는 리눅스 시스템 관리의 가장 기본적이면서도 중요한 개념인 사용자 계정 생성, 그룹 관리, 그리고 파일 소유권(chown) 및 접근 권한(chmod) 설정에 대해 일반 독자분들도 쉽게 이해하고 실생활에 적용할 수 있도록 자세히 설명합니다.
이 지식을 통해 여러분은 여러분의 리눅스 서버나 개인 워크스테이션을 더욱 안전하고 효율적으로 관리할 수 있게 될 것입니다.
리눅스 사용자 계정 생성의 중요성
리눅스에서 사용자 계정을 생성하는 것은 단순히 로그인할 수 있는 ID를 만드는 것 이상의 의미를 가집니다. 각 사용자 계정은 고유한 홈 디렉토리, 쉘 환경, 그리고 시스템 자원에 대한 접근 권한을 가집니다. 이는 다음과 같은 이유로 매우 중요합니다.
- 보안 강화 각 사용자가 자신의 계정으로만 작업하고 필요한 최소한의 권한만 가짐으로써, 한 계정이 침해되더라도 시스템 전체의 피해를 최소화할 수 있습니다.
- 자원 관리 사용자별로 할당된 자원(CPU, 메모리, 디스크 공간 등)을 관리하고, 누가 어떤 작업을 수행했는지 추적할 수 있습니다.
- 협업 효율성 팀 프로젝트나 여러 개발자가 함께 작업하는 환경에서 각자의 작업 공간을 분리하고, 필요한 파일만 공유할 수 있도록 설정하여 효율적인 협업을 지원합니다.
- 데이터 무결성 다른 사용자의 실수나 악의적인 행동으로부터 중요한 파일이나 설정이 변경되거나 삭제되는 것을 방지합니다.
새로운 사용자 계정 생성하기
리눅스에서 사용자 계정을 생성하는 가장 기본적인 명령어는 useradd와 adduser입니다. 배포판에 따라 둘 중 하나가 더 선호되거나 기능적으로 약간의 차이가 있을 수 있습니다.
useradd 명령어 활용
useradd는 저수준(low-level) 명령어에 가까우며, 사용자의 홈 디렉토리 생성, 쉘 지정 등 세부적인 사항을 직접 옵션으로 지정해야 합니다. 시스템 관리 스크립트 등에서 자동화된 사용자 생성이 필요할 때 주로 사용됩니다.
sudo useradd -m -s /bin/bash -g users -G sudo,docker 새사용자이름
sudo: 관리자 권한으로 명령을 실행합니다. 사용자 생성을 위해서는 루트 권한이 필요합니다.-m: 사용자의 홈 디렉토리(예:/home/새사용자이름)를 자동으로 생성합니다. 이 옵션이 없으면 홈 디렉토리가 생성되지 않습니다.-s /bin/bash: 해당 사용자의 기본 쉘을/bin/bash로 지정합니다. 다른 쉘(예:/bin/sh,/bin/zsh)을 지정할 수도 있습니다.-g users: 사용자의 기본 그룹을users로 지정합니다. 이 그룹이 존재하지 않으면 오류가 발생합니다. 일반적으로 사용자와 동일한 이름의 그룹이 자동으로 생성되고 기본 그룹으로 지정됩니다.-G sudo,docker: 사용자를sudo와docker그룹의 보조 그룹으로 추가합니다. 여러 그룹을 지정할 때는 쉼표(,)로 구분합니다.새사용자이름: 생성할 사용자 계정의 이름입니다.
adduser 명령어 활용
adduser는 useradd에 비해 더 사용자 친화적인(high-level) 스크립트입니다. 대부분의 데비안/우분투 기반 시스템에서 기본으로 제공되며, 대화형으로 사용자 정보를 입력받고, 자동으로 홈 디렉토리와 기본 그룹을 생성하며, 필요한 설정을 처리해줍니다.
sudo adduser 새사용자이름
이 명령을 실행하면 새 사용자의 비밀번호, 이름, 전화번호 등 추가 정보를 단계별로 입력하라는 메시지가 나타납니다. 특별한 설정이 필요 없다면 adduser를 사용하는 것이 편리합니다.
사용자 비밀번호 설정
사용자 계정을 생성한 후에는 반드시 비밀번호를 설정해야 해당 계정으로 로그인할 수 있습니다.
sudo passwd 새사용자이름
이 명령을 실행하면 새 사용자의 비밀번호를 두 번 입력하라는 메시지가 나타납니다.
리눅스 그룹 관리의 모든 것
그룹은 여러 사용자에게 동일한 파일 및 디렉토리 접근 권한을 부여할 때 매우 유용합니다. 예를 들어, 특정 프로젝트에 참여하는 모든 개발자에게 공유 폴더에 대한 읽기/쓰기 권한을 부여하고 싶을 때, 각 사용자에게 개별적으로 권한을 설정하는 대신, 그들을 하나의 그룹에 묶어 그룹 단위로 권한을 설정하면 관리 효율성이 크게 향상됩니다.
새로운 그룹 생성하기
그룹을 생성하는 명령어는 groupadd입니다.
sudo groupadd 개발팀
이 명령은 개발팀이라는 새로운 그룹을 생성합니다.
사용자를 그룹에 추가하거나 제거하기
기존 사용자를 특정 그룹에 추가하거나 그룹에서 제거할 때는 usermod 명령어를 사용합니다.
- 사용자를 보조 그룹으로 추가: 기존 그룹에 사용자를 추가할 때 가장 일반적인 방법입니다.
sudo usermod -aG 개발팀 기존사용자이름
-a: 기존 그룹 목록에 추가(append)합니다. 이 옵션이 없으면 사용자가 속한 모든 보조 그룹이 지정된 그룹으로 교체됩니다.-G: 사용자를 추가할 보조 그룹을 지정합니다. 여러 그룹을 쉼표로 구분하여 지정할 수 있습니다.
- 사용자의 기본 그룹 변경: 사용자의 주 그룹을 변경합니다.
sudo usermod -g 새로운기본그룹 기존사용자이름
-g: 사용자의 기본 그룹을 지정합니다. 사용자는 하나의 기본 그룹만 가질 수 있습니다.
사용자가 속한 그룹 확인하기
특정 사용자가 어떤 그룹에 속해 있는지 확인하는 명령어는 groups와 id입니다.
groups 새사용자이름
이 명령은 새사용자이름이 속한 모든 그룹의 이름을 출력합니다.
id 새사용자이름
id 명령은 사용자의 UID(User ID), 기본 그룹의 GID(Group ID), 그리고 속한 모든 보조 그룹의 GID와 이름을 상세하게 출력합니다.
파일 소유권 변경 chown 명령어 마스터하기
리눅스의 모든 파일과 디렉토리에는 소유자(Owner)와 그룹(Group)이 존재합니다. 이 소유자와 그룹은 해당 파일에 대한 접근 권한을 결정하는 중요한 요소입니다. chown(change owner) 명령어는 파일이나 디렉토리의 소유자 또는 소유 그룹을 변경할 때 사용합니다.
chown 명령어 기본 사용법
sudo chown [새로운소유자] [파일또는디렉토리]
예시:
sudo chown user1 example.txt
example.txt 파일의 소유자를 user1으로 변경합니다.
소유자와 그룹 동시에 변경하기
소유자와 소유 그룹을 동시에 변경할 때는 소유자 이름 뒤에 콜론(:)을 붙여 그룹 이름을 지정합니다.
sudo chown [새로운소유자]:[새로운그룹] [파일또는디렉토리]
예시:
sudo chown user1:개발팀 example.txt
example.txt 파일의 소유자를 user1으로, 소유 그룹을 개발팀으로 변경합니다.
그룹만 변경하기
파일의 소유자는 그대로 두고 그룹만 변경하고 싶을 때는 chgrp(change group) 명령어를 사용하거나, chown에서 소유자 부분은 비워두고 콜론 뒤에 그룹만 지정할 수 있습니다.
sudo chgrp 개발팀 example.txt
또는
sudo chown :개발팀 example.txt
두 명령 모두 example.txt 파일의 소유 그룹을 개발팀으로 변경합니다.
하위 디렉토리 및 파일까지 재귀적으로 변경하기
디렉토리의 소유권 변경 시, 해당 디렉토리 내의 모든 하위 디렉토리와 파일의 소유권도 함께 변경하고 싶을 때는 -R(recursive) 옵션을 사용합니다.
sudo chown -R user1:개발팀 /var/www/myproject
/var/www/myproject 디렉토리와 그 하위의 모든 파일 및 디렉토리의 소유자를 user1으로, 소유 그룹을 개발팀으로 변경합니다.
파일 접근 권한 chmod 명령어 완벽 분석
chmod(change mode) 명령어는 파일이나 디렉토리에 대한 접근 권한을 설정하는 데 사용됩니다. 리눅스 권한은 크게 세 가지 유형으로 나뉩니다.
- 읽기(r, read): 파일의 내용을 읽거나 디렉토리의 내용을 나열할 수 있는 권한.
- 쓰기(w, write): 파일의 내용을 수정하거나 디렉토리에 파일을 생성/삭제할 수 있는 권한.
- 실행(x, execute): 파일을 실행하거나 디렉토리에 접근하여 하위 디렉토리로 이동할 수 있는 권한.
이러한 권한은 다시 세 가지 사용자 범주에 대해 개별적으로 설정됩니다.
- 소유자(u, user): 파일 또는 디렉토리의 소유자.
- 그룹(g, group): 파일 또는 디렉토리의 소유 그룹에 속한 사용자.
- 기타(o, others): 소유자도 아니고 소유 그룹에도 속하지 않는 모든 다른 사용자.
때로는 모든 사용자 범주를 한꺼번에 지칭하는 a(all)도 사용됩니다.
chmod 명령어 사용 방법
chmod는 크게 두 가지 방식으로 권한을 설정할 수 있습니다: 심볼릭 모드와 옥탈(숫자) 모드.
1. 심볼릭 모드
심볼릭 모드는 권한을 추가(+), 제거(-), 또는 특정 권한으로 설정(=)하는 방식으로 직관적입니다.
u,g,o,a: 권한을 적용할 사용자 범주.
+,-,=: 권한 추가, 제거, 설정.r,w,x: 부여할 권한.
예시:
chmod u+x myscript.sh:myscript.sh파일의 소유자에게 실행 권한을 추가합니다.
chmod g-w shared_dir:shared_dir디렉토리의 그룹에서 쓰기 권한을 제거합니다.chmod o=r data.txt:data.txt파일의 기타 사용자에게 읽기 권한만 부여하고 다른 모든 권한은 제거합니다.chmod ug+rw,o-rwx project_file: 소유자와 그룹에게 읽기/쓰기 권한을 추가하고, 기타 사용자에게는 모든 권한을 제거합니다.
2. 옥탈(숫자) 모드
옥탈 모드는 각 권한에 숫자를 할당하여 세 자리 숫자로 권한을 표현합니다.
- 읽기(r) = 4
- 쓰기(w) = 2
- 실행(x) = 1
- 권한 없음 = 0
세 자리 숫자는 각각 ‘소유자’, ‘그룹’, ‘기타’ 사용자의 권한을 나타냅니다. 각 자리 숫자는 부여하려는 권한 값의 합으로 계산됩니다.
예시:
755:- 소유자: 7 (4+2+1 = rwx, 읽기, 쓰기, 실행)
- 그룹: 5 (4+1 = r-x, 읽기, 실행)
- 기타: 5 (4+1 = r-x, 읽기, 실행)
일반적으로 실행 가능한 파일이나 디렉토리에 부여되는 권한입니다.
644:- 소유자: 6 (4+2 = rw-, 읽기, 쓰기)
- 그룹: 4 (4 = r–, 읽기)
- 기타: 4 (4 = r–, 읽기)
일반적으로 읽고 쓸 수 있는 텍스트 파일 등에 부여되는 권한입니다.
700:- 소유자: 7 (rwx)
- 그룹: 0 (—)
- 기타: 0 (—)
오직 소유자만 모든 권한을 가지고, 다른 사용자에게는 어떤 권한도 부여하지 않습니다. 개인적인 파일이나 민감한 설정 파일에 사용됩니다.
옥탈 모드의 예시:
chmod 755 myscript.sh
myscript.sh 파일에 소유자 rwx, 그룹 r-x, 기타 r-x 권한을 부여합니다.
chmod 644 data.txt
data.txt 파일에 소유자 rw-, 그룹 r–, 기타 r– 권한을 부여합니다.
하위 디렉토리 및 파일까지 재귀적으로 변경하기
chown과 마찬가지로 chmod도 -R 옵션을 사용하여 디렉토리의 하위 모든 파일 및 디렉토리의 권한을 재귀적으로 변경할 수 있습니다.
chmod -R 755 /var/www/myproject
/var/www/myproject 디렉토리와 그 하위의 모든 파일 및 디렉토리에 755 권한을 부여합니다.
특수 권한 SUID, SGID, Sticky Bit
리눅스에는 일반적인 rwx 권한 외에 SUID(Set User ID), SGID(Set Group ID), Sticky Bit라는 세 가지 특수 권한이 있습니다. 이들은 파일이나 디렉토리에 특정한 동작을 부여하는 데 사용됩니다.
- SUID (4xxx): 실행 파일에 설정되면, 해당 파일을 실행하는 사용자가 파일 소유자의 권한으로 실행됩니다. (예:
passwd명령어는 SUID가 설정되어 있어 일반 사용자도 자신의 비밀번호를 변경할 수 있습니다.) - SGID (2xxx):
- 파일에 설정되면, 해당 파일을 실행하는 사용자가 파일 소유 그룹의 권한으로 실행됩니다.
- 디렉토리에 설정되면, 해당 디렉토리 내에 새로 생성되는 파일이나 디렉토리는 부모 디렉토리의 그룹을 상속받게 됩니다. (협업 환경에서 유용)
- Sticky Bit (1xxx): 디렉토리에 설정되면, 해당 디렉토리 내의 파일은 오직 파일의 소유자, 디렉토리의 소유자(root 포함)만이 삭제하거나 이름을 변경할 수 있습니다. (예:
/tmp디렉토리)
이 특수 권한들은 옥탈 모드에서 네 번째 자리에 숫자를 추가하여 설정합니다. 예를 들어, chmod 4755 myscript.sh는 SUID를 포함한 755 권한을 부여합니다.
실생활에서 사용자 계정과 권한 활용하기
이러한 개념들은 실제 리눅스 시스템 관리에서 매우 광범위하게 활용됩니다.
- 웹 서버 관리: Apache나 Nginx 같은 웹 서버는
www-data와 같은 특정 사용자와 그룹으로 실행됩니다. 웹 사이트 파일의 소유권을www-data로 설정하고 적절한 권한(예:644파일,755디렉토리)을 부여하여 보안을 강화합니다.
- 공유 개발 환경: 여러 개발자가 하나의 서버에서 작업할 때, 특정 프로젝트 디렉토리를 생성하고,
개발팀그룹을 만든 후 모든 개발자를 이 그룹에 추가합니다. 그리고 프로젝트 디렉토리의 소유 그룹을개발팀으로 설정하고 SGID를 적용하여 협업을 용이하게 합니다. - 보안 강화: 민감한 설정 파일(예: SSH 키, 데이터베이스 설정 파일)은
chmod 600또는chmod 400과 같이 오직 소유자만 읽거나 쓸 수 있도록 권한을 제한합니다. - SFTP 전용 사용자: 특정 사용자에게는 SSH 로그인 대신 SFTP로만 접근하도록 제한하고, 특정 디렉토리만 접근 가능하도록 설정하여 보안을 강화할 수 있습니다.
- 백업 스크립트 실행: 백업 스크립트가 특정 디렉토리에 접근하여 파일을 읽고 쓸 수 있도록, 스크립트 실행 사용자에게 해당 디렉토리에 대한 적절한 권한을 부여해야 합니다.
흔한 오해와 꼭 알아야 할 사실
sudo와 루트 권한의 차이
많은 사용자가 sudo를 사용하면 ‘루트’가 된다고 오해하지만, sudo는 ‘다른 사용자의 권한으로 명령을 실행하는’ 도구입니다. 대부분의 경우 기본적으로 루트 권한으로 실행되도록 설정되어 있지만, sudo -u 다른사용자와 같이 특정 사용자의 권한으로도 실행할 수 있습니다. 직접 root 계정으로 로그인하는 것과 sudo를 통해 명령을 실행하는 것은 보안 감사 측면에서 차이가 있습니다. sudo는 누가 어떤 관리자 명령을 실행했는지 기록을 남기기 때문에 보안에 더 유리합니다.
최소 권한의 원칙
보안의 가장 중요한 원칙 중 하나는 ‘최소 권한의 원칙(Principle of Least Privilege)’입니다. 이는 사용자나 프로그램이 작업을 수행하는 데 필요한 최소한의 권한만을 가져야 한다는 의미입니다. 불필요하게 넓은 권한(예: chmod 777)을 부여하는 것은 보안 취약점을 만드는 지름길입니다.
chmod 777의 위험성
초보 사용자들이 흔히 저지르는 실수 중 하나가 권한 문제를 해결하기 위해 chmod 777을 사용하는 것입니다. 이 권한은 ‘모든 사용자에게 모든 권한(읽기, 쓰기, 실행)’을 부여하는 것으로, 해당 파일이나 디렉토리에 대한 보안을 완전히 포기하는 것과 같습니다. 악성 코드나 해커가 이 취약점을 통해 시스템에 침투할 수 있으므로 절대 사용해서는 안 됩니다.
chown과 chmod의 실행 주체
chown은 파일의 소유자를 변경하는 명령이므로, 오직 root 사용자만이 실행할 수 있습니다. 일반 사용자는 자신이 소유한 파일이라도 소유자를 다른 사용자로 변경할 수 없습니다. chmod는 파일의 소유자 또는 root 사용자만이 해당 파일의 권한을 변경할 수 있습니다.
유용한 팁과 전문가의 조언
- Umask 이해하기:
umask는 새로운 파일이나 디렉토리가 생성될 때 기본적으로 적용되는 권한 마스크입니다.umask값을 설정함으로써 불필요하게 넓은 권한으로 파일이 생성되는 것을 방지할 수 있습니다. 일반적으로0022(파일644, 디렉토리755) 또는0002(파일664, 디렉토리775)가 사용됩니다. - 정기적인 권한 감사: 중요한 시스템 파일이나 웹 서버 디렉토리 등의 권한을 정기적으로 확인하고, 예상치 못한 변경 사항이 있는지 감사하는 습관을 들이세요.
find명령어를 활용하여 특정 권한을 가진 파일을 검색할 수 있습니다. - 스크립트 실행 권한: 쉘 스크립트(
.sh) 파일을 실행 가능하게 만들려면 반드시 소유자에게 실행 권한(chmod u+x script.sh)을 부여해야 합니다. - 심볼릭 링크와 권한: 심볼릭 링크(Symbolic Link) 자체의 권한은
777로 고정되어 있으며, 실제 권한은 링크가 가리키는 원본 파일의 권한을 따릅니다.chown이나chmod를 심볼릭 링크에 적용하면, 기본적으로 원본 파일의 권한이 변경됩니다. - 백업 시 권한 유지:
tar나rsync와 같은 백업 도구를 사용할 때는 파일의 소유권과 권한 정보도 함께 백업되고 복원되도록 적절한 옵션(예:tar -p,rsync -a)을 사용하는 것이 중요합니다.
자주 묻는 질문과 답변
Q1: 사용자 계정을 삭제하려면 어떻게 해야 하나요?
A1: userdel 명령어를 사용합니다. 사용자의 홈 디렉토리와 메일 스풀까지 함께 삭제하려면 -r 옵션을 사용합니다.
sudo userdel -r 삭제할사용자이름
사용자가 현재 로그인되어 있다면, 먼저 로그아웃시키거나 강제로 종료해야 할 수 있습니다.
Q2: 그룹을 삭제하려면 어떻게 해야 하나요?
A2: groupdel 명령어를 사용합니다. 해당 그룹에 속한 사용자가 없는지 먼저 확인하는 것이 좋습니다.
sudo groupdel 삭제할그룹이름
Q3: 특정 디렉토리만 접근 가능한 사용자를 만들 수 있나요?
A3: 네, 가능합니다. 이를 ‘chroot’ 환경이라고 합니다. SSH를 통한 SFTP 접속에 한정하여 특정 디렉토리로만 사용자를 가두는 ‘SFTP chroot’ 설정이 일반적입니다. /etc/ssh/sshd_config 파일에서 ChrootDirectory 옵션을 설정하여 구현할 수 있습니다. 이는 복잡한 설정이므로 전문가의 도움을 받거나 충분히 학습 후 적용하는 것이 좋습니다.
Q4: 파일 권한이 제대로 적용되지 않는 것 같아요. 무엇을 확인해야 하나요?
A4: 다음 사항들을 확인해보세요.
- 부모 디렉토리 권한: 파일에 대한 권한이 있더라도, 해당 파일이 위치한 부모 디렉토리에 대한 ‘실행(x)’ 권한이 없으면 디렉토리 내부로 접근할 수 없습니다.
- 소유권:
ls -l명령어로 파일의 소유자와 그룹이 올바른지 확인하세요. - SELinux/AppArmor: 리눅스 보안 모듈인 SELinux나 AppArmor가 활성화되어 있다면, 이들 정책이 파일 접근을 제한할 수 있습니다. 로그를 확인하여 관련 메시지가 있는지 살펴보세요.
- 심볼릭 링크: 심볼릭 링크의 경우, 원본 파일의 권한이 적용됩니다. 원본 파일의 권한을 확인해야 합니다.
비용 효율적인 활용 방법
리눅스 사용자 계정과 권한 관리는 직접적인 비용 절감 효과를 가져오기보다는, 시스템의 안정성과 보안을 강화하여 간접적인 비용 절감을 가져옵니다.
- 보안 침해 방지: 적절한 권한 설정은 해킹이나 데이터 유출과 같은 보안 사고를 예방하여, 사고 발생 시 발생할 수 있는 막대한 금전적, 명예적 손실을 막아줍니다. 이는 가장 큰 비용 효율성입니다.
- 자원 오용 방지: 각 사용자의 권한을 제한함으로써 불필요한 시스템 자원(CPU, 디스크 등)의 오용을 방지하고, 시스템 성능 저하로 인한 업무 효율성 감소를 막습니다.
- 관리 효율성 증대: 그룹 기능을 활용하여 여러 사용자에게 일괄적으로 권한을 관리함으로써, 시스템 관리자의 작업 시간을 절약하고 인적 자원 비용을 절감합니다.
- 클라우드 환경 최적화: 클라우드 서버(AWS EC2, Google Cloud VM 등)에서는 리소스 사용량에 따라 과금이 되므로, 불필요한 사용자나 권한으로 인한 자원 낭비를 막고, 필요한 리소스만 효율적으로 사용하도록 관리하는 것이 중요합니다.