리눅스는 다중 사용자 시스템으로, 사용자와 그룹을 효과적으로 관리하는 것이 시스템 보안과 자원 관리에 매우 중요합니다. 이 글에서는 리눅스에서 사용자와 그룹을 관리하는 데 필요한 핵심 명령어들을 자세히 살펴보겠습니다. 시스템 관리자라면 반드시 알아야 할 명령어들이니 하나하나 차근히 알아보겠습니다. 🙂
1. useradd – 사용자 계정 생성
useradd
명령어는 새로운 사용자 계정을 생성하는 기본 명령어입니다. 시스템 관리자가 새로운 사용자를 추가할 때 가장 먼저 사용하게 됩니다.
주요 옵션
-m, --create-home
: 사용자의 홈 디렉토리 생성-d, --home DIRECTORY
: 홈 디렉토리 경로 지정-s, --shell SHELL
: 기본 로그인 셸 지정-g, --gid GROUP
: 사용자의 기본 그룹 지정-G, --groups GROUPS
: 사용자가 속할 추가 그룹 목록-u, --uid UID
: 사용자 ID 직접 지정-c, --comment COMMENT
: 사용자에 대한 설명 추가-e, --expiredate DATE
: 계정 만료일 설정 (YYYY-MM-DD)-f, --inactive DAYS
: 비밀번호 만료 후 계정이 비활성화될 때까지의 일수
사용 예시
기본 사용자 생성 (홈 디렉토리 자동 생성):
sudo useradd -m username
이 명령어는 ‘username’이라는 새 사용자를 생성하고 /home/username
디렉토리를 함께 생성합니다.
특정 셸과 설명을 포함한 사용자 생성:
sudo useradd -m -s /bin/bash -c "John Doe, IT Department" johndoe
여기서는 johndoe라는 사용자를 생성하면서 기본 셸을 bash로 지정하고 주석으로 부서 정보를 추가했습니다.
여러 그룹에 속한 사용자 생성:
sudo useradd -m -g developers -G sudo,docker,webadmin -s /bin/zsh developer1
이 예시에서는 ‘developer1’이라는 사용자를 생성하고, 기본 그룹은 ‘developers’로, 그리고 ‘sudo’, ‘docker’, ‘webadmin’ 그룹에도 추가로 소속시켰습니다. 또한 기본 셸을 zsh로 설정했습니다.
특정 UID와 홈 디렉토리 지정:
sudo useradd -m -u 1500 -d /opt/projects/user1 projectuser
‘projectuser’라는 사용자를 생성하면서 UID를 1500으로 지정하고, 홈 디렉토리를 기본 위치가 아닌 /opt/projects/user1
로 설정했습니다.
만료일이 있는 임시 사용자 생성:
sudo useradd -m -e 2025-12-31 -c "Temporary Contractor" tempuser
이 명령어는 2025년 12월 31일에 만료되는 임시 계정을 생성합니다.
주의사항
- 사용자 생성 후에는 반드시
passwd
명령어로 비밀번호를 설정해야 합니다. - 시스템 사용자와 일반 사용자의 UID 범위가 다르므로 혼동하지 않도록 주의해야 합니다.
- 기본 셸을 지정하지 않으면 시스템 기본값이 사용됩니다(보통 /bin/sh)
2. usermod – 사용자 계정 수정
usermod
명령어는 이미 존재하는 사용자의 설정을 변경할 때 사용합니다. useradd와 비슷한 옵션을 많이 공유하지만, 기존 계정을 수정하는 데 사용됩니다.
주요 옵션
-d, --home DIRECTORY
: 홈 디렉토리 변경-m, --move-home
: 홈 디렉토리 변경 시 파일 이동-s, --shell SHELL
: 로그인 셸 변경-g, --gid GROUP
: 기본 그룹 변경-G, --groups GROUPS
: 추가 그룹 목록 설정 (기존 그룹 대체)-a, --append
: -G 옵션과 함께 사용, 기존 그룹 유지하면서 새 그룹 추가-L, --lock
: 계정 잠금-U, --unlock
: 계정 잠금 해제-e, --expiredate DATE
: 계정 만료일 변경-c, --comment COMMENT
: 사용자 설명(주석) 변경-u, --uid UID
: 사용자 ID 변경
사용 예시
사용자의 로그인 셸 변경:
sudo usermod -s /bin/zsh username
이 명령어는 ‘username’ 사용자의 기본 셸을 zsh로 변경합니다.
사용자를 여러 그룹에 추가 (기존 그룹 유지):
sudo usermod -a -G docker,developers,project1 username
‘username’ 사용자를 docker, developers, project1 그룹에 추가합니다. -a
옵션을 사용하면 기존 그룹 소속은 유지됩니다.
사용자의 모든 그룹 변경 (기존 그룹 대체):
sudo usermod -G newgroup1,newgroup2 username
주의: 이 명령은 ‘username’ 사용자의 기존 추가 그룹을 모두 제거하고 newgroup1과 newgroup2만 설정합니다.
사용자 계정 잠금 (로그인 불가):
sudo usermod -L username
이 명령어는 사용자 계정을 잠가서 로그인할 수 없게 만듭니다. 주로 보안 문제나 임시 비활성화가 필요할 때 사용합니다.
사용자 계정 잠금 해제:
sudo usermod -U username
잠겨 있던 계정을 다시 사용할 수 있게 해제합니다.
사용자 홈 디렉토리 변경 (파일 이동 포함):
sudo usermod -d /new/home/path -m username
‘username’ 사용자의 홈 디렉토리를 새 경로로 변경하고, -m
옵션을 사용해 기존 파일들을 새 위치로 이동시킵니다.
사용자 이름 변경:
sudo usermod -l newusername oldusername
사용자 이름을 ‘oldusername’에서 ‘newusername’으로 변경합니다.
주의사항
- 사용자가 현재 로그인 중인 상태에서는 일부 변경이 즉시 적용되지 않을 수 있습니다.
-G
옵션만 사용하면 기존 그룹이 모두 지워지므로-a
옵션을 함께 사용해야 기존 그룹이 유지됩니다.- 시스템 계정의 UID를 변경하면 시스템에 문제가 생길 수 있으니 주의해야 합니다.
- 홈 디렉토리 변경 시
-m
옵션을 사용하지 않으면 파일이 이동되지 않습니다.
3. groupadd – 그룹 생성
groupadd
명령어는 새로운 그룹을 시스템에 추가할 때 사용합니다.
주요 옵션
-g, --gid GID
: 그룹 ID 직접 지정-f, --force
: 이미 그룹이 존재하는 경우에도 오류 없이 진행-r, --system
: 시스템 그룹 생성 (낮은 GID 할당)-o, --non-unique
: 중복 GID 허용
사용 예시
기본 그룹 생성:
sudo groupadd developers
간단하게 ‘developers’라는 새 그룹을 생성합니다.
특정 그룹 ID로 그룹 생성:
sudo groupadd -g 2000 project1
‘project1’이라는 그룹을 GID 2000으로 생성합니다.
시스템 그룹 생성:
sudo groupadd -r appgroup
시스템용 그룹을 생성합니다. 시스템 그룹은 애플리케이션이나 서비스를 위한 그룹으로, 일반적으로 낮은 GID가 할당됩니다.
중복 GID 허용으로 그룹 생성:
sudo groupadd -o -g 1000 specialgroup
이 명령어는 GID 1000을 가진 그룹이 이미 존재하더라도 같은 GID를 가진 새 그룹을 생성합니다.
주의사항
- 그룹 이름은 시스템 내에서 고유해야 합니다.
- 기본적으로 GID는 중복될 수 없지만,
-o
옵션을 사용하면 가능합니다. - 시스템 그룹과 일반 그룹의 ID 범위가 다릅니다.
4. passwd – 사용자 비밀번호 관리
passwd
명령어는 사용자 계정의 비밀번호를 설정하거나 변경할 때 사용합니다.
주요 옵션
-d, --delete
: 비밀번호 삭제 (비밀번호 없이 로그인 가능)-e, --expire
: 비밀번호 만료시키기 (다음 로그인 시 변경 필요)-l, --lock
: 계정 잠금-u, --unlock
: 계정 잠금 해제-n, --minimum DAYS
: 비밀번호 변경 사이의 최소 일수 설정-x, --maximum DAYS
: 비밀번호 유효 기간 (일수) 설정-w, --warning DAYS
: 비밀번호 만료 전 경고 일수 설정-S, --status
: 계정 상태 표시
사용 예시
자신의 비밀번호 변경:
passwd
일반 사용자가 자신의 비밀번호를 변경할 때는 옵션 없이 사용합니다. 현재 비밀번호를 입력한 후 새 비밀번호를 두 번 입력해야 합니다.
다른 사용자의 비밀번호 설정 (관리자 권한 필요):
sudo passwd username
관리자가 다른 사용자의 비밀번호를 변경할 때 사용합니다. 현재 비밀번호를 확인하지 않고 새 비밀번호만 설정합니다.
사용자 계정 비밀번호 만료시키기:
sudo passwd -e username
‘username’ 사용자의 비밀번호를 만료시킵니다. 다음 로그인 시 반드시 새 비밀번호를 설정해야 합니다.
비밀번호 정책 설정:
sudo passwd -n 7 -x 90 -w 7 username
‘username’ 사용자의 비밀번호 정책을 설정합니다: 비밀번호 변경 후 최소 7일 동안 다시 변경 불가, 90일 동안 유효, 만료 7일 전부터 경고 표시.
계정 상태 확인:
sudo passwd -S username
지정된 사용자 계정의 비밀번호 상태를 확인합니다. 출력에는 비밀번호 변경 날짜, 만료 정보 등이 포함됩니다.
비밀번호 잠금 (로그인 불가):
sudo passwd -l username
사용자 계정의 비밀번호를 잠가서 로그인할 수 없게 만듭니다. 계정 자체는 유지됩니다.
주의사항
- 루트 계정이 아닌 일반 사용자는 자신의 비밀번호만 변경할 수 있습니다.
-d
옵션으로 비밀번호를 삭제하면 보안상 위험할 수 있으니 주의해야 합니다.- 시스템은 일반적으로 비밀번호 복잡성에 대한 정책을 가지고 있으며, 너무 단순한 비밀번호는 거부될 수 있습니다.
- 비밀번호 정책은
/etc/login.defs
파일에서 기본값을 확인할 수 있습니다.
5. userdel – 사용자 계정 삭제
userdel
명령어는 시스템에서 사용자 계정을 제거할 때 사용합니다.
주요 옵션
-r, --remove
: 사용자의 홈 디렉토리와 메일 스풀 함께 삭제-f, --force
: 강제 삭제, 사용자가 로그인 중이거나 실행 중인 프로세스가 있어도 삭제
사용 예시
기본 사용자 삭제:
sudo userdel username
‘username’ 사용자 계정을 삭제합니다. 단, 홈 디렉토리와 메일은 그대로 남습니다.
홈 디렉토리와 메일을 포함한 완전 삭제:
sudo userdel -r username
‘username’ 사용자 계정과 함께 해당 사용자의 홈 디렉토리와 메일 스풀까지 모두 삭제합니다.
강제 삭제:
sudo userdel -f -r username
사용자가 현재 로그인 중이거나 실행 중인 프로세스가 있어도 강제로 계정과 관련 파일을 모두 삭제합니다.
주의사항
-r
옵션을 사용하면 사용자의 모든 파일이 삭제되므로 중요한 데이터가 있는 경우 먼저 백업해야 합니다.- 시스템 계정 삭제는 시스템 안정성에 영향을 줄 수 있으니 주의해야 합니다.
- 사용자가 소유한 파일이 홈 디렉토리 외부에 있다면
-r
옵션을 사용해도 삭제되지 않습니다.
6. groupdel – 그룹 삭제
groupdel
명령어는 시스템에서 그룹을 제거할 때 사용합니다.
주요 옵션
-f, --force
: 그룹이 사용자의 기본 그룹이더라도 강제 삭제
사용 예시
그룹 삭제:
sudo groupdel groupname
‘groupname’ 그룹을 시스템에서 삭제합니다.
강제 그룹 삭제:
sudo groupdel -f groupname
‘groupname’ 그룹이 일부 사용자의 기본 그룹이더라도 강제로 삭제합니다.
주의사항
- 기본적으로 어떤 사용자의 기본 그룹인 경우 삭제할 수 없습니다.
- 시스템 그룹 삭제는 시스템 안정성에 영향을 줄 수 있습니다.
- 그룹을 삭제해도 해당 그룹이 소유한 파일은 삭제되지 않으며, GID만 남게 됩니다.
7. gpasswd – 그룹 비밀번호 및 관리자 설정
gpasswd
명령어는 그룹 관리를 위한 도구로, 그룹 비밀번호 설정, 그룹 관리자 지정, 그룹 멤버 관리 등을 할 수 있습니다.
주요 옵션
-a, --add USER
: 사용자를 그룹에 추가-d, --delete USER
: 그룹에서 사용자 제거-r, --remove-password
: 그룹 비밀번호 제거-R, --restrict
: 그룹 접근을 멤버로 제한-M, --members USER1,USER2,...
: 그룹 멤버 목록 설정 (기존 멤버 대체)-A, --administrators ADMIN1,ADMIN2,...
: 그룹 관리자 목록 설정
사용 예시
그룹에 사용자 추가:
sudo gpasswd -a username groupname
‘username’ 사용자를 ‘groupname’ 그룹에 추가합니다.
그룹에서 사용자 제거:
sudo gpasswd -d username groupname
‘groupname’ 그룹에서 ‘username’ 사용자를 제거합니다.
그룹 관리자 설정:
sudo gpasswd -A username1,username2 groupname
‘username1’과 ‘username2’를 ‘groupname’ 그룹의 관리자로 설정합니다. 그룹 관리자는 -a
와 -d
옵션을 사용하여 멤버를 관리할 수 있습니다.
그룹 멤버 전체 설정 (기존 멤버 대체):
sudo gpasswd -M user1,user2,user3 groupname
‘groupname’ 그룹의 멤버를 ‘user1’, ‘user2’, ‘user3’로 설정합니다. 기존 멤버는 모두 제거됩니다.
그룹 비밀번호 설정:
sudo gpasswd groupname
‘groupname’ 그룹의 비밀번호를 설정합니다. 그룹 비밀번호가 있으면 newgrp
명령어로 해당 그룹으로 전환할 때 사용됩니다.
주의사항
- 그룹 비밀번호는 보안 상 권장되지 않는 기능입니다.
-M
옵션은 기존 멤버 목록을 완전히 대체하므로 주의해서 사용해야 합니다.- 일반 사용자는 그룹 관리자로 지정된 경우에만 멤버를 관리할 수 있습니다.
8. groups 및 id – 사용자 그룹 정보 확인
groups
와 id
명령어는 사용자의 그룹 소속 정보를 확인할 때 사용합니다.
사용 예시
현재 사용자의 그룹 확인:
groups
특정 사용자의 그룹 확인:
groups username
사용자의 ID 및 그룹 정보 상세 확인:
id username
이 명령어는 사용자의 UID, GID, 소속된 모든 그룹을 표시합니다.
사용자의 UID만 확인:
id -u username
사용자의 기본 GID만 확인:
id -g username
사용자의 모든 그룹 ID 확인:
id -G username
주의사항
- 일반 사용자는 다른 사용자의 정보를 확인하는 것이 제한될 수 있습니다.
- 출력 결과에 표시되는 첫 번째 그룹이 사용자의 기본 그룹입니다.
9. chage – 사용자 계정 만료 정보 관리
chage
명령어는 사용자 계정의 만료 정보를 관리하는 데 사용됩니다.
주요 옵션
-d, --lastday LAST_DAY
: 마지막 비밀번호 변경일 설정-E, --expiredate EXPIRE_DATE
: 계정 만료일 설정-I, --inactive INACTIVE
: 비밀번호 만료 후 계정 비활성화까지 유예 기간 설정-m, --mindays MIN_DAYS
: 비밀번호 변경 사이의 최소 일수-M, --maxdays MAX_DAYS
: 비밀번호 유효 기간 (일수)-W, --warndays WARN_DAYS
: 비밀번호 만료 전 경고 기간 (일수)-l, --list
: 계정 만료 정보 표시
사용 예시
사용자 계정 만료 정보 확인:
sudo chage -l username
‘username’ 사용자의 비밀번호 및 계정 만료 정보를 자세히 표시합니다.
계정 만료일 설정:
sudo chage -E 2026-12-31 username
‘username’ 사용자 계정이 2026년 12월 31일에 만료되도록 설정합니다.
비밀번호 정책 설정:
sudo chage -m 7 -M 90 -W 7 -I 14 username
이 명령어는 다음을 설정합니다:
- 비밀번호 변경 후 최소 7일은 다시 변경 불가
- 비밀번호 최대 유효 기간 90일
- 만료 7일 전부터 경고 표시
- 비밀번호 만료 후 14일 동안 유예 기간 제공, 이후 계정 비활성화
사용자가 다음 로그인 시 비밀번호 변경하도록 설정:
sudo chage -d 0 username
마지막 비밀번호 변경일을 0으로 설정하여, 다음 로그인 시 반드시 변경하도록 강제합니다.
주의사항
- 날짜 형식은 YYYY-MM-DD 또는 숫자(1970년 1월 1일부터의 일수)로 지정할 수 있습니다.
-1
값은 “never”를 의미합니다 (예:-E -1
은 계정이 만료되지 않음).- 루트 계정이 아닌 일반 사용자는 자신의 정보만 볼 수 있습니다(
chage -l
).
10. getent – 시스템 데이터베이스 정보 조회
getent
명령어는 시스템의 다양한 데이터베이스에서 정보를 조회할 수 있습니다. 사용자 및 그룹 관리에서는 passwd와 group 데이터베이스를 조회하는 데 유용합니다.
사용 예시
모든 사용자 정보 조회:
getent passwd
특정 사용자 정보 조회:
getent passwd username
모든 그룹 정보 조회:
getent group
특정 그룹 정보 조회:
getent group groupname
특정 UID 조회:
getent passwd 1000
특정 GID 조회:
getent group 1000
주의사항
getent passwd
는/etc/passwd
파일뿐만 아니라 LDAP, NIS 등의 네트워크 데이터베이스도 검색합니다.- 출력 형식은 각 데이터베이스에 따라 다릅니다.
11. newgrp – 현재 세션의 활성 그룹 변경
newgrp
명령어는 현재 로그인 세션의 활성 그룹을 변경합니다.
사용 예시
활성 그룹 변경:
newgrp groupname
이 명령어는 사용자가 소속된 그룹 중 ‘groupname’으로 현재 세션의 기본 그룹을 변경합니다.
기본 그룹으로 복귀:
newgrp
옵션 없이 사용하면 사용자의 기본 그룹으로 돌아갑니다.
주의사항
- 사용자가 해당 그룹에 소속되어 있어야 합니다.
- 그룹에 비밀번호가 설정되어 있다면 비밀번호 입력이 필요할 수 있습니다.
- 이 명령어는 새 셸을 시작하므로, 종료하면 이전 그룹으로 돌아갑니다.
이상으로 리눅스 시스템에서 사용자와 그룹 관리에 대한 모든 명령어를 알아봤습니다. 이 글에서 다룬 명령어들을 능숙하게 사용할 수 있다면 리눅스 시스템을 더 효율적이고 안전하게 관리할 수 있을 것이라 생각합니다. 각 명령어의 man
페이지를 참고하면 더 자세한 옵션과 사용법을 확인할 수 있으니, 필요할 때 man useradd
와 같이 입력하여 참고해보시길 추천드립니다. 이 글이 리눅스 사용자 및 그룹 관리에 대한 이해를 높이는 데 도움이 되었기를 바랍니다. 🙂