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:::

  1. $6 : 해시 알고리즘 (SHA-512)
  2. $bo580c3Q$ : Salt(솔트) (해시 생성 시 추가되는 무작위 값)
  3. 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 파일 구성 요소

/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) 테스트를 수행하여 물리적인 보안 강도를 직접 검증한 후 사용