[1과목 3장 01절] /etc/passwd 7필드와 /etc/shadow 9필드, useradd·usermod·userdel·passwd·chage 옵션을 다룹니다.
🎯 이 강의 학습 목표
이 강부터 1과목 3장 기본 명령어로 들어갑니다. 이 강은 01절 사용자 계정 생성과 관리의 앞부분입니다. 이 강을 마치면 /etc/passwd의 7개 필드와 /etc/shadow의 9개 필드를 순서대로 해석할 수 있고, useradd·usermod·userdel·passwd·chage의 주요 옵션을 골라 쓸 수 있게 됩니다.
계정 관리는 1차와 2차 양쪽에서 모두 출제되는 드문 주제입니다. 출제 형태는 필드 순서를 묻는 문제와 명령에 옵션을 붙인 뒤 그 결과를 해석하는 문제 두 가지입니다. 후자는 useradd -f -5 lms처럼 옵션 하나로 답이 갈리므로, 옵션을 글자와 의미로 정확히 연결해 두어야 합니다.
💡 /etc/passwd — 7개 필드
리눅스는 사용자 계정 정보를 /etc/passwd라는 텍스트 파일에 한 줄씩 저장합니다. 필드는 콜론(:)으로 구분되며 총 7개입니다.
$ grep -E "^(root|nobody|chung):" /etc/passwd
root:x:0:0:root:/root:/bin/bash
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
chung:x:1000:1000:,,,:/home/chung:/bin/bash
| 순서 | 필드 | 설명 | root 줄의 값 |
|---|---|---|---|
| 1 | 사용자명 | 로그인 ID | root |
| 2 | 암호 | 지금은 x — 실제 암호는 /etc/shadow에 | x |
| 3 | UID | 사용자 번호. root는 0 | 0 |
| 4 | GID | 1차 그룹 번호 | 0 |
| 5 | 설명(GECOS) | 실명·연락처 등 주석. 비어 있어도 됨 | root |
| 6 | 홈 디렉터리 | 로그인 시 들어가는 경로 | /root |
| 7 | 로그인 셸 | 로그인 후 실행할 셸 | /bin/bash |
세 줄을 비교하면 많은 것이 보입니다. root의 UID와 GID가 0인데, UID 0이 곧 관리자라는 것이 리눅스의 규칙입니다. 이름이 root여서가 아니라 UID가 0이어서 모든 권한을 갖습니다. 반대로 이름이 root가 아니어도 UID를 0으로 주면 관리자가 되므로, 보안 점검 시 UID 0인 계정이 여러 개인지 확인하는 것이 기본입니다.
nobody와 chung의 7번째 필드를 비교해 보십시오. chung은 /bin/bash지만 nobody는 /usr/sbin/nologin입니다. 로그인 셸 자리에 nologin이나 /bin/false를 넣으면 그 계정으로는 로그인할 수 없습니다. 서비스 전용 계정(시스템 계정)에 쓰는 방법이며, "이 계정은 시스템에 로그인할 수 없다"를 판단하는 근거로 시험에 그대로 나옵니다.
UID에는 관례적인 구간이 있습니다. 0은 root, 1~999는 시스템·서비스 계정, 1000부터가 일반 사용자입니다. 위 출력에서 chung이 1000번인 것이 그 때문입니다. 이 경계값은 /etc/login.defs에 정의되어 있습니다.
💡 /etc/shadow — 9개 필드
과거에는 암호화된 암호가 /etc/passwd에 직접 들어 있었습니다. 그런데 이 파일은 모든 사용자가 읽을 수 있어야 합니다(이름과 UID를 조회해야 하므로). 암호 해시가 노출되면 무차별 대입 공격의 표적이 되므로, 암호만 떼어 root만 읽을 수 있는 /etc/shadow로 옮겼습니다. 이것이 섀도 패스워드(Shadow Password)이며, /etc/passwd의 2번째 필드에 남은 x가 "암호는 shadow에 있다"는 표시입니다.
/etc/shadow는 9개 필드로 구성됩니다.
| 순서 | 필드 | 설명 |
|---|---|---|
| 1 | 사용자명 | — |
| 2 | 암호화된 암호 | $6$로 시작하면 SHA-512. *·!는 로그인 잠금 |
| 3 | 마지막 변경일 | 1970-01-01부터의 일 수 |
| 4 | 최소 사용일 | 이 기간 안에는 다시 못 바꿈 |
| 5 | 최대 사용일 | 이 기간이 지나면 변경 강제 |
| 6 | 경고일 | 만료 며칠 전부터 경고 |
| 7 | 유예 기간 | 만료 후 이 기간까지는 로그인해 변경 가능 |
| 8 | 계정 만료일 | 1970-01-01부터의 일 수. 이날 이후 로그인 불가 |
| 9 | 예약 필드 | 미사용 |
3번과 8번 필드가 날짜가 아니라 1970년 1월 1일부터 센 일 수라는 점이 중요합니다. 시험에서 "20000" 같은 숫자를 주고 의미를 묻습니다. 또 5번(최대 사용일)과 8번(계정 만료일)을 혼동하기 쉬운데, 5번은 암호의 수명이고 8번은 계정 자체의 수명입니다.
이 값들의 기본값은 /etc/login.defs에 정의되어 있습니다.
$ grep -E "^(UID_MIN|UID_MAX|GID_MIN|PASS_MAX_DAYS|PASS_MIN_DAYS|PASS_WARN_AGE|USERGROUPS_ENAB)" /etc/login.defs
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_WARN_AGE 7
UID_MIN 1000
UID_MAX 60000
GID_MIN 1000
USERGROUPS_ENAB yes
UID_MIN 1000이 앞에서 말한 "일반 사용자는 1000번부터"의 근거입니다. PASS_MAX_DAYS 99999는 사실상 암호 만료를 두지 않는다는 뜻이고, PASS_WARN_AGE 7은 만료 7일 전부터 경고한다는 의미입니다. 새 계정을 만들면 이 값들이 /etc/shadow의 해당 필드에 그대로 들어갑니다.
💡 계정 생성 — useradd와 /etc/skel
useradd는 계정을 만드는 명령입니다. 주요 옵션을 정리합니다.
| 옵션 | 의미 |
|---|---|
-u | UID 지정 |
-g | 1차 그룹 지정 |
-G | 2차 그룹(보조 그룹) 지정 — 소문자 -g와 반드시 구분 |
-d | 홈 디렉터리 경로 지정 |
-m / -M | 홈 디렉터리 생성 / 생성하지 않음 |
-s | 로그인 셸 지정 |
-c | 설명(GECOS) 지정 |
-e | 계정 만료일 지정(YYYY-MM-DD) |
-f | 암호 만료 후 유예 기간(일). -1이면 기능 사용 안 함 |
-g와 -G의 구분, 그리고 -e와 -f의 구분이 출제 핵심입니다. -e는 날짜를 받고 계정을 만료시키며, -f는 일 수를 받고 암호 만료 후 유예를 정합니다. 예를 들어 useradd -f 5 lms는 "암호가 만료된 뒤 5일까지는 로그인해서 암호를 바꿀 수 있다"는 뜻입니다.
기본값은 /etc/default/useradd와 /etc/login.defs에서 옵니다. 그리고 홈 디렉터리를 만들 때 /etc/skel의 내용이 그대로 복사됩니다.
$ ls -a /etc/skel/
. .. .bash_logout .bashrc .profile
/etc/skel은 새 계정의 홈 디렉터리 원본(skeleton)입니다. 여기에 .bashrc·.profile이 들어 있으므로, 새 사용자는 만들어지자마자 이 설정 파일들을 갖게 됩니다. 모든 신규 사용자에게 공통 설정을 배포하고 싶다면 이 디렉터리에 파일을 넣으면 됩니다. 시험에서 "계정 생성 시 기본적으로 설정되는 항목"을 물으면 홈 디렉터리·셸·UID·그룹·skel 복사가 답이고, "vi 에디터"처럼 계정과 무관한 항목이 오답으로 들어갑니다.
💡 계정 수정·삭제와 암호 관리
usermod는 기존 계정의 속성을 바꿉니다. 옵션 체계는 useradd와 거의 같습니다(-u -g -G -d -s -c -e -f). 여기에 -l(로그인명 변경), -L(계정 잠금), -U(잠금 해제), -a가 추가됩니다.
-a는 반드시 -G와 함께 씁니다. usermod -G docker chung이라고만 하면 기존 보조 그룹이 모두 날아가고 docker 하나만 남습니다. 기존 그룹을 유지하며 추가하려면 usermod -aG docker chung이어야 합니다. 실무에서 사고가 잦은 지점이자 시험 함정입니다.
userdel은 계정을 삭제합니다. 옵션 없이 실행하면 계정 정보만 지우고 홈 디렉터리는 남습니다. 홈 디렉터리와 메일 스풀까지 함께 지우려면 -r을 붙입니다. userdel -r lms가 그 형태입니다.
passwd는 암호를 설정·변경합니다. 일반 사용자는 자신의 암호만, root는 모든 사용자의 암호를 바꿀 수 있습니다.
| 옵션 | 의미 |
|---|---|
-l | 계정 잠금(lock) |
-u | 잠금 해제(unlock) |
-d | 암호 삭제 |
-S | 암호 상태 확인 |
-e | 암호를 즉시 만료시켜 다음 로그인 때 변경 강제 |
chage는 암호 유효 기간 전용 명령으로, /etc/shadow의 3~8번 필드를 직접 다룹니다. -l(현재 설정 조회), -m(최소 사용일), -M(최대 사용일), -W(경고일), -I(유예 기간), -E(계정 만료일), -d(마지막 변경일)를 씁니다. 대문자와 소문자가 다른 의미라는 점에 주의하십시오.
💻 실습으로 확인하기
계정 생성은 root 권한이 필요하고 시스템을 변경하므로, 여기서는 조회 계열 명령으로 확인하겠습니다. 아래는 실제 실행 결과입니다.
$ id chung
uid=1000(chung) gid=1000(chung) groups=1000(chung),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),100(users),1001(docker)
id는 계정의 UID·GID·소속 그룹을 한 번에 보여 줍니다. uid=1000과 gid=1000(chung)이 1차 그룹이고, groups= 뒤에 나열된 adm·sudo·docker 등이 2차 그룹입니다. 앞에서 본 useradd -g와 -G가 각각 어느 자리에 반영되는지 이 출력에서 확인할 수 있습니다. 특히 sudo 그룹에 속해 있다는 것은 관리자 권한을 빌려 쓸 수 있다는 뜻이며, 11강에서 다룹니다.
$ head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
UID가 0 → 1 → 2로 이어지고, root를 제외한 나머지는 셸이 /usr/sbin/nologin입니다. 시스템 계정은 서비스를 돌리기 위해 존재할 뿐 사람이 로그인하지 않는다는 원칙이 파일에 그대로 드러납니다.
계정을 실제로 만들고 지우는 실습은 가상머신에서 다음 순서로 해 보십시오. 운영 중인 시스템에서는 실행하지 마십시오.
# 가상머신 등 실습 환경에서만 실행할 것
sudo useradd -m -s /bin/bash -c "Test User" -e 2026-12-31 lms
sudo passwd lms
grep lms /etc/passwd # 7개 필드 확인
sudo chage -l lms # 암호·계정 만료 설정 확인
sudo userdel -r lms # 홈 디렉터리까지 삭제
각 줄을 설명하면, -m으로 홈 디렉터리를 만들고 /etc/skel을 복사하며, -s로 로그인 셸을, -c로 설명 필드를, -e로 계정 만료일을 지정합니다. chage -l은 그 결과가 /etc/shadow에 어떻게 들어갔는지 사람이 읽을 수 있는 형태로 보여 줍니다. 마지막 userdel -r의 -r을 빠뜨리면 /home/lms가 그대로 남습니다.
⚠️ 시험에 나오는 함정
| 함정 | 정확한 사실 |
|---|---|
userdel만 실행하면 홈 디렉터리도 지워진다 | 남는다. -r이 있어야 삭제 |
usermod -G로 그룹을 추가한다 | 기존 보조 그룹이 사라진다. -aG를 써야 추가 |
-e와 -f는 비슷하다 | -e는 계정 만료일(날짜), -f는 암호 만료 후 유예(일 수) |
/etc/passwd의 x는 암호가 없다는 뜻 | 암호가 /etc/shadow에 있다는 표시 |
shadow의 날짜 필드는 YYYY-MM-DD | 1970-01-01부터의 일 수 |
관리자는 이름이 root인 계정이다 | UID가 0인 계정이 관리자 |
| 일반 사용자 UID는 500부터 | 현재 주요 배포판은 1000부터(/etc/login.defs의 UID_MIN) |
📝 핵심 요약 — 암기표
| 항목 | 핵심 |
|---|---|
/etc/passwd 7필드 | 사용자명 : x : UID : GID : 설명 : 홈 : 셸 |
/etc/shadow 9필드 | 사용자명 : 암호 : 마지막변경 : 최소 : 최대 : 경고 : 유예 : 계정만료 : 예약 |
| UID 관례 | 0=root · 1~999=시스템 · 1000~=일반 |
| 로그인 차단 | 셸 자리에 /usr/sbin/nologin 또는 /bin/false |
useradd 핵심 옵션 | -g(1차) vs -G(2차) · -m/-M · -e(계정만료일) vs -f(유예일수) |
usermod | -aG로 그룹 추가(-a 없으면 덮어씀) · -l 이름변경 · -L/-U 잠금 |
userdel | -r 있어야 홈 디렉터리까지 삭제 |
passwd | -l 잠금 · -u 해제 · -d 삭제 · -S 상태 · -e 즉시만료 |
chage | -l 조회 · -m/-M 최소·최대 · -W 경고 · -E 계정만료 |
| 관련 파일 | /etc/default/useradd · /etc/login.defs · /etc/skel |
다음 11강에서는 그룹 파일 구조와 groupadd·gpasswd·newgrp, 그리고 권한을 빌려 쓰는 su와 sudo를 다룹니다.
📋 실전 문제
1. /etc/passwd 파일의 필드 순서로 알맞은 것은?
① 사용자명 : UID : 암호 : GID : 설명 : 홈 : 셸
② 사용자명 : 암호 : UID : GID : 설명 : 홈 : 셸
③ 사용자명 : 암호 : GID : UID : 홈 : 셸 : 설명
④ 사용자명 : UID : GID : 암호 : 셸 : 홈 : 설명
2. 다음 /etc/passwd 항목에 대한 설명으로 틀린 것은?
lms:x:1001:1001::/home/lms:/usr/sbin/nologin
① 암호는 /etc/shadow에 저장되어 있다.
② UID와 GID가 모두 1001이다.
③ 홈 디렉터리는 /home/lms이다.
④ lms 계정으로 시스템에 로그인할 수 있다.
3. userdel 명령으로 계정을 삭제할 때 홈 디렉터리까지 함께 삭제하려면 사용해야 하는 옵션은?
① -f ② -r ③ -d ④ -m
4. 기존의 보조 그룹을 유지하면서 사용자 lms를 docker 그룹에 추가하는 명령으로 알맞은 것은?
① usermod -G docker lms ② usermod -aG docker lms
③ usermod -g docker lms ④ useradd -G docker lms
5. 새 계정 생성 시 홈 디렉터리로 복사되는 원본 파일들이 들어 있는 디렉터리는?
① /etc/skel ② /etc/default ③ /etc/profile.d ④ /etc/login.defs
6. /etc/shadow 파일에서 마지막 암호 변경일을 나타내는 필드의 값 형식은?
① YYYY-MM-DD 형식의 날짜
② 1970년 1월 1일부터 경과한 일 수
③ 1970년 1월 1일부터 경과한 초 수
④ 시스템 부팅 후 경과한 일 수
7. 사용자 계정의 암호를 즉시 만료시켜 다음 로그인 시 반드시 변경하도록 하는 명령은?
① passwd -l lms ② passwd -d lms
③ passwd -e lms ④ passwd -S lms
8. 리눅스에서 관리자 권한을 가지는 계정의 판단 기준으로 옳은 것은?
① 계정 이름이 root인 경우
② UID가 0인 경우
③ 홈 디렉터리가 /root인 경우
④ 로그인 셸이 /bin/bash인 경우
✅ 정답과 해설
1. 정답 ②
사용자명 : 암호 : UID : GID : 설명 : 홈 디렉터리 : 로그인 셸 순서입니다. 2번 자리에 암호(x)가 오고 그다음이 UID라는 점이 핵심입니다. ①은 UID와 암호의 자리가 바뀌었고, ③은 UID와 GID 순서가, ④는 전체 배열이 틀렸습니다.
2. 정답 ④
로그인 셸이 /usr/sbin/nologin이므로 이 계정으로는 로그인할 수 없습니다. ①은 2번 필드의 x가 의미하는 바로 옳고, ②의 UID·GID 1001, ③의 홈 디렉터리도 항목 그대로입니다. 참고로 5번 설명 필드는 비어 있습니다.
3. 정답 ②
-r(remove)입니다. 이 옵션 없이 userdel만 실행하면 /etc/passwd·/etc/shadow의 항목만 지워지고 홈 디렉터리와 메일 스풀은 남습니다. ①의 -f는 강제 삭제, ③·④는 userdel의 홈 디렉터리 삭제 옵션이 아닙니다.
4. 정답 ②
-aG여야 합니다. ①처럼 -a 없이 -G만 쓰면 기존 보조 그룹이 모두 지워지고 docker만 남습니다. ③의 소문자 -g는 1차 그룹을 변경하는 옵션이라 의미가 다르고, ④의 useradd는 이미 존재하는 계정에 쓸 수 없습니다.
5. 정답 ①
/etc/skel입니다. .bashrc·.profile·.bash_logout 등이 들어 있어 새 사용자의 홈 디렉터리로 복사됩니다. ②의 /etc/default에는 useradd 기본값 파일이, ④의 /etc/login.defs에는 UID 범위와 암호 정책 기본값이 들어 있습니다.
6. 정답 ②
1970년 1월 1일부터 경과한 일 수입니다. 유닉스 시각의 기준일(Epoch)을 쓰되 단위가 초가 아니라 일이라는 점이 함정입니다. ③의 초 단위는 일반적인 유닉스 타임스탬프의 단위이므로 헷갈리기 쉽습니다.
7. 정답 ③
passwd -e가 암호를 즉시 만료시켜 다음 로그인 때 변경을 강제합니다. ①의 -l은 계정 잠금, ②의 -d는 암호 삭제(암호 없이 로그인 가능해지므로 위험), ④의 -S는 암호 상태 조회입니다.
8. 정답 ②
UID가 0이면 이름과 무관하게 관리자 권한을 갖습니다. 그래서 보안 점검에서 UID 0인 계정이 root 외에 또 있는지 확인합니다. ①·③·④는 관례일 뿐 권한의 근거가 아닙니다.
📚 참고 자료
관련 주제
- /etc/passwd
- /etc/shadow
- useradd
- usermod
- userdel
- chage
- UID
- login.defs
- 자격증
- 자격증 강의
- 리눅스마스터 2급 완전정복
- 무료강의
- 무료 온라인 강의
- NUGUNA
- 누구나
📚 시리즈 전체 공유
리눅스마스터 2급 완전정복
이 강의가 속한 시리즈는 총 10강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.
댓글
불러오는 중...
