UNIX/유닉스 공통

[스크랩] 리눅스 계정 정책

99iberty 2013. 10. 30. 16:30

 

http://iprize.tistory.com/663

 

윈도우 계열에서는 Active Directory를 이용하여 사용자 계정 정책을 설정할 수 있다. 그렇다면 리눅스 시스템에서 계정 정책은 어떻게 설정할까? 이번 포스트에서 계정 정책 설정하는 방법을 알아본다.


비밀번호 만료일 설정

useradd 명령어를 사용하여 계정을 새로 생성할 때 아래 파일과 파라메터가 사용된다. 이들 세팅은 /etc/shadow 파일에 각 사용자 계정별로 기록된다.


/etc/login.defs PASS_MAX_DAYS 60 비밀번호가 유효한 최대 일자
/etc/login.defs PASS_MIN_DAYS 7 비밀번호를 변경할 수 있는 최소 일자. 이 파라메터는 아무런 효과가 없다.
/etc/login.defs PASS_MIN_LEN n/a

이 파라메터는 아무런 효과가 없다. 이는 PAM 모듈 "pam_cracklib"이 우선 적용된다. 자세한 사항은 비밀번호 강화하기를 참고하라.

/etc/login.defs PASS_WARN_AGE 7 비밀번호 변경 주의가 시작되는 일자.
/etc/default/useradd INACTIVE 14

만료일 이후 계정이 비활성화되는 일자.

/etc/default/useradd EXPIRE 비밀번호 만료 일자(YYYY-MM-DD)


password inactive와 expire의 기본 설정은 미설정이다. 그리고 pam_cracklib에서 minlen= 항목이 설정되지 않은 경우 최소 비밀번호 길이는 6이다.

기존 계정의 비밀번호 만료일을 수정하기 위해서는 /usr/bin/chage가 사용된다. chage는 /etc/shadow 파일의 비밀번호 변경 필드(3번째 필드)를 변경하지 않기 때문에 실행 즉시 만료될 수 있다. /etc/shadow 파일의 비밀번호 변경 필드를 갱신하기 위해 -d 옵션을 사용할 수 있다.


비밀번호 만료 설정을 아래와 같이 설정하고자 할 때 설정법은 아래와 같다.

  • 비밀번호 변경 최소 일자 : 7일
  • 90일 이후 비밀번호 만료
  • 비밀번호 만료 14일 이전부터 경고 표시

# /usr/bin/chage -m 7 -M 90 -W 14 <account>


비밀번호가 만료되어 비활성화될 경우(chage -l이나 /etc/shadow의 7번째 필드 참조) 사용자는 로그인할 수가 없을 것이며 관리자가 비밀번호를 재설정하여야 한다.


Dec 4 14:33:42 host sshd(pam_unix)[31601]: account hutchib has expired (failed to change password)


비밀번호가 만료되었지만 비활성화되지 않았을 때 로그인 유예 기간이 허용되며 이 기간동안 즉시 비밀번호를 변경하여야 한다. 비밀번호가 변경되는 즉시 연결이 종료되며 다시 로그인하여야 한다.


WARNING: Your password has expired.
You must change your password now and login again!
Changing password for user <account>.
Changing password for <account>
(current) UNIX password:
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
Connection to host closed.


비밀번호 길이 및 강도
pam_cracklib와 pam_passwdqc는 비밀번호 길이와 복잡도를 강제하는 데 사용되는 모듈이다. pam_passwrd가 더 강력하지만 여기서는 pam_cracklib를 사용하여 설정한다. Debian 배포판에서 pam_cracklib.so 모듈은 libpam-cracklib을 설치하여야 사용할 수 있다.
설정하는 방법은 아래와 같다.
  • 비밀번호 최소 길이 : 9자
  • 하나 이상 소문자 포함
  • 하나 이상 대문자 포함
  • 하나 이상 숫자 포함

/etc/pam.d/system-auth (Redhat), /etc/pam.d/common-passwd(Debian)에서 아래와 같이 변경한다.
password requisite pam_cracklib.so retry=3 minlen=12 lcredit=1 ucredit=1 dcredit=1 ocredit=0


비밀번호 이력


이전 비밀번호 재사용을 방지하기 위해 pam_unix와 pam_cracklib를 이용한다. 기본 값으로 비밀번호 이력은 비활성화되어 있다.

과거 24개의 비밀번호 재사용을 방지하고자 할 경우 아래와 같이 한다.


  • 비밀번호 데이터베이스를 생성한다.

# touch /etc/security/opasswd
# chown root:root /etc/security/opasswd

#
chmod 600 /etc/security/opasswd


  • PAM 설정하기


/etc/pam.d/system-auth (Redhat), /etc/pam.d/common-passwd(Debian)에서 아래와 같이 변경한다.


password sufficient pam_unix.so nullok use_authtok md5 shadow remember=24

 

계정 잠금


pam_tally를 사용하여 수 번의 로그인 실패 후 계정을 잠글 수 있다. 본 포스트에서는 6번의 로그인 시도 후 계정을 잠그도록 설정한다. 실패 로그인 카운터는 인증이 성공적으로 이루어지면 재설정된다.


  • 실패 로그인 시도를 저장할 파일 생성한다.

# touch /var/log/faillog
# chown root:root /var/log/faillog

#
chmod 600 /var/log/faillog


  • PAM 설정하기

/etc/pam.d/system-auth (Redhat), /etc/pam.d/common-auth, /etc/pam.d/common-account(Debian)에서 아래와 같이 변경한다.

auth required pam_tally.so onerr=fail no_magic_root
#Debian에서는 /etc/pam.d/common-auth에 추가

account required pam_tally.so deny=5 no_magic_root reset
#Debian에서는 /etc/pam.d/common-account에 추가