pam_faillock 및 AD/CentOS 7.2

pam_faillock 및 AD/CentOS 7.2

그래서 저는 CentOS 7.2 시스템을 가지고 있고 realmd를 사용하여 AD 도메인에 가입합니다. # id {username}@{domain}을 수행하면 해당 사용자에 대한 모든 AD 정보가 완벽하게 나열됩니다. 놀라운!

스톡 pam.d/system-auth 및 pam.d/password-auth 파일을 사용하면 ssh를 통해 AD 사용자로 로그인할 수 있습니다.

하지만 강화된 시스템 인증과 비밀번호 인증을 사용하려고 하면 상황이 까다로워집니다. 비밀번호 확인 파일, 특히 pam_faillock 인증 부분의 범위를 좁혔습니다.

이것은 내 /etc/pam.d/password-auth입니다.

auth        required      pam_env.so
auth        [default=1 success=ok] pam_localuser.so debug
auth required pam_faillock.so preauth audit deny=5 unlock_time=900 
auth        sufficient pam_unix.so nullok try_first_pass audit
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900 
auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=900
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_sss.so forward_pass
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_sss.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_sss.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     optional      pam_oddjob_mkhomedir.so umask=0077
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_sss.so

콘솔이나 SSH에서 인증을 시도하면 다음과 같은 메시지가 나타납니다.

Oct 07 12:07:48 vmcentos72 sshd[8406]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=localhost  user=user@domain

인증 섹션에서 pam_faillock 줄을 제거하면 제대로 작동합니다.

시스템 인증은 다음과 같습니다.

auth        required      pam_env.so
auth        [default=1 success=ok] pam_localuser.so
auth required pam_faillock.so preauth audit silent deny=5 unlock_time=900
auth        [success=done ignore=ignore default=die] pam_unix.so nullok try_first_pass
auth [default=die] pam_faillock.so authfail audit deny=5 unlock_time=900
auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=900
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_sss.so forward_pass
auth        required      pam_deny.so

account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_sss.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_sss.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     optional      pam_oddjob_mkhomedir.so umask=0077
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_sss.so

작동시키기 위한 제안이 있으십니까? pam_faillock에 디버깅 옵션이 있으면 좋을 것 같습니다 :(

답변1

문제는 PAM 스택을 적절하게 조정하지 않는다는 것입니다. 특히 대괄호 표기법을 사용하는 줄의 "건너뛰기" 횟수를 조정하지 않는다는 것입니다. 이 표기법이 익숙하지 않은 경우 RTFMpam.conf(5), "필수", "충분" 등에 해당하는 괄호 기호도 나열되어 있습니다.

sssd가 구성된 RHEL 7의 기본 인증 섹션은 다음과 같습니다.

auth        required      pam_env.so
auth        [default=1 success=ok] pam_localuser.so
auth        [success=done ignore=ignore default=die] pam_unix.so nullok try_first_pass
auth        requisite     pam_succeed_if.so uid >= 1000 quiet_success
auth        sufficient    pam_sss.so forward_pass
auth        required      pam_deny.so

pam_localuser줄은 기본 작업이 모듈을 건너뛰는 것임을 나타냅니다( pam_unix이 경우). 성공하면(즉, 사용자가 로컬인 경우) 정상적으로 계속합니다. 이는 도메인(로컬이 아닌) 사용자가 실패한 로그인 시도를 생성하지 않고 pam_unix대신 sssd로 직접 점프하도록 수행됩니다( pam_sss미리 uid >= 1000 확인 사용).

또한 참고하시기 바랍니다기본값=죽음on 으로 설정합니다 pam_unix. 즉, 로컬 로그인에 실패하면 인증 스택이 즉시 중단됩니다( 시도하지 않고 pam_sss). 비슷하게,성공=완료로그인에 성공하면 동일한 작업을 수행합니다.

이미 언급했듯이 pam_faillock도메인 사용자에게는 작동하지 않지만 로컬 계정에 사용하고 주위에 세 개의 호출을 삽입하는 경우 행을 다음으로 변경 pam_unix해야 합니다.pam_localuser기본값=4, 도메인 로그인이 계속 작동하도록 합니다. (default=1이면 건너뛰지 pam_faillock만 계속 됩니다 pam_unix. 이는 분명히 도메인 계정에 대해 실패하고 default=die로 인해 즉시 중단됩니다. default=4로 설정하면 pam_succeed_if이전과 마찬가지로 건너뛰게 됩니다.)

나는 pam_faillock그것에 익숙하지 않아서 나중에 다시 호출하는 것이 올바른지 말할 수 없지만 pam_unix이것이 맞다면 Success=done 및 default=die로 뭔가를 해야 합니다. 그렇지 않으면 절대 잠금/잠금 해제 pam_unix되지 않습니다. pam_faillock계정.

이는 샘플 구성을 참조할 수 있는 복잡한 PAM 스택입니다.pam_faillock(8). 실수로 모든 사람을 들여보내지 않았는지 확인하고( pam_deny이 문제는 결국 수정되길 바랍니다) 모든 항목을 조정해야 합니다.기본값=N후속 행이 추가되거나 제거되면 계산됩니다.

간단히 말해서: [default=1]나중에 한 줄을 건너뛰는 것을 의미합니다( pam_unix이 경우). 행을 추가하려면 개수를 조정해야 합니다.

답변2

내 비밀번호 확인 파일은 다음과 같습니다. 정상적으로 작동하는 것 같습니다.

# Setup PAM Env
auth        required      pam_env.so
auth        required      pam_faildelay.so delay=4000000
# Check if Local User, if fail skip to SSSD part
auth        [success=ok default=4]  pam_localuser.so

# Local User - Load pre-auth, if fail end
auth        [success=ok default=2]  pam_faillock.so preauth deny=3 unlock_time=604800 fail_interval=900

# Local User - Attempt Auth, if fail end
auth        [success=ok default=1]  pam_unix.so

# Lcaol User - Sucess, clear lock tally, end
auth        [default=done]          pam_faillock.so authsucc

# Local User - Fail, update lock tally, end
auth        [default=die]           pam_faillock.so authfail deny=3 unlock_time=604800 fail_interval=900

# SSSD User  - Ensure uid is not system uid
auth        requisite     pam_succeed_if.so debug uid >= 1000

# SSSD User  - Attempt Auth
auth        sufficient    pam_sss.so

# Catchall   - Default result if nothin passes
auth        required      pam_deny.so

account     required      pam_faillock.so
account     required      pam_unix.so
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 1000 quiet
account     [default=bad success=ok user_unknown=ignore] pam_sss.so
account     required      pam_permit.so

password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    sufficient    pam_sss.so use_authtok


password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
-session     optional      pam_systemd.so
session     optional      pam_oddjob_mkhomedir.so umask=0077
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_sss.so

로그인에 실패한 후 AD 사용자는 오류 잠금 출력에 나타나지 않지만 로컬 사용자는 나타납니다.

업데이트: PAM 구성의 중요한 단계를 설명하기 위해 몇 가지 설명을 추가했습니다. 도움이 되었기를 바랍니다.

관련 정보