그래서 저는 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 구성의 중요한 단계를 설명하기 위해 몇 가지 설명을 추가했습니다. 도움이 되었기를 바랍니다.