Shadow password file

Linux의 /etc/shadow는 로컬 계정의 비밀번호 검증값과 만료 정보를 보관한다. 일반 사용자도 계정 이름·UID·로그인 셸 등을 조회해야 하는 /etc/passwd와 달리, 비밀번호 검증에 필요한 값은 읽기 권한을 제한한다.

암호화된 원문과 해시는 다르다

비밀번호 필드에는 보통 salt와 알고리즘 정보가 포함된 해시 형식의 검증값이 저장된다. 서버가 이를 복호화해서 원래 비밀번호를 읽는 방식이 아니다. 입력값을 같은 방식으로 처리해 비교한다. 검증값이 유출되면 공격자가 후보 비밀번호를 대입할 수 있으므로, 해시라고 공개해도 되는 정보는 아니다.

파일 권한과 접근 가능한 관리 그룹은 배포판마다 다를 수 있다. “반드시 root만 읽는다”보다는 일반 사용자에게 읽기 권한을 주지 않는다는 경계가 중요하다.

한 행의 아홉 필드

콜론으로 구분되는 순서는 다음과 같다.

  1. 사용자 이름
  2. 비밀번호 검증값 또는 잠금 표시
  3. 마지막 비밀번호 변경일
  4. 최소 변경 간격
  5. 최대 사용 기간
  6. 만료 전 경고 기간
  7. 비밀번호 만료 후 비활성화까지의 기간
  8. 계정 만료일
  9. 예약 필드

날짜 필드는 Unix epoch 이후 일수로 표현된다. !나 *는 비밀번호 로그인을 막는 데 쓰일 수 있지만, SSH 공개 키 등 다른 인증까지 자동으로 차단한다는 뜻은 아니다. 최종 로그인 가능 여부는 PAM·sshd와 계정 정책도 함께 확인해야 한다.

원문을 출력하지 않고 상태 확인하기

현재 사용자에 대해, 배포판이 허용하는 범위에서 다음 명령을 사용한다.

passwd -S
chage -l "$(id -un)"

첫 번째는 비밀번호 상태를, 두 번째는 만료 관련 정보를 확인한다. LDAP 등 외부 계정 정보까지 모두 보여 주는 명령은 아니다. 설정을 바꿀 때는 /etc/shadow를 직접 편집하기보다 해당 계정 관리 도구를 사용한다.

자료: shadow(5), passwd(1), chage(1)