이 글은 CentOS5 32bit 기준으로 쓰였다.

pam의 기본 개념

  1. CentOS를 기준으로 설명함
  2. 인터넷에서 검색할 내용을 적용하지 마라. 버전별로 옵션이 다르기 때문임. /usr/share/doc/pam-(버전)/txts 을 확인 바람.
  3. /etc/pam.d/ 밑의 파일을 수정하면, 수정한 이후 로그인 하는 계정부터 바로 적용 됨. 갱신 하는 명령어 없음.
  4. 당연한 말이지만, 잘못 수정하면 로그인 못하게 되는(콘솔로도!!) 사태 발생. -> 싱글모드로 부팅하는 수 밖에 없다. 개인 컴퓨터면 문제가 없는데 서비스 중인 서버에선 ...생각을 말자.
    1. 그런 사태를 방지하려면 모듈이 제대로 된 경로에 있는지 확인 해야 함.
      1. /lib/security/ : 32bit 운영체제는 여기 모듈이 있고, 64bit 버전도 /lib/security/ 에서 /lib64/security 심볼릭 링크를 거는 경우가 있지만(CentOS5),
      2. CentOS6 64bit는 /lib/security에 심볼릭 링크가 없었다… 꼭 직접 확인하고 적용!!
      3. /lib64/security/ : 64bit 버전용 pam 모듈은 여기 있음.
    2. 제대로 동작하는 것을 직접 확인하기 전에 root 연결된 터미널 연결을 끊지 말 것.
    3. 적용 하고 나서 /var/secure 와 /var/message 등의 로그를 확인
    4. 이하의 명령어로 실패 횟수 카운트 하는지 확인
      1. pam_tally –u [계정명]
      2. pam_tally2 –u [계정명]
      3. faillog –u [계정명]

패스워드 잠금, 임계 값 등으로 불리는 기능을 CentOS에서 사용하려면 /etc/pam.d/system-auth 를 편집해야 한다(정확히는 /etc/pam.d/system-auth-ac, system-auth는 심볼릭 링크이다.).

이 기능은 패스워드 일정 횟수 입력했는데도 로그인 실패 시, 해당 계정을 일정시간 혹은 영구히 잠궈, 이후 제대로 된 패스워드 입력해도 로그인 할 수 없도록 만드는 설정이다.

무식 공격(bruto force)을 차단하는 방법의 하나가 되겠다.

대충 인터넷 검색해서 해당 기능을 적용하려 보니 2012년 12월 현재와 너무 다른 내용이 많았다.

auth required /lib/security/pam_tally.so no_magic_root
account required /lib/security/pam_tally.so deny=4 rock_time=120 no_magic_root reset

이런 식으로 적용하라는 글이 많은데, 적어도 pam-0.99.6.2-6.el5_5.2 에선 reset 과 no_magic_root 란 옵션은 없으며, 저런 옵션 적용 시 /var/log/message 혹은 /var/log/secure 에 unknown option 이라는 로그가 찍힌다.

#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth        required      pam_env.so
auth        required      pam_tally.so onerr=fail deny=2 lock_time=5 unlock_time=5
account     required      pam_tally.so onerr=fail
auth        sufficient    pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     required      pam_permit.so

password requisite pam_cracklib.so retry=3 minlen=8 lcredit=-2 ucredit=0 dcredit=0 ocredit=-1
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so


위 설정을 적용하면
  1. 3번 패스워드 틀리면 5초간 차단 / 5초 후 해제(unlock_time=5 를 안 하니 잠금이 안 풀렸음)
  2. 패스워드 복잡도 설정, 최소길이 8자, 소문자 두 글자 이상, 알파벳 아닌 글자 최소 한 글자 있어야 함.

문제는 pam_tally2.so 인데, 이건 어떻게 적용해야 하는지 모르겠다. man pam_tally2 해봤는데 거기 설정 보고 해봐도 잠기질 않는다.

이 문제 발생한 서버가 CentOS6였는데, sshd에 대해 잠기지 않길래 /etc/pam.d/system-auth-ac가 아닌 /etc/pam.d/sshd 에 적용했더니 잘 된다.;;

+ Recent posts