Infra & Security Eng/Linux Fundamentals
사용자 관리(/etc/passwd, /etc/shadow, groupadd, groupdel, useradd, userdel, passwd 명령어) 총 정리
엔지니어 E
2025. 12. 27. 12:17
반응형
1️⃣ 사용자 등록 정보: /etc/passwd
리눅스에서 사용자의 기본 등록 정보는 /etc/passwd 파일에 저장
다만 사용자 패스워드는 보안상 shadow password 방식을 사용하므로, 사용자의 실제 비밀번호는 /etc/shadow 파일에 저장
💡 참고 사항
사용자 계정은 보통 useradd 명령으로 생성하며, /etc/passwd 파일을 직접 수정하는 것도 가능하지만 권장되지 않음
📌 /etc/passwd 파일 확인
|
# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
계정명:암호:UID:GID:주석:홈디렉토리:쉘 |
📌 /etc/passwd 구성 요소
각 항목은 : 로 구분되며, 총 7개의 필드로 구성
계정명 |
사용자 계정 이름 |
| 암호(x) | 실제 비밀번호는 /etc/shadow에 저장됨을 의미 * x에는 패스워드가 들어있었음, 여기에는 비밀번호가 없어요 라는 뜻 |
| UID | 사용자 고유 ID 번호 (0은 root 사용자) |
| GID | 기본 그룹 ID (마스터 그룹) * 사용자가 어느 그룹에 속해있는지 알려주는 그룹번호 * 사용자는 이 그룹이 아닌 다른 그룹에도 소속될 수 있음 |
| 주석 | 사용자 설명 (이름, 메모 등 자유 입력) * 입력해도 되고, 입력하지 않아도 됨 |
| 홈 디렉토리 | 로그인 시 기본 위치 |
| 쉘 | 로그인 후 사용할 쉘 프로그램 * 쉘이 없다면 계정에 로그인이 필요 없음 ex) # cat /etc/passwd 입력 - ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin |
📌 shadow password의 구조 (/etc/shadow)
- 리눅스에서는 사용자 비밀번호를 /etc/shadow 파일에 암호화하여 저장
- 이 파일은 보안상 root만 접근 가능하며, 실제 로그인 인증에 사용
📌 /etc/shadow 구성요소
| # cat /etc/shadow 출력 예시: ora12c:$6$bo580c3Q$te9……9f2S9Bq/:18162:0:99999:7:::
계정 : 암호 : 최종변경일(1970/01/01 이후) : 암호최소사용일: 암호최대유효기간 : 암호 만료까지 경고기간 : 암호 만료 뒤 계정 폐쇄까지 기간 : 계정 만료일 : 예비 |
계정(ora12c) |
로그인할 때 쓰는 아이디 |
| 암호(ora12c:$6 $bo580c3Q$ te9……9f2S9Bq) | 암호화된 비밀번호 * $6(해시알고리즘): SHA-512 (RHEL 8, Ubuntu 등에서 주로 사용) * $y: yescrypt (RHEL 9, Fedora 36, Ubuntu 23.04 등 최신 배포본) * $1: MD5, $5: SHA256, $2a: Blowfish |
| 최종 변경일 | 비밀번호를 마지막으로 바꾼 날짜 |
| 암호 최소 사용일 | 비밀번호를 너무 자주 못 바꾸게 하는 기간 ex) 3일 → 바꾸고 나서 3일 동안은 다시 변경 불가 |
| 암호 최대 유효기간 | 비밀번호를 꼭 바꿔야 하는 최대 기간 ex) 90일 → 90일 지나면 무조건 변경 필요 |
| 암호 만료까지 경고기간 | 비밀번호 바꾸라고 미리 알려주는 기간 ex) 7일 → 만료 7일 전부터 로그인할 때 경고 메시지 표시 |
| 암호 만료 뒤 계정 폐쇄까지 기간 | 비밀번호 안 바꾸면 계정이 잠기기까지의 시간 |
| 계정 만료일 | 계정 자체가 끝나는 날짜 |
| 예비 | 지금은 사용하지 않는 자리 |
📌암호 필드 상세 분석 (예시)
ora12c:$6$bo580c3Q$te9……9f2S9Bq/:18162:0:99999:7:::
- $6 : 해시 알고리즘 (SHA-512)
- $bo580c3Q$ : Salt(솔트) (해시 생성 시 추가되는 무작위 값)
- te9……9f2S9Bq/ : Salt + 패스워드가 결합된 최종 해시값
2️⃣ 그룹(Group) 등록 정보
- 리눅스에서 그룹(Group) 은 권한을 할당하는 기본 단위이며,사용자는 반드시 하나 이상의 그룹에 소속
- 그룹 관련 정보는 /etc/group 파일에 저장되며, 새 그룹은 groupadd 명령을 통해 생성
📌 /etc/group 파일 확인
| # cat /etc/group 출력 예시: root:x:0: daemon:x:1: dba:x:1100:ora12c,ora11g,ora10g,root 그룹명:암호:GID:소속 계정 |
/etc/group 파일은 콜론(:)으로 구분된 4개의 필드로 구성
그룹명(dba) |
그룹의 이름 |
| 암호(x) | 사용되지 않음 (보통 x) |
| GID(1100) | 그룹 ID 번호 |
| 소속계정(ORA11g,ora10g,root) | 해당 그룹에 속한 사용자 목록 * 1100이라는 그룹에 속한 계정이 ora11g, ora10g, root 이라는 뜻 |
💡참고사항
* 그룹: 권한을 할당하는 단위
* 계정은 여러 그룹에 속하고, 기본 소속 그룹은 /etc/group 파일에 등록
📌 groupadd 명령어
그룹 등록
사용자를 생성하기 전에 반드시 사용자가 속할 그룹을 먼저 생성해야 한다.
(그렇지 않으면 사용자/권한 관리가 매우 복잡해짐 ⚠️)
| # groupadd [-g [그룹번호]] [그룹명] ex) groupadd -g 2000 st * 1000번 미만은 그룹번호로 사용 불가 |
주요 명령어
-g |
생성 그룹의 GID 번호 지정 → 미지정 시 1000 이상에서 자동 할당 (GID는 단지 식별용 번호) |
| -r | 1000번 이하의 GID 번호 자동 할당 * 1000번 이하 GID는 시스템(daemon/관리)용이므로 사용 비권장 |
| -o | 중복된 GID 번호 할당 가능 * 같은 GID, 다른 그룹명 생성 가능 (다른 GID, 같은 그룹명 생성 불가) |
| 소속계정(ORA11g,ora10g,root) | 해당 그룹에 속한 사용자 목록 * 1100이라는 그룹에 속한 계정이 ora11g, ora10g, root 이라는 뜻 |
📌 groupdel 명령어
그룹 삭제
그룹을 삭제할 때는 반드시 그룹명으로만 삭제한다.
(GID로는 삭제 불가)
| # groupdel [그룹명] ex) # groupdel st |
주요 명령어
-g |
생성 그룹의 GID 번호 지정 → 미지정 시 1000 이상에서 자동 할당 (GID는 단지 식별용 번호) |
| -r | 1000번 이하의 GID 번호 자동 할당 * 1000번 이하 GID는 시스템(daemon/관리)용이므로 사용 비권장 |
| -o | 중복된 GID 번호 할당 가능 * 같은 GID, 다른 그룹명 생성 가능 (다른 GID, 같은 그룹명 생성 불가) |
| 소속계정(ORA11g,ora10g,root) | 해당 그룹에 속한 사용자 목록 * 1100이라는 그룹에 속한 계정이 ora11g, ora10g, root 이라는 뜻 |
3️⃣ 사용자 생성
📌 useradd(=adduser) 명령어
계정 생성
| # useradd [옵션] [사용자명] ex) useradd -g st -u 2001 st01 → st01 사용자는 st 그룹에 속하는 2001번 사용자이다 (그룹은 문자든 숫자든 상관없음) |
주요 명령어
| -u | UID 지정 |
| -g | GID 혹은 그룹명 지정 |
| -d | 홈 디렉토리 지정 |
| -g | 보조 그룹 지정 |
| -D | 기본 설정 확인 및 변경 |
| -b: 홈 디렉토리 수정 -g: 기본 그룹 변경 -s: 기본 쉘 변경 -m: skel 디렉토리 변경 -e 패스워드 만료일 변경 -f: grace 기간 변경 ex) # useradd-D -e 100 -f 10 |
|
| -s | 쉘 지정 * 로그인이 필요 없는 관리용 계정은 /sbin/nologin으로 설정 ★ 보안 작업 할때 작업일지만 보는 것을 준거성 테스트라 하는데 메일만 사용하는 계정이 있음 ( → /sbin/nologin 으로 계정 사용) |
| -M | - 메일 전용 계정 생성 - 홈 디렉토리 생성되지 x ex) # useradd-g imsy -M imsy01 |
| -r | - UID 999번 이하의 계정을 자동 할당 - 서비스용 더미 계정으로 실제 로그인 사용자가 없음, 홈 디렉토리도 없음 - Shell은 /sbin/nologin으로 지정됨 ex) # useradd-g imsy-r -s /sbin/nologinimsy02 |
⚠️ 빨간색 칠한 명령어는 반드시 지정 해야함 (예시로 -g 명령어 입력을 안할 시 사용자 계정으로 자동으로 만들어짐)
4️⃣ 사용자 삭제
📌 userdel 명령어
계정 삭제
| # userdel -r 사용자명 ex) # userdel -r st01 |
주요 명령어
-r: 계정에 귀속된 홈 디렉토리, 메일 박스 등 모두 삭제
⚠️ 계정삭제 시 옵션 -r 은 반드시 사용해야 함
5️⃣ 패스워드 관리
📌 passwd 명령어
비밀번호 변경
사용자의 암호를 변경하는 명령어
관리자는 다른 사용자의 암호를 변경할 수 있지만, 기존 암호를 확인할 수 없다
| # passwd [사용자계정] # passwd ex) # passwd st01 |
6️⃣ 사용자 생성 과정
| ① /etc/default/useradd, /etc/login.defs ② /etc/passwd, /etc/group ③ 홈디렉토리 생성 ④ /etc/skel/ 파일 복사 ⑤ /var/mail/ 계정 파일 생성 |
/etc/default/useradd |
ex) [root@linux ~]# useradd-D GROUP=100 HOME=/home INACTIVE=-1 EXPIRE= SHELL=/bin/bash SKEL=/etc/skel - GROUP: 기본 등록 그룹의 GID - HOME: 생성될 홈 디렉토리의 위치 - INACTIVE: 패스워드 만료 이후의 유효(기간) 여부 설정 - EXPIRE: 계정 종료일자 지정 - SHELL: 기본 사용 쉘 지정 - SKEL: 홈 디렉토리에 복사할 기본 환경 파일 위치 * useradd -D를 이용하여 수정 |
| /etc/login.defs | ex) # PASS_MIN_LEN Minimum acceptable password length. - MAIL_DIR: 메일이 저장되는 디렉토리 설정 - PASS_MAX_DAYS: 패스워드 유효기간(99999: 무한대) - PASS_MIN_DAYS: 지정 기간 내에는 패스워드 변경 불허 - PASS_MIN_LEN: 패스워드 최소 길이 - PASS_WARN_AGE: 패스워드 grace time - UID_MIN: 생성 UID의 최소 숫자 - UID_MAX: UID의 최대 가능 숫자 - GID_MIN: 생성 GID의 최소 숫자 - GID_MAX: GID의 최대 가능 숫자 - CREATE_HOME: 홈 디렉토리 생성 여부 |
7️⃣ 사용자 정보 수정
📌usermod 명령어
| # usermod [옵션] [사용자명] ex) # usermod-G st st01 |
| -g | 그룹 변경 |
| -G | 보조 그룹 변경 * -a와 함께 쓰면 보조그룹이 추가 됨 |
| -s | 셀 변경 |
| -u | UID 변경 |
| -l | 계정 변경 (- -login) * -d, -m 도 같이 사용됨 |
| -d | 홈 디렉토리 변경 (- -home) * -m: 지정한 디렉토리 생성 및 파일 이전, -d와 함께 쓰임 (- - move-home) |
8️⃣ 계정 잠금과 해제
| # usermod [-L , -U] [사용자명] - L : lock (--lock), -U : unlock (--unlock) # passwd [-l, -u, -S] [사용자명] - l : lock, -u : unlock, -S : 잠금 확인 * 계정 lock 과 관련된 정보는 /etc/shadow 파일을 확인 [root@linux ~]# usermod- L st01 [root@linux ~]# cat /etc/shadow | grep st01 st01:!$6$ciL7cr8z$CHioDPmny8Ch35bmHLuB1erHVWj6XP7s5ca3c0qxi.S9IEdmOdyIgX7/w27yAZ4...... [root@linux ~]# usermod -U st01 [root@linux ~]# cat /etc/shadow | grep st01 st01:$6$ciL7cr8z$CHioDPmny8Ch35bmHLuB1erHVWj6XP7s5ca3c0qxi.S9IEdmOdyIgX7/w27yAZ...... |
9️⃣ 패스워드 관리
| # chage [옵션] [사용자명] |
주요 명령어
| -l | 패스워드 설정 내용 확인 |
| -M | 패스워드 만료일: passwd -n |
| -W | 만료일 이전 경고 기간: passwd -w |
| -I | 만료 이후 계정을 잠그는 기간: passwd -i |
| -E | 패스워드 만료 날짜(YYYY/MM/DD), 날짜 이후 계정 LOCK!! |
| -d | 패스워드 강제 변경 날짜(YYYY/MM/DDD), 날짜 이후 패스워드 강제 변경 |
| -m | 패스워드 최소 유효 기간(불필요한 변경을 막는다) |
| ex) chage –m 10 –M 100 –W 5 –E 2030/12/31 st01 st01 계정의 패스워드는 설정 후 10일이 지나야 변경 가능하며 100일 이내에 변경해야 하고 만료 5일전 부터 경고가 발생한다. 그리고 2030년 12월 31일 이후에는 사용 하지 못한다 |
🔟 안전한 패스워드 관리 가이드
1. 일반 사용자 권장 사항 (사전 대입 공격 방지)
- 조합: 영문 대문자, 소문자, 숫자, 특수문자 중 2종류 이상 혼합
- 길이: 최소 8글자 이상 설정
- 내용: 아이디(ID)와 연관성이 있거나 유추 가능한 단어 제외
- 분리: 사이트/시스템마다 서로 다른 패스워드 사용
- 갱신: 최소 6개월에 한 번씩 주기적으로 변경
2. 관리자 및 보안 강화 사항
- 취약점 대응: 아무리 복잡한 비밀번호라도 생일 공격(Birthday Attack) 등 해시 충돌 공격에 취약할 수 있음
- 대응 방안: 관리자는 직접 장시간 크래킹(Cracking) 테스트를 수행하여 물리적인 보안 강도를 직접 검증한 후 사용