IT보안관의 공부 클라우드

PAM - 2 본문

IT/리눅스

PAM - 2

ㅡㅡㅡㅡㄷ 2020. 6. 10. 16:09

- 주요 PAM 모듈

/lib/security/pam_securetty.so 모듈

/lib/security/pam_listfile.so 모듈

/lib/security/nologin.so 모듈

/lib/security/pam_deny.so 모듈

/lib/security/pam_cracklib.so 모듈 (패스워드 정책)

/lib/security/pam_wheel.so 모듈 (wheel 그룹에 속한 사용자만 su 명령어 사용 가능)

/lib/security/pam_rootok.so 모듈

/lib/security/pam_tally.so 모듈 (서버 접속 로그인시 패스워드 오류 횟수 제한 등) 

/lib/security/pam_tally2.so 모듈

 

- PAM 모듈 정보 확인 법

(ㄱ) 매뉴얼 검색하는 방법

pam_cracklib.so    -> # man pam_cracklib (# info pam_cracklib)

 

(ㄴ) /usr/share/doc/pam-*/

# cd /usr/share/doc-* ; ls 

 

 

(ㄷ) 인터넷을 통해 검색하는 방법

http://docs.redhat.com -> RHEL 문서 중 PAM 문서

KLDP(Korean Linux Documentation Projection)

 

- /lib/security/pam_cracklib.so  모듈

 

- 모듈 설명

시스템 사전과 몇 가지 규칙으로 패스워드의 튼튼함을 검사한다. 

 

- 모듈 동작 방법

새로운 암호와 이전 암호가 회문(palindrome) 형태로 되어 있는지 확인 

새로운 암호와 이전 암호가 대소문자만 변경된 것이 아닌가 확인

새로운 암호와 이전 암호의 유사성을 점검 확인, difok 값으로 조절 ( 기본 값은 10 또는 암호 크기의 1/2 중 작은 값 )

새 암호가 너무 짧지 않은지 확인, 주로 minlen, dcredit, ucredit, lcredit, ocredit 으로 조절

새 암호가 이전 암호를 돌려 쓴 것은 아닌지 확인

새 암호가 이전에 사용되었는가를 점검 ( 이전 암호는 /etc/security/opasswd 에 저장 )

 

- 모듈 인자

 debug

 - 모듈이 동작을 보여주기 위해 syslog에 정보를 남긴다. 이 옵션이 로그 파일에 패스워드 정보를 남기지 않는다.

type=LINUX 

 - 모듈의 기본 동작은 패스워드를 물어 볼때 "New UNIX password:", "Retype UNIX password:"라고 묻는데, 이 옵션을 사용하여 "UNIX"라는 말 대신 "LINUX"로 바꿀수 있다.

retry=N 

 - 새 패스워드를 물어 보는 횟수로서 기본값은 1이다. 이 옵션을 사용하면 N만큼 회수를 늘릴수 있다.

difok=N 

 - 새 패스워드에서 예전 패스워드에 있지 않는 문자들을 몇자나 사용해야 하는지 나타내는 수로 기본값은 10이고, 새 패스워드에서 1/2이상의 글자가 이전과 다르다면 새 패스워드로 받아들여 진다.

minlen=N 

 - 새 패스워드의 최소 크기에 1을 더한 크기이다. 새 패스워드에 사용된 문자열의 길이외에 각 문자 종류(숫자, 대문자, 소문자, 특수문자)를 사용한 것에 대해 각각 크레디트(credit)를 준다.만약, minlen=12 설정이 되어 있다면, 실제적으로 최소 패스워드의 길이 12가 되어야 한다. 하지만, credit이라는 값이 부여되면 minlen의 값에서 credit만큼 최소의 길이를 줄여준다. 예를 들어, minlen의 길이가 12일때 패스워드를 gksskae01! 이라고 설정했다고 가정하면, 실제 길이는 10자이다. 그러나 패스워드는 사용가능하다. 이유는, 소문자를 사용함으로써 1크레디트, 숫자를 사용하여 1크래디트, 특수문자를 사용하여 1크레디트를 얻었으므로 3크래디트를 얻는다. 이런 경우 총 문자의 길이는 12 - 3 이므로 실제적으로 9자 이상이면 가능하다.

 dcredit=N

 - 숫자가 가질수 있는 크레디트값의 최대값이다. 기본값은 1이다. 만약 패스워드에 N개 이하의 숫자를 사용했다면 사용된 숫자의 개수가 현재 정의된 minlen값을 계산하는데 크레디트값으로 적용된다.

