-
/etc/passwd & /etc/shadowSystem 2024. 8. 19. 14:19
/etc/passwd
사용자 계정 정보를 관리하는 파일
UNIX / LINUX 사용자 관리
- 시스템을 이용하는 사용자 계정과 인증을 관리
- passwd 파일에 사용자 계정 비밀번호를 저장
- shadow 파일에 암호화 하여 비밀번호를 저장 후 root 계정만 접근 가능
- 일반 패스워드 정책
passwd 파일 구조
[user_account] : [user_password] : [user_ID] : [group_ID] : [comment] : [home_directory] : [login_shell]
user_account
- 사용자 계정명, root 계정은 시스템에 대한 총괄 권한을 가지고 있는 계정으로 공격자의 목표가 될 수 있으므로 원격 접속을 금지하는 것이 보안상 안전하다.
- 일반적으로 root 계정으로 su(switch user) 명령을 허용하는 계정 그룹을 생성한 후 해당 계정으로 접속 후 root 계정으로 전환하여(su 명령) 사용한다.
UID
- 사용자 ID(User ID), root 계정의 경우 0으로 부여한다.
- UID는 중복되어 사용될 수 있으며 동일한 UID가 부여된 계정은 계정명이 달라도 동일한 권한을 부여받는다. 따라서 임의로 생성된 계정에 UID가 0으로 부여되어 있다면 root 권한 탈취를 위한 행위로 의심해 보아야 한다.
GID
- 사용가 기본 그룹ID(Group ID), root 그룹의 경우 0으로 부여한다.
- GID도 UID와 동일하게 중복되어 부여될 수 있으므로 임의로 생성된 그룹에 GID가 0으로 부여되어 있는지 점검하여야 한다.
comment
- 설명, 사용자 관련 기타 정보로 일반적으로 사용자 ID를 설정한다.
home_directory
- 홈 디렉터리, 로그인에 성공한 후에 사용자가 위치할 홈 디렉터리로 root 계정은 /root 디렉터리를 사용하며 일반 사용자는 /home 디렉터리 하위에 위치한다.
login_shell
- 로그인 쉘(shell), Linux의 경우 기본 쉘로 bash shell을 사용하며, 로그인이 불필요한 계정(일반적으로 시스템 및 어플리케이션 계정)에 대해서는 로그인을 금지하는 것이 보안 상 안전하다.
💡 사용자 로그인 쉘(7번 필드)점검 로그인이 불필요한 계정에 대해서는 로그인을 금지하도록 설정하여 공격자에 의한 불법적인 시스템 접근에 악용되지 않도록 해야한다 → 해당 계정의 로그인 쉘을 /sbin/nologin 또는 /bin/false로 설정한다
/sbin/nologin : FTP SSH 서비스를 비롯하여 시스템의 로그인이 불가능하다. 또한 홈 디렉터리를 사용할 수 없다 /bin/false : SSH 접근 및 홈 디렉터리 서비스는 사용이 불가능하지만 FTP 서비스는 사용 가능하다
/etc/shadow
/etc/shadow 파일에 암호화된 패스워드가 저장되도록 하고 관리자만이 읽을 수 있도록 제한하여 구현할 수 있다.
shadow 파일에는 계정별로 암호화된 패스워드 정보와 패스워드 에이징(aging) 정보가 저장되어 있다. 패스워드 에이징 정보는 시간의 흐름에 따른 패스워드 관리 정책을 말한다.
[user_account] : [encrypted_password] : [last_change] : [minlife] : [maxlife] : [warn] : [inactive] : [expires]
user_account
- 사용자 계정명
encrypted_password
- 암호화된 패스워드
last_change
- 마지막으로 패스워드를 변경한 날 (1970년 1월 1일 기준으로 지난 일수로 표시)
minlife
- 패스워드 최소 사용기간 설정으로 패스워드를 마지막으로 변경한 날 이후부터 패스워드를 변경할 수 없는 일수를 의미한다.
- 패스워드 최소 사용기간을 설정하지 않으면 익숙한 패스워드를 재사용할 문제점이 있으므로 1일(혹은 1주)로 설정할 것을 권장한다.
maxlife
- 패스워드 최대 사용기간 설정으로 패스워드를 마지막으로 변경한 날 이후부터 패스워드 만료 일수를 의미한다.
- 패스워드 최대 사용기간을 설정하지 않으면 패스워드 유출 발생 시 공격자의 계속적인 접근이 가능하므로 90일(12주)로 설정할 것을 권장한다.
warm
- 패스워드 만료 이전 경고 일수
inactive
- 패스워드가 만료된 이후 계정이 잠기기 전까지의 비활성 일수로 해당 비활성 기간 동안 패스워드를 변경하지 않으면 계정이 잠기게 된다.
- Unix 계열에서는 마지막 로그인 이후 비활성 일수 동안 로그인을 하지 않으면 계정을 잠근다는 의미로 Linux와 차이가 있다.
expires
- 계정 만료일 설정으로 1970년 1월 1일을 기준으로 일수로 표시한다.
💡 encrypted_password 구성
encrypted_password 필드는 $ID$Salt$encrypted_password 형식으로 되어있다.
ex) $1$1Tyc0bAE$CGxLH0klyFWnzMvAHFLFZ
ID는 암호화에 적용된 일방향 해시 알고리즘을 식별하기 위한 ID로 1:MD5, 2:Blowfish, 5:SHA-256, 6:SHA-512를 의미한다. 최근에는 MD5 알고리즘이 더 이상 안전하지 않기 때문에 SHA-256 이상의 해시 알고리즘이 권장된다.
정리
- UNIX / Linux 패스워드 정책에는 /etc/passwd와 /etc/shadow 2가지 정책이 존재
- passwd 파일의 로그인 쉘을 점검하여 로그인이 불필요한 계정에 대한 접근권한 설정
- shadow 파일은 암호화된 패스워드를 가지고 있어 보안 상 shadow 정책을 사용하는 것이 안전
'System' 카테고리의 다른 글
PAM (Pluggable Authentication Modules) (0) 2024.08.19 su root / sudo su 차이 (0) 2024.08.19 - 시스템을 이용하는 사용자 계정과 인증을 관리