PAM tally는 Linux 쉘 유저에 대한 접근 제한 로그인 카운터이다. Redhat Linux 기준으로 RHEL 6 부터 tally2가 기본적으로 적용되어 있으며, 바뀐 사항에 대한 내용과 tally2의 적용 방법에 대해서 알아본다.
목차
1. tally2 by pam
1.1. 접근 루트
접근 루트를 기준으로 몇가지가 있다. 이것은 tally2 모듈 뿐만 아닌 다른 모듈도 해당이 된다.
RHEL 5 까지는 /etc/pam.d/system-auth config 파일이 일괄 처리하였으나 RHEL 6부터 접근 루트에 따라 아래와 같이 세분화 되었다.
/etc/pam.d/password-auth
/etc/pam.d/system-auth
/etc/pam.d/fingerprint-auth
/etc/pam.d/smartcard-auth
자세한 사항은 Redhat 문서 등을 확인 할 것.
https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Migration_Planning_Guide/sect-Migration_Guide-Security_Authentication-PAM.html
이 문서에서는 서버 운영상 주로 사용되는 system-auth 와 password-auth에 대해서만 기술을 한다.
1.2. 로컬 설정파일
콘솔에서의 로그인 카운트는 아래 파일 설정으로 가능하다.
/etc/pam.d/system-auth
이 설정에 적용 받는 접속 경로에 대해서는 아래에 설명을 참조할 것.
1.3. 리모트 설정파일
ssh, telnet 등을 통한 원격 로그인 카운트는 아래 파일 설정으로 가능하다.
/etc/pam.d/password-auth
이 설정에 적용 받는 접속 경로에 대해서는 아래에 설명을 참조할 것.
2. 계정 생성
2.1. test user 생성
계정 생성 후 tally에 의한 실패 횟수를 확인해 본다.
[root@Bacula-system ~]# useradd test [root@Bacula-system ~]# pam_tally2 -u test Login Failures Latest failure From test 0
2.2. 접속 테스트
ssh 및 console을 통해 test 계정에 올바르지 않은 비밀번호로 접속을 시도해 본다.
아직 설정을 하지 않아서 test 계정으로 접속 실패를 하여도 실패 횟수가 올라가지 않는다.
[root@Bacula-system ~]# pam_tally2 -u test Login Failures Latest failure From test 0
3. 설정
3.1. system-auth
auth와 account 부분 각각 한 라인씩 2줄이 추가되며, 위치(순서)가 auth, account 모두 위에서 2번째 이상에 위치해야 제대로 동작을 한다.
아래 설정은 접속 실패 3을 초과 하면 그 이후부터 접속이 제한된다. 단, 1200초 후에 제한이 풀리고 그때 로그인을 통과하면 카운트가 리셋된다.
[root@Sample-local ~]# vim /etc/pam.d/system-auth auth required pam_env.so auth required pam_tally2.so deny=3 unlock_time=1200 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 required pam_tally2.so account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 500 quiet account required pam_permit.so
3.2. password-auth
라인의 위치(순서)가 auth, account 모두 2번째 이상에 위치해야 제대로 동작을 한다.
아래 설정은 접속 실패 3을 초과 하면 그 이후부터 접속이 제한된다. 단, 1200초 후에 제한이 풀리고 그때 로그인을 통과하면 카운트가 리셋된다.
[root@Sample-local ~]# vim /etc/pam.d/password-auth auth required pam_env.so auth required pam_tally2.so deny=3 unlock_time=1200 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 required pam_tally2.so account sufficient pam_localuser.so account sufficient pam_succeed_if.so uid < 500 quiet account required pam_permit.so
4. 접속 테스트
4.1. system-auth에 적용 받는 접속
1) 콘솔을 통한 로그인
2) su 전환
$ su - test
-> root가 아닌 계정을 통해 다시 test 라는 계정으로 su - 하면서 비밀번호가 틀리면 counter가 증가한다.
4.2. password-auth에 적용 받는 접속
1) x-window (KDE, Gnome) 로그인
2) ssh 원격 접속
그 밖에도 vsftpd 도 password-auth에 적용을 받는다.
system-auth와 password-auth 가 로컬과 리모트를 기준으로 하는 듯 하나 x-window 접근이 password-auth를 적용받는게 의외이다.
4.3. 카운터 확인
# test 유저에 대한 tally2 카운터 값 보기 [root@Sample-system ~]# pam_tally2 -u test Login Failures Latest failure From test 0 # 아래와 같이 1초 단위로 refresh를 하도록 하고 테스트 접속을 통한 카운터 증가값을 지켜본다. [root@Sample-system ~]# watch -d -n1 'pam_tally2 -u test' # 테스트로 일부로 4번의 접속 실패를 하였고 따라서 현재 tally2 카운트 값이 4이다. -> 접속실패의 루트에 상관없이 카운트값은 증가한다. [root@Sample-system ~]# pam_tally2 -u test Login Failures Latest failure From test 4 tty2 [root@Sample-system ~]# pam_tally2 -u test Login Failures Latest failure From test 5 pts/1
4.4. 카운터 리셋
허가된 사용자가 실수나 비밀번호를 잊어버려서 접근을 실패했다면 root 계정을 통해 카운트를 리셋해 줄 수 있다.
[root@Sample-system ~]# pam_tally2 -r -u test Login Failures Latest failure From test 0
5. 기타
5.1. 없어진 옵션
RHEL4의 tally 까지는 no_magic_root와 reset이 옵션으로 존재 했지만 RHEL5 tally 부터 기본 옵션으로 변경 되었다.
따라서 해당 옵션을 RHEL 5 이상의 OS에 설정하게 되면 아래와 같이 messages 로그 또는 secure 로그에 로그가 남게된다.
Aug 25 11:41:02 Sample-system crond[17327]: pam_tally2(crond:setcred): unknown option: no_magic_root
Aug 25 11:41:02 Sample-system crond[17327]: pam_tally2(crond:setcred): unknown option: reset
5.2. 참고할 옵션
1) even_deny_root
루트마저도 일반 유저처럼 로그인 실패시 카운트를 증가시켜 임계치를 넘으로 접근제한을 한다.
root 도 잠길 수 있으니 조심해서 사용해야 된다.
2) magic_root
현재 pam 모듈을 호출하는 uid를 확인하여 만일 uid가 0 이면 counter을 하지 않는 작용을 한다.
해당 옵션의 예를들어 아래와 같이 설명한다.
예제 1) ssh 명령어로 일반유저 test 원격접속 시 로그인 실패,
로그인 계정은 일반유저 test 이지만 pam 모듈을 호출 (/usr/sbin/sshd 프로세스) 하는 유저의 uid는 0이므로 counter이 증가하지 않는다.
즉, sshd 데몬은 root가 실행 시켰으므로 그렇다.
[root@Sample-system ~]# pam_tally2 -u test
Login Failures Latest failure From
test 0 pts/1
예제 2) 일반유저 test2(uid=501)가 su 명령어로 일반유저 test(uid=500)로 로그인시 실패,
pam 모듈을 호출하는 유저 test의 uid 가 0 이 아니므로 counter이 증가하게 된다.
[root@Sample-system ~]# pam_tally2 -u test
Login Failures Latest failure From
test 1 pts/1
따라서 일반계정이 로그인 실패시 counter가 증가하게 설정하려면 pam_tally 설정을 구성 시 magic_root를 설정하지 말고 사용하여야 한다.
5.3. 개별 적용하기
password-auth에 tally2를 설정을 하게되면 telnet, sshd, vsftpd, x-window 접근등이 한꺼번에 적용이 된다.
sshd만 적용을 하고 싶으면 /etc/pam.d/sshd 설정을 아래와 같이 수정하고,
[root@Sample-system ~]# vim /etc/pam.d/sshd #%PAM-1.0 auth required pam_tally2.so deny=3 unlock_time=1200 auth required pam_sepermit.so auth include password-auth account required pam_unix.so account required pam_tally2.so account required pam_nologin.so account include password-auth password include password-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session required pam_loginuid.so # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session optional pam_keyinit.so force revoke session include password-auth
* 라인의 위치가 중요하다. 위치에 따라 동작을 하고 안하고 한다.
그리고 /etc/pam.d/password-auth 설정은 아래와 같이 수정한다. (아무것도 수정하지 않은 원래 상태이다.)
[root@Sample-system ~]# vim /etc/pam.d/password-auth #%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 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_localuser.so account sufficient pam_succeed_if.so uid < 500 quiet account required pam_permit.so password requisite pam_cracklib.so try_first_pass retry=3 type= password sufficient pam_unix.so sha512 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
마찬가지로 su, sudo 등만 따로 적용하려면 /etc/pam.d 디렉토리 밑의 su, sudo를 수정하면 된다.
기타 다른 모듈들도 마찬가지 이다.
5.4. 기타 옵션들
기타 여러 옵션은 man 페이지를 참조 할 것. - 일부만 번역하여 안내한다.
$ man pam_tally2
.
.
.
magic_root
uid=0을 가진 사용자가 모듈을 호출하는 경우 카운트가 증가하지 않습니다.
Sys admin 사용자 시작 서비스에 대해 이것을 사용 해야 합니다, 그렇지 않으면 이 인수(magic_root)를 생략 해야 합니다.
AUTH OPTIONS
AUTH(인증)은 사용자 엑세스를 거부 해야 하는 경우 먼저 확인하고, 그렇지 않을 경우 로그인 시도 카운터를 증가한다.
ACCOUNT OPTIONS
사용자가 magic root가 아닌 경우 계정 단계 시도 카운터를 reset 한다.
이 단계에 사용된 옵션이 제대로 pam_setcred를 호출 하지 않는 서비스에 대 한 수 있다.
This phase can be used optionaly for services which don’t call pam_setcred(3) correctly or if the reset should be done regardless of the failure of the account phase of other modules.
deny=n : n번 이상 접속 실패시 n+1 이후부터 접속 차단됨(단 unlock_time 시간 이후엔 차단이 해제됨)
unlock_time=n : deny 설정에 의한 접속 차단 후 n초 동안 유예 시간을 두어 시간이 지나면 해제 됨
even_deny_root_account : root도 deny=n 정책에 해당 되도록한다.(기본은 deny=n 설정에 적용되지 않음)
.
.
.
이상 글을 마친다.