web-dev-qa-db-ja.com

SSHは期限切れのKerberosパスワードで機能します

SSHをセットアップしました-kerberosV5を使用したシングルサインオン。ユーザーパスワードの有効期限が切れると、「警告:パスワードの有効期限が切れました。」が返され、ユーザーがログインできるようになります。 /etc/pam.d/password-authpam_krb5.soより上になるようにpam_unix.soに変更を加えました。

認証スタック:

auth        requisite     pam_krb5.so uid >= 500

#Google authentication configuration module
auth        [success=1 default=ignore] pam_access.so accessfile=/etc/security/access-local.conf
auth        requisite  pam_google_authenticator.so


auth        [success=1 default=ignore]  pam_unix.so nullok try_first_pass
auth        required      pam_deny.so
auth        requisite     pam_succeed_if.so uid >= 0 quiet

アカウントスタック:

account required pam_unix.so broken_shadow
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 500 quiet
account [default=bad success=ok user_unknown=ignore] pam_krb5.so uid >= 500
account required pam_permit.so

パスワードの有効期限が切れたユーザーがログインできないようにするための変更を提案してください。

ログ:

krb5kdc.log

Jun 03 11:34:29 <Host-NAME> krb5kdc[1752](info): AS_REQ (4 etypes {18 17 16 23}) 192.168.181.40: CLIENT KEY EXPIRED: [email protected] for krbtgt/[email protected], Password has expired
Jun 03 11:34:47 <Host-NAME> krb5kdc[1752](info): AS_REQ (4 etypes {18 17 16 23}) 192.168.181.40: ISSUE: authtime 1464933887, etypes {rep=18 tkt=18 ses=18}, [email protected] for kadmin/[email protected]

/var/log/auth.log

/var/log/auth.log : /var/log/auth.log : pam_krb5[24516]: authentication succeeds for 'testyoga' ([email protected]) –
5
Chandira Mouli

編集:

提供されたaccountスタックの内容に基づくと、pam_krb5.soが成功すると、pam_localuser.soはスキップされるようです。これが、パスワードのエージング制限が適用されていない原因である可能性が最も高いです。


これまでにわかっていることは次のとおりです。

  • ログに記録されたメッセージは、ユーザーのパスワードの有効期限が切れていることを確認します。
  • pam_krb5はそれにもかかわらず認証に成功します。

問題は、accountスタックが適切に構成されていないことだと思います。そこにはpam_krb5のいくつかの異なる実装があり、それらのすべてがauthスタック内にパスワードエージングチェックを実装しているわけではありません。

http://linux.die.net/man/8/pam_krb5

ユーザーがログインすると、モジュールの認証機能が簡単なパスワードチェックを実行し、可能であれば、Kerberos 5資格情報を取得して、後で使用できるようにキャッシュします。アプリケーションが資格情報の初期化を要求すると(またはセッションを開くと)、通常のチケットファイルが作成されます。その後、アプリケーションが資格情報の削除またはセッションの終了を要求すると、モジュールはチケットファイルを削除します。 アプリケーションがアカウント管理を要求すると、モジュールがユーザーの認証に参加しなかった場合、モジュールを無視するようにlibpamに通知します。モジュールがユーザーの認証に参加した場合は、期限切れのユーザーパスワードをチェックし、認証対象のユーザーの.k5loginファイルを使用してユーザーの認証を確認します。モジュール。

accountスタックの役割は、認証が成功したかどうかに関係なく、アクセスポリシーを適用することです。キーベースの認証を使用する場合、authスタックが頻繁にバイパスされるため、これは重要です。 authコンテキストでモジュールを呼び出すときに、パスワードのエージングによっても失敗するかどうかを決定するのは、個々の開発者の責任です。

逆に、Russ Allbery(私の好みの実装)によって維持されているpam_krb5実装は、これをauthスタックでキャッチします。

https://www.eyrie.org/~eagle/software/pam-krb5/pam-krb5.html

アカウント

Pam_acct_mgmt()の実装を提供します。上記のpam_authenticate()実装によって実行されるのと同じ認証チェックを実行するだけです。

3
Andrew B