이 글은 CentOS5 32bit 기준으로 쓰였다.
pam의 기본 개념
- CentOS를 기준으로 설명함
- 인터넷에서 검색할 내용을 적용하지 마라. 버전별로 옵션이 다르기 때문임. /usr/share/doc/pam-(버전)/txts 을 확인 바람.
- /etc/pam.d/ 밑의 파일을 수정하면, 수정한 이후 로그인 하는 계정부터 바로 적용 됨. 갱신 하는 명령어 없음.
- 당연한 말이지만, 잘못 수정하면 로그인 못하게 되는(콘솔로도!!) 사태 발생. -> 싱글모드로 부팅하는 수 밖에 없다. 개인 컴퓨터면 문제가 없는데 서비스 중인 서버에선 …생각을 말자.
- 그런 사태를 방지하려면 모듈이 제대로 된 경로에 있는지 확인 해야 함.
- /lib/security/ : 32bit 운영체제는 여기 모듈이 있고, 64bit 버전도 /lib/security/ 에서 /lib64/security 로 심볼릭 링크를 거는 경우가 있지만(CentOS5),
- CentOS6 64bit는 /lib/security에 심볼릭 링크가 없었다… 꼭 직접 확인하고 적용!!
- /lib64/security/ : 64bit 버전용 pam 모듈은 여기 있음.
- 제대로 동작하는 것을 직접 확인하기 전에 root 연결된 터미널 연결을 끊지 말 것.
- 적용 하고 나서 /var/secure 와 /var/message 등의 로그를 확인
- 이하의 명령어로 실패 횟수 카운트 하는지 확인
- pam_tally –u [계정명]
- pam_tally2 –u [계정명]
- 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
위 설정을 적용하면
- 3번 패스워드 틀리면 5초간 차단 / 5초 후 해제(unlock_time=5 를 안 하니 잠금이 안 풀렸음)
- 패스워드 복잡도 설정, 최소길이 8자, 소문자 두 글자 이상, 알파벳 아닌 글자 최소 한 글자 있어야 함.
문제는 pam_tally2.so 인데, 이건 어떻게 적용해야 하는지 모르겠다. man pam_tally2 해봤는데 거기 설정 보고 해봐도 잠기질 않는다.
이 문제 발생한 서버가 CentOS6였는데, sshd에 대해 잠기지 않길래 /etc/pam.d/system-auth-ac가 아닌 /etc/pam.d/sshd 에 적용했더니 잘 된다.;;
답글 남기기