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ドメインユーザーには機能しませんが、ローカルアカウントに使用し、周囲に3つの呼び出しを挿入する場合は、行を次に変更する必要がありますpam_unixpam_localuserデフォルト=4、ドメインログインが機能し続けます。 (default = 1の場合はスキップされますが、続行されます。これは明らかpam_faillockpam_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]後で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設定の重要な手順を説明するためにいくつかの説明を追加しました。お役に立てば幸いです。

関連情報