커피닉스, 시스템 엔지니어의 쉼터
  Linux, FreeBSD에서 비밀번호 정책 설정 작성일 : 2008/01/03 21:48
 
  • 글쓴이 : 좋은진호 ( http://coffeenix.net/ )
  • 조회수 : 21305
     
    제  목 : Linux, FreeBSD에서 비밀번호 정책 설정
    작성자 : 좋은진호(truefeel, http://coffeenix.net/ )
    작성일 : 2007.12.21(금)
    수정일 : 2008.1.3(목)

    Linux와 FreeBSD에서 비밀번호의 유효기간과 최소 길이를 제한하는 방법을 간단히 설명한다.

    1. Linux에서

    /etc/login.defs 파일 PASS_.. 시작하는 설정값을 통해서 비밀번호 설정을 제어하게 된다.



    PASS_MAX_DAYS : 비밀번호의 최대 유효일  (기본값 : 99999. 365이면 1년)
    PASS_MIN_DAYS : 비밀번호를 변경할 수 없는 최소일 (기본값 : 0. 만료전이면 언제나 변경 가능)
    PASS_WARN_AGE : 비밀번호 만료 전에 주어지는 경고일 (기본값 : 0)
    PASS_MIN_LEN  : 비밀번호의 최소 길이

    login.defs 를 수정하면, 새로 생성되는 ID에 대해서 바로 적용이 된다. 그렇다면 기존에 생성되어 있는 ID는 어떻게 되는가? 기존 ID는 login.defs 변경 전의 설정을 갖고 있다. 위 설정 중 고려할 설정값은 PASS_MAX_DAYS, PASS_MIN_LEN인데, PASS_MAX_DAYS는 login.defs 변경 전의 설정값을 따르게 되고, PASS_MIN_LEN은 해당 ID가 새롭게 비밀번호를 변경하게 되면 그 때 부터 적용받게 된다. 기존 ID의 비밀번호 유효일 조정은 chage 명령을 이용하면 쉽게 가능하다. (shadow파일을 직접 수정할 수도 있지만 권장하지 않음)



    chage -l truefeel 명령으로 확인하고,
    chage -M 365 truefeel 로 최대 유효일을 변경할 수 있다.



    2. FreeBSD 4.x에서

    /etc/login.conf 파일에 비밀번호 정책을 설정하며, 일반 사용자는 'default:' class에 설정하고, root는 'root:' class 에 설정한다.




    passwordtime=    비밀번호의 최대 유효일  (365d이면 1년)
    minpasswordlen=  비밀번호의 최소 길이
    mixpasswordcase= 비밀번호가 반드시 대소문자 섞여서 사용하기를 바라면 true 로 설정

     
    default:\
       ... 생략 ...
       :passwordtime=365d:\
            :minpasswordlen=8:\

    root:\
       :ignorenologin:\
       :passwordtime=180d:\
            :minpasswordlen=8:\
            :idletime=120m:\
            :tc=default:
     


    설정시 주의할 것은

    1) 각 class가 끝나기 전까지는 역슬래쉬(\)를 넣어 끝나지 않았음을 표시해야 하며,
    2) 'root:' class에서 설정시에 설정값은 tc=default 보다 위에 있어야 한다.
       예를들어 'default:' class에 passwordtime=365d 설정이 있다고 가정하자. 그리고 다음과 같이 설정되어 있을 경우, passwordtime=180d 설정값은 무시되고, 대신 default에 있는 365일이 적용된다.

     
    root:\
       ... 생략 ...
            :tc=default:\
       :passwordtime=180d:   <-- default 에 이미 설정값이 있다면 적용되지 않음
     


    설정이 완료됐으면 'cap_mkdb /etc/login.conf' 명령을 실행해야한다.
    기존 ID에 대한 비밀번호 만료일 변경은 chsh 명령으로 설정할 수 있으며, 다음과 같이 저장하면 2008년 3월 1일에 만료된다. 또는 비밀번호를 변경(passwd 명령이용)하면 자동으로 현재일 기준으로 passwordtime이 적용된다.

     
    # chsh truefeel
    ... 생략 ...
    Change [month day year]: 03 01 2008
    ... 생략 ...
     


    3. FreeBSD 6.x (또는 5.x)에서

    FreeBSD 6.x에서는 login.conf 설정 대신에 pam_passwdqc PAM 모듈을 사용하여 비밀번호의 길이와 복잡성 정도를 설정한다.
    /etc/pam.d/passwd 를 보면 다음과 같이 pam_passwdqc.so 모듈 부분이 주석처리되어 있을 것이다.

     
    #password       requisite       pam_passwdqc.so         enforce=users
     


    다음과 같이 설정을 하면 비밀번호 변경시 8자리 이상의 비밀번호를 입력해야하며 반드시, 2가지 이상의 문자종류(대문자, 소문자, 숫자, 그외(특수문자) 등)를 섞어야 한다.

     
    password        requisite       pam_passwdqc.so         min=disabled,8,8,8,8 passphrase=0 match=0 similar=permit enforce=users
     


    min=disabled,8,8,8,8 을 min=disabled,N1,N2,N3,N4으로 표현했을 때, 각 의미를 살펴보자.

    N1 : 2가지의 문자조합으로 했을 때 문자열의 최소 길이
    N2 : passphrase를 사용할 때(위에서는 passphrase=0으로 사용하지 않음) passphrase의 길이
    N3 : 3가지 이상의 조합을 했을 때 문자열의 최소 길이
    N4 : 모든조합(4가지 조합)을 했을 때 문자열의 최소 길이. 즉, 대소문자+숫자+특수문자 등이 모두 들어간 경우

    만약 min=disabled,12,10,8,6 라고 설정했다면,
    - 2가지 조합(이를테면 대문자+소문자 라던지, 대문자+숫자 등등)이면 12자리 이상이어야 하며,
    - 3가지이상 조합이면 8자리 이상 (예. trueTR99 => 소문자+대문자+숫자)
    - 4가지 조합이면 6자리만 되어도 비밀번호를 만족하게 된다.
      (예. trTR9! => 소문자+대문자+숫자+특수문자)
    이 때 주의할 것은 마지막 문자가 숫자인 경우 해당 숫자는 조합수에서 빠지며, 첫문자가 대문자인 경우도 조합수에서 빠진다. 예를들어, trTR9!는 4가지 조합이지만, trTR!9는 6자리로 이뤄진 3가지 조합으로 인식한다. trTR!89는 마지막 '9'를 빼더라도 소문자+대문자+특수문자+숫자로 4가지 조합이 된다.

    similar=permit 은 비밀번호 변경시 그 이전 비밀번호와 유사해도 허용함을 의미한다.

    4. 참고자료

    * FreeBSD의 login.conf 의 맨페이지
      http://threads.seas.gwu.edu/cgi-bin/man2web?program=login.conf§ion=5
    * Hardening FreeBSD (Updated: 06/27/2005)
      http://www.bsdguides.org/guides/freebsd/security/harden.php
    * pam_passwdqc 홈페이지와 man page
      http://www.openwall.com/passwdqc/



    커피닉스, 시스템 엔지니어의 쉼터 / URL : http://coffeenix.net/board_view.php?bd_code=1561