Linux

Linux - 패스워드 파일의 구조 : /etc/passwd, /etc/shadow

j9m 2022. 10. 3. 06:43
반응형

패스워드 파일

리눅스 시스템을 사용하려면 로그인을 해야 하며, 로그인을 할 때는 사용자 ID와 패스워드를 입력해야 한다. 사용자가 패스워드를 입력하면 리눅스는 /etc/passwd 파일에 있는 패스워드와 패스워드를 암호문(해시함수)으로 비교하고 해당 값이 동일하면 로그인하는 구조이다. /etc/passwd 파일에는 해시로 암호화된 패스워드가 있지만, /etc/passwd에 패스워드를 저장하지 않고 /etc/shadow 파일에 패스워드를 저장할 수도 있다.

 

/etc/passwd 

  • /etc/passwd는 시스템에 로그인하여 자원을 이용할 수 있는 사용자의 목록을 저장하고 있는 정보 파일이다.
  • 이 파일에 기록된 사용자 정보는 그 사용자가 로그인하고, 로그아웃할 때까지 항상 시스템이 사용자를 감시하기 위한 근거가 되는 파일이다.
  • /etc/passwd에는 콜론(:)을 구분자로 ID, 개인의 홈 디렉터리 등 7개의 기본적인 정보를 담고 있으며, /etc/passwd의 패스워드를 다시 암호화하여 /etc/shadow에서 추가로 관리한다. 
  • 아래는 tail 명령어로 /etc/passwd 파일을 읽어서 출력한 결과이다.

 

■ /etc/passwd  기본 구조

  • username : password : UID : GID : fullname : home-directory : shell
cat /etc/passwd
j9m:x:1001:1001::/home/j9m:/bin/bash
필드 설명
username 사용자명으로 일명 ID라고 부른다.
password 사용자의 패스워드가 기록되는 부분으로 현재 대부분의 리눅스 배포판에서는 이필드에 기록되는 패스워드를 암호화하여 /etc/shadow에서 별도로 관리하며 x로 표현된다.
UID UserID로 리눅스에서는 사용자를 숫자값으로 관리한다.
GID GroupID로 사용자가 속한 그룹의 숫자값이다.
fullname 사용자에 대한 추가적인 정보가 기록되는 부분이다.
home-directory 사용자의 작업 디렉터리인 홈 디렉터리를 나타낸다.
shell 로그인시 사용하는 셸을 나타낸다.

 /etc/shadow

  • /etc/shadow는 /etc/passwd의 두 번째 필드인 패스워드 부분을 암호화하여 관리하는데 총 9개의 필드로 구성되어 있고 패스워드 만기일, 계정 만기일 등을 설정할 수 있다. 이 파일은 오직 root만 접근할 수 있다. 
  • 아래는 tail 명령어로 /etc/shadow파일을 읽어서 출력한 결과이다.

 

 /etc/shadow 기본 구조

  • username : password : last : may : must : warn : expire : disable : reserved
필드 설명
username 사용자 이름, 즉 아이디를 나타낸다.
password 암호화된 사용자의 패스워드가 기록되어 있는 곳이다. 초기에는 MD5라는 암호화 알고리즘을 사용했고, Blowfish, SHA-256, SHA-512 등이 사용된다. SHA-512 알고리즘을 사용할 경우에는 $6으로 시작한다.
last 가장 최근에 패스워드를 바꾼 날로 1970년 1월 1일부터 계싼한 날수이다. 아울러 이값을 0으로 변겨앟면 다음 로그인할 때 반드시 패스워드를 변경해야 한다.
may 패스워드를 바꾼 후 최소로 사용해야 되는 날짜수로 다른 패스워드로 변경 가능하기까지의 유예 기간이다. 0이라면 언제라도 패스워드를 변경할 수 있다.
must 현재 사용 중인 패스워드의 최대 사용 가능한 기간, 즉 현재 패스워드 유효 기간이다. 99999이면 패스워드를 변경하지 않고 계속 사용 가능하다는 것을 의미한다. 
warn 패스워드 사용기한이 만료되기 저너에 사용자에게 바꿀 것을 경고하는 기간이다.
expire 패스워드 사용기한이 만료된 뒤에 실제 계정이 불가능하기까지 기간으로 일조의 유예 기간이다.
disable 계정 만기일로 계정 사용 불가능하게 된 날 또는 불가능하게 되는 날이다. 역시 1970년 1월 1일부터 계산한 날 수이다.
reserved
(9번째 필드)
다른 기능을 사용하기 위해 남겨둔 예약된 공가능로 아직 사용하지 않고 있다.

 

관련 명령어 : pwconv, pwunconv
현재 대부분의 리눅스 배포판에서는 사용자의 패스워드를 /etc/passwd가 아닌 /etc/etc/shadow에서 관리하고 있다. 만약,  /etc/passwd에서 관리하려면 pwunconv라고 입력하면 되고, 다시 /etc/shadow에서 관리하려면 pwconv라고 입력하면 된다. 그러나 패스워드의 효율적 관리와 보안 측면에서는 /etc/shadow를 사용하는 것이 좋다.

 

참고자료
CentOS 7으로 리눅스마스터 1급 정복하기
반응형