- 주요 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 모듈
# man pam_cracklib
|
NAME pam_cracklib - PAM module to check the password against dictionary words SYNOPSIS pam_cracklib.so [...] DESCRIPTION This module can be plugged into the password stack of a given application to provide some plug-in strength-checking for passwords. The action of this module is to prompt the user for a password and check its strength against a system dictionary and a set of rules for identifying poor choices. The first action is to prompt for a single password, check its strength and then, if it is considered strong, prompt for the password a second time (to verify that it was typed correctly on the first occasion). All being well, the password is passed on to subsequent modules to be installed as the new authentication token. OPTIONS debug This option makes the module write information to syslog(3) indicating the behavior of the module (this option does not write password information to the log file). type=XXX The default action is for the module to use the following prompts when requesting passwords: "New UNIX password: " and "Retype UNIX password: ". The default word UNIX can be replaced with this option. retry=N Prompt user at most N times before returning with error. The default is 1 minlen=N The minimum acceptable size for the new password (plus one if credits are not disabled which is the default). In addition to the number of characters in the new password, credit (of +1 in length) is given for each different kind of character (other, upper, lower and digit). The default for this parameter is 9 which is good for a old style UNIX password all of the same type of character but may be too low to exploit the added security of a md5 system. Note that there is a pair of length limits in Cracklib itself, a "way too short" limit of 4 which is hard coded in and a defined limit (6) that will be checked without reference to minlen. If you want to allow passwords as short as 5 characters you should not use this module. dcredit=N (N >= 0) This is the maximum credit for having digits in the new password. If you have less than or N digits, each digit will count +1 towards meeting the current minlen value. The default for dcredit is 1 which is the recommended value for minlen less than 10. (N < 0) This is the minimum number of digits that must be met for a new password. ucredit=N (N >= 0) This is the maximum credit for having upper case letters in the new password. If you have less than or N upper case letters each letter will count +1 towards meeting the current minlen value. The default for ucredit is 1 which is the recommended value for minlen less than 10. (N < 0) This is the minimum number of upper case letters that must be met for a new password. lcredit=N (N >= 0) This is the maximum credit for having lower case letters in the new password. If you have less than or N lower case letters, each letter will count +1 towards meeting the current minlen value. The default for lcredit is 1 which is the recommended value for minlen less than 10. (N < 0) This is the minimum number of lower case letters that must be met for a new password. minclass=N The minimum number of required classes of characters for the new password. The default number is zero. The four classes are digits, upper and lower letters and other characters. The difference to the credit check is that a specific class if of characters is not required. Instead N out of four of the classes are required. maxrepeat=N Reject passwords which contain more than N same consecutive characters. The default is 0 which means that this check is disabled. |
|
- 모듈 설명
시스템 사전과 몇 가지 규칙으로 패스워드의 튼튼함을 검사한다.
- 모듈 동작 방법
새로운 암호와 이전 암호가 회문(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 모듈
# man pam_tally
|
NAME pam_tally - The login counter (tallying) module SYNOPSIS pam_tally.so [file=/path/to/counter] [onerr=[fail|succeed]] [magic_root] [even_deny_root_account] [deny=n] [lock_time=n] [unlock_time=n] [per_user] [no_lock_time] [no_reset] [audit] pam_tally [--file /path/to/counter] [--user username] [--reset[=n]] [--quiet] DESCRIPTION This module maintains a count of attempted accesses, can reset count on success, can deny access if too many attempts fail. pam_tally comes in two parts: pam_tally.so and pam_tally. The former is the PAM module and the latter, a stand-alone program. pam_tally is an (optional) application which can be used to interrogate and manipulate the counter file. It can display users’ counts, set individual counts, or clear all counts. Setting artificially high counts may be useful for blocking users without changing their passwords. For example, one might find it useful to clear all counts every midnight from a cron job. The faillog(8) command can be used instead of pam_tally to to maintain the counter file. Normally, failed attempts to access root will not cause the root account to become blocked, to prevent denial-of-service: if your users aren’t given shell accounts and root may only login via su or at the machine console (not telnet/rsh, etc), this is safe. AUTH OPTIONS Authentication phase first checks if user should be denied access and if not it increments attempted login counter. Then on call to pam_setcred(3) it resets the attempts counter. deny=n Deny access if tally for this user exceeds n. lock_time=n Always deny for n seconds after failed attempt. unlock_time=n Allow access after n seconds after failed attempt. If this option is used the user will be locked out for the specified amount of time after he exceeded his maximum allowed attempts. Otherwise the account is locked until the lock is removed by a manual intervention of the system administrator. magic_root If the module is invoked by a user with uid=0 the counter is not incremented. The sys-admin should use this for user launched services, like su, otherwise this argument should be omitted. no_lock_time Do not use the .fail_locktime field in /var/log/faillog for this user. no_reset Don’t reset count on successful entry, only decrement. per_user If /var/log/faillog contains a non-zero .fail_max/.fail_locktime field for this user then use it instead of deny=n/ lock_time=n parameter. no_lock_time Don’t use .fail_locktime filed in /var/log/faillog for this user. ACCOUNT OPTIONS Account phase resets attempts counter if the user is not magic root. 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. magic_root If the module is invoked by a user with uid=0 the counter is not incremented. The sys-admin should use this for user launched services, like su, otherwise this argument should be omitted. no_reset Don’t reset count on successful entry, only decrement. EXAMPLES Add the following line to /etc/pam.d/login to lock the account after too many failed logins. The number of allowed fails is specified by /var/log/faillog and needs to be set with pam_tally or faillog(8) before. auth required pam_securetty.so auth required pam_tally.so per_user auth required pam_env.so auth required pam_unix.so auth required pam_nologin.so account required pam_unix.so password required pam_unix.so session required pam_limits.so session required pam_unix.so session required pam_lastlog.so nowtmp session optional pam_mail.so standard |
|
- 모듈 설명
총 접근 시도 횟수를 관리하며, 로그인 성공시에는 접근 횟수를 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 등에 사용하는 것을 권장한다.
'Security > Linux Server' 카테고리의 다른 글
리눅스 서버 점검 (계정 잠금 임계값 설정 ) 쉘 스크립트 (0) | 2017.12.15 |
---|---|
리눅스 서버 점검 ( 패스워드 복잡성 설정 ) 쉘 스크립트 (0) | 2017.12.15 |
PAM (Pluggable Authentication Modules) (0) | 2017.12.15 |
리눅스 서버 점검 ( root 계정 원격 접속 제한 ) 쉘 스크립트 (0) | 2017.12.14 |
시스템 보안에 대한 6가지 보안 주제 (0) | 2017.12.14 |