기본 문법
usermod [옵션] 사용자명
usermod는 /etc/passwd, /etc/shadow, /etc/group에 기록된 기존 계정 정보를 수정하는 명령어입니다. useradd로 만든 계정의 로그인 이름, UID, 홈 디렉터리, 로그인 셸, 주 그룹과 보조 그룹, 계정 만료일, 잠금 상태를 옵션으로 바꿀 수 있습니다.
실무에서는 부서 이동에 따른 그룹 재배치, 휴직·퇴사자 계정 잠금, 임시 계정의 만료일 지정 등에 사용합니다. -a와 -G를 함께 쓰면 기존 보조 그룹을 유지한 채 그룹을 추가하고, -G만 단독으로 쓰면 기존 보조 그룹이 지정한 목록으로 모두 교체됩니다. 이 차이를 구분하는 것이 핵심입니다.
계정 잠금(-L), 주 그룹(-g)과 보조 그룹(-G) 동시 지정, 계정 만료일(-e) 설정은 리눅스 관리 실습에서 자주 다루는 항목입니다. 변경 후에는 id, getent group, chage -l로 반영 결과를 확인하는 습관을 함께 익혀 두는 것이 좋습니다.
계정 정보는 /etc/passwd와 /etc/shadow를 직접 편집하지 말고 usermod, chage 같은 전용 명령으로 수정해야 파일 간 정합성이 유지됩니다.
자주 쓰는 옵션
| 옵션 | 의미 | 예 |
|---|---|---|
-a, --append | 기존 보조 그룹을 유지한 채 그룹을 추가. 반드시 -G와 함께 사용 | usermod -a -G audit ihduser |
-G, --groups | 보조 그룹 목록을 지정한 값으로 교체(쉼표로 구분). -a와 함께 쓰면 추가 | usermod -G ihd,linuxmaster ihduser |
-g, --gid | 주(기본) 그룹 변경. 그룹명 또는 GID 지정 | usermod -g kait ihduser |
-L, --lock | /etc/shadow의 암호 필드 앞에 !를 붙여 비밀번호 인증을 잠금 | usermod -L ihduser |
-U, --unlock | 암호 필드 앞의 !를 제거해 잠금 해제 | usermod -U ihduser |
-e, --expiredate | 계정 만료일을 YYYY-MM-DD 형식으로 지정. 빈 문자열을 주면 만료일 해제 | usermod -e 2026-12-31 lab_kim |
-s, --shell | 로그인 셸 변경 | usermod -s /sbin/nologin ihduser |
-d, --home | 홈 디렉터리 경로 변경. 파일 이동 없이 경로 값만 바뀜 | usermod -d /home/newdir ihduser |
-m, --move-home | 기존 홈 디렉터리의 내용을 새 경로로 이동. -d와 함께만 사용 | usermod -d /home/newdir -m ihduser |
-l, --login | 로그인 이름 변경. 홈 디렉터리 이름은 그대로 유지됨 | usermod -l newuser olduser |
-u, --uid | UID 변경. 홈 디렉터리 안의 파일 소유권은 자동으로 갱신되지만 그 밖의 파일은 갱신되지 않음 | usermod -u 1500 ihduser |
실무 예시
보조 그룹 추가하기
준비: useradd demo_user; groupadd demo_audit
$ usermod -aG demo_audit demo_user && id demo_user
uid=1000(demo_user) gid=1000(demo_user) groups=1000(demo_user),1001(demo_audit)
-a와 -G를 함께 쓰면 기존 그룹 구성을 유지한 채 보조 그룹만 덧붙입니다. id 출력의 groups 항목에서 추가 여부를 확인합니다. UID와 GID 값은 시스템에 이미 존재하는 계정에 따라 달라집니다.
주 그룹과 보조 그룹 동시에 지정
준비: useradd demo_trainee; groupadd demo_devops; groupadd demo_release
$ usermod -g demo_devops -G demo_release demo_trainee && id demo_trainee
uid=1001(demo_trainee) gid=1003(demo_devops) groups=1003(demo_devops),1004(demo_release)
-g는 주 그룹을, -G는 보조 그룹 목록 전체를 지정합니다. -a를 쓰지 않았으므로 기존 보조 그룹은 남지 않고 demo_devops와 demo_release 두 개만 표시됩니다.
passwd 없이 계정 잠그기
준비: useradd demo_lock
$ usermod -L demo_lock && grep '^demo_lock:' /etc/shadow | cut -d: -f1,2
demo_lock:!!
-L은 /etc/shadow의 암호 필드 앞에 !를 붙입니다. 비밀번호가 설정되지 않은 계정은 원래 필드 값이 !이므로 잠금 후 !!로 보입니다. 암호 필드가 !로 시작하면 비밀번호 인증이 잠긴 상태입니다.
계정 만료일 설정
준비: useradd demo_lab
$ usermod -e 2026-12-31 demo_lab && chage -l demo_lab | grep -i expires
Password expires : never
Account expires : Dec 31, 2026
Number of days of warning before password expires : 7
-e로 지정한 날짜가 지나면 해당 계정으로 로그인할 수 없습니다. grep -i expires는 만료 관련 행을 모두 출력하므로 Account expires 행에서 반영 결과를 확인합니다.
홈 디렉터리와 셸 변경
준비: mkdir -p /tmp/demo; useradd -d /tmp/demo/old_home -m demo_move
$ usermod -d /tmp/demo/new_home -m -s /sbin/nologin demo_move && grep '^demo_move:' /etc/passwd
demo_move:x:1004:1007::/tmp/demo/new_home:/sbin/nologin
-d와 -m을 함께 쓰면 기존 홈 디렉터리의 파일까지 새 경로로 이동합니다. /etc/passwd의 6번째 필드(홈 경로)와 7번째 필드(셸)가 바뀐 것을 확인합니다. 새 경로에 이미 파일이 있으면 내용이 섞일 수 있으므로 비어 있는 경로를 지정하세요.
주의할 점
- -a 없이 -G만 쓰면 기존 보조 그룹이 모두 사라지고 지정한 그룹으로 교체됩니다. 변경 전 id 명령으로 현재 그룹을 기록해 두세요.
- -a는 -G와 함께만 동작합니다. usermod -a -g 형태는 오류가 납니다.
- -d만 쓰면 경로 값만 바뀌고 파일은 기존 위치에 남습니다. 파일까지 옮기려면 -m을 함께 씁니다.
- -L은 /etc/shadow의 비밀번호 인증만 막습니다. SSH 공개키나 sudo를 통한 접근은 그대로 가능하므로 완전한 차단이 필요하면 셸을 /sbin/nologin으로 바꾸거나 -e로 만료일을 과거 날짜로 지정하는 방법을 함께 사용합니다.
- -u로 UID를 바꿔도 홈 디렉터리 밖에 있는 파일의 소유권은 자동으로 바뀌지 않습니다. 변경 후 find로 이전 UID 소유 파일을 확인해야 합니다.
- 로그인 중인 사용자에게는 -l, -u, -d 변경이 거부되거나 실행 중인 프로세스의 소유권이 어긋날 수 있습니다. 해당 사용자가 로그아웃한 상태에서 수행하세요.
- /etc/passwd, /etc/shadow, /etc/group을 편집기로 직접 수정하면 파일 간 정합성이 깨질 수 있습니다. 부득이하게 직접 편집해야 한다면 vipw, vigr를 사용하고 사전에 백업하세요.
이 명령어로 풀 수 있는 실습 문제
브라우저 웹 터미널에서 바로 풀고 요구사항별로 자동 채점됩니다. 로그인 없이 5분 체험도 가능합니다.
관련 명령어
마지막 검수 2026-09-16 · 내용에 오류가 있으면 문제 페이지의 질문 기능으로 알려 주세요.