ucredit=N 

 - 대문자가 가질수 있는 크레디트값의 최대값이다. 기본값은 1이다. 만약 패스워드에 N개 이하의 대문자를 사용했다면 사용된 대문자의 개수가 현재 정의된 minlen값을 계산하는 크레디트값으로 적용된다.

lcredit=N 

 - 소문자가 가질수 있는 크레디트 값의 최대값이다. 기본값은 1이다. 만약 패스워드에 N개 이하의 대문자를 사용했다면 사용된 대문자의 개수가 현재 정의된 minlen값을 계산하는 크레디트값으로 적용된다.

ocredit=N 

 - 특수문자가가 가질수 있는 크레디트 값을 지정한다. 기본값은 1이다.

 use_authok

 - 이 인자는 사용자에게 새 패스워드를 묻지 말고 앞서 실행된 패스워드 모듈에서 받은 것을 사용하도록 모듈에게 강제한

-모듈을 사용하는 PAM 파일 찾기

# find /etc/pam.d -type f -exec grep -l pam_cracklib.so {} \;

 /etc/pam.d/system-auth-ac

# vi /etc/pam.d/system-auth-ac

 #%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_succeed_if.so uid < 500 quiet

account     required      pam_permit.so

 

password    requisite     pam_cracklib.so try_first_pass retry=3

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

- /lib/security/pam_tally.so 모듈

- 모듈 설명

총 접근 시도 횟수를 관리하며, 로그인 성공시에는 접근 횟수를 0으로 만들고 실패한 시도 횟수에 도달하면 접근을 차단한다.

pam_tally( CMD) 명령어로 pam_tally.so 모듈을 제어한다. ( 횟수 조회, 횟수 수정, 삭제 가능 )

 

- 모듈 인자 

 onerr=(suceed | fail )

 - 만약 파일을 열 수 없다든가 하는 이상이 생긴다면 모듈은 성공/실패하도록 반응한다.

 file=/where/to/keep/counts

 - 카운트를 저장할 위치를 지정한다. 기본 위치는 /var/log/faillog이다.

deny=N 

 - 만약 사용자별 tally 회수가 N을 넘어선 경우 그 사용자의 접근을 막는다. 이 옵션이 사용되면 접근 권한을 요구하는 사용자가 root이고 no_magic_root 옵션이 지정된 경우라면 reset/no_reset 옵션의 기본값이 reset으로 바뀐다.

no_magic_root 

 - root로 부터의 접근을 무시하지 말고 거부하도록 한다.(uid가 0인 사용자가 이 모듈을 호출한 경우 카운트가 증가 된다.) 이 옵션은 telnet/rsh/login 같은 데몬이 실행시키는 서비스들에 적용할 것을 권장한다. 사용자가 실행시키는 su 같은 프로그램에서는 이 옵션 설정하지는 않는다.

reset 

 - magic root의 경우이거나 아니거나 상관없이 인증에 성공했을 경우 모듈이 카운트를 0으로 초기화한다. no_reset 옵션은 성공적인 로그인에도 카운트 값을 초기화하지 않는다. deny가 없고 접근하는 사용자가 magic root가 아닌 상태에서는 이것이 기본으로 적용된다. 

per_user 

 - 만약 /var/log/faillog 파일에서 사용자에 대한 .fail_max/.fail_locktime 필드가 0이 아닌값을 가지고 있다면, 공동으로 해당되는 deny=N/locktime=N 값 대신 이 값(.fail_max/.fail_locktime)을 사용하도록 한다.

no_lock_time 

 - /var/log/faillog 파일에 있는 .fail_locktime 필드값을 사용하지 않도록 한다. 

 

- 모듈을 사용하는 PAM 파일 찾기

# find /etc/pam.d -type f -exec grep -l pam_tally {} \;

> 검색 결과가 없다.  > 사용하는 서비스가 없다. 

> 이 모듈을 사용하는 서비스는 telnet/login/rsh 등에 사용하는 것을 권장한다. 

 

 

출처 : 5log.tistory.com/184?category=767236 

 

'IT > 리눅스' 카테고리의 다른 글

네트워크 본딩(Network bonding) 정리  (0) 2022.05.02
PAM - 3  (0) 2020.06.10
PAM - 1  (1) 2020.06.10
리눅스 콘솔 접속 불가  (7) 2020.06.03
Comments