[Linux] shadow 패스워드 정책 및 계정 정책 관리
패스워드 저장 정책에는 passwd 파일 내 계정 정보와 함께 저장하는 일반 패스워드 정책과 shadow 파일에 패스워드를 별도로 저장하는 shadow 패스워드 정책이 있다.
shadow 파일
패스워드 정보를 평문으로 저장할 경우 유출 피해가 발생할 수 있으므로 패스워드를 암호화하여 보호해야한다. shadow 패스워드를 사용하여 /etc/shadow
파일에 암호화된 패스워드가 저장되도록 하고 root 만이 읽을 수 있도록 제한한다. shadow 파일에는 계정별 암호화된 패스워드와 에이징(aging)정보가 저장되어 있다. 패스워드 에이징 정보는 시간의 흐름에 따른 패스워드 관리 정책이다.
① 사용자 계정명
② encrypted_password : 암호화된 패스워드 (3가지 필드 아래 글 참고)
③ last_change : 마지막으로 패스워드를 변경한 날 (1970.1.1 기준으로 일 수로 표시)
④ minlife : 패스워드 최소 사용기간
⑤ maxlife : 패스워드 최대 사용기간
⑥ warn : 패스워드 만료 이전 경고일수
⑦ inactive : 패스워드가 만료된 이후 계정이 잠기기 전까지 비활성 일수
⑧ expires : 계정 만료일 설정
- 패스워드 최소 사용기간을 설정하지 않으면 최근 암호 기억을 무력화하여 익숙한 패스워드를 재사용할 문제점이 있으므로 1일(1주)로 설정할 것을 권장
- 패스워드 최대 사용기간을 설정하지 않으면 패스워드 유출 발생 시 공격자의 계속적인 접근이 가능하므로 90일(12주)로 설정할 것을 권장
encrypted_password 필드 구성 ✨
$ID$salt$encrypted_password
ID
: 암호화에 적용된 일방향 해시 알고리즘을 식별하기 위한 ID ( 1:MD5 , 2:BlowFish , 5:SHA-256, 6:SHA-512 ) 5 이상의 해시 알고리즘 권장salt
: 솔트(salt)는 패스워드 암호화 강도를 높이기 위한 임의의 값으로 사용자가 지정한 패스워드에 salt를 추가하여 암호화된 패스워드를 생성한다. 동일한 패스워드를 사용하는 두 계정이 있다면 서로 다른 솔트에 의해서 실제 암호화된 패스워드는 서로 다르다.
salt를 통해 레인보우 테이블 공격에 효과적으로 대응할 수 있다. 레인보우 테이블 공격을 통해 암호화된 패스워드의 평문 패스워드를 알아낸다고 해도 이는 salt와 조합된 패스워드 해시값에 대한 평문 패스워드로 실제 패스워드가 아니다.
encrypted_password
: 사용자 패스워드 + salt 의 해시값. 즉, 암호화된 패스워드
💡 encrypted_password 필드의 기호 의미
*
: 패스워드가 잠긴 상태로 패스워드 로그인이 불가능. 별도의 인증방식을 통해 로그인 가능
!!
: 패스워드 잠긴 상태로 모든 로그인이 불가능. 사용자 계정을 생성하고 패스워드를 설정하지 않으면 !! 상태
빈값
: 패스워드가 설정되어 있지 않은 상태로 비밀번호 없이 로그인할 수 있는 상태
패스워드 잠금 및 해제
passwd -l 계정명
: 패스워드 잠금passwd -u 계정명
: 패스워드 잠금 해제
계정 정책 관리
패스워드 에이징 정책이란 패스워드 사용 시간/기간 경과에 따른 패스워드 관리 정책을 의미한다.
- 패스워드 정책 설정파일 :
/etc/login.defs
- 패스워드 에이징 설정 명령어 :
chage
패스워드 저장 정책 변경 ✨
pwconv
: shadow 패스워드 정책으로 변경하는 명령어pwunconv
: 일반 패스워드 정책으로 변경하는 명령어