SLES 11 マシンがあります。ユーザーは SSH と公開鍵 (混合、一部のユーザーはパスワードを使用し、一部のユーザーは SSH キーを使用) 経由でログインします。
sshd_config には次の内容が含まれています:
UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes
問題: 公開鍵ログインを使用するユーザーのパスワードの有効期限が切れると、ユーザーはパスワードを変更するように求められます。
質問:有効な SSH キーを持ち、パスワードの有効期限が切れている場合でも、ユーザーがログインできるように PAM または sshd 構成を設定するにはどうすればよいでしょうか? -それなし「パスワードを変更してください」というポップアップが表示されます。
更新#1: 解決策は「UsePAM no」ではありません
SERVER:~ # cat /etc/pam.d/sshd
#%PAM-1.0
auth requisite pam_nologin.so
auth include common-auth
account requisite pam_nologin.so
account include common-account
password include common-password
session required pam_loginuid.so
session include common-session
SERVER:~ #
更新#2: 解決策は、ユーザーのパスワードを無期限に設定することではありません
アップデート#3:
SERVER:/etc/pam.d # cat common-account
#%PAM-1.0
...
account required pam_unix2.so
account required pam_tally.so
SERVER:/etc/pam.d #
答え1
期限切れのパスワードプロンプトが表示される操作の順序は次のとおりです。
- SSH は PAM
account
ステージを実行し、アカウントが存在し有効であることを確認します。このaccount
ステージでは、パスワードの有効期限が切れていることが検出され、SSH に通知されます。 - SSH はキーベースの認証を実行します。この認証には PAM は必要ないため、
auth
ステージは実行されません。次に、SSH ログイン セッションを設定し、PAMsession
ステージを実行します。 - 次に、SSH は PAM がパスワードの有効期限が切れたことを通知したことを思い出し、警告メッセージを出力し、ユーザーにパスワードを変更するように PAM に要求します。その後、SSH は切断されます。
これらはすべてSSHが行うもので、この動作を設定するSSHオプションは見当たりません。SSHやPAMのカスタムバージョンを構築したいのでなければ、PAMが期限切れのパスワードをSSHに報告しないようにするしか選択肢はありません。これを実行すると、SSH経由の期限切れパスワードチェックを完全に無効にしますユーザーがパスワードを使用して SSH 経由でログインしている場合でも、他の (SSH 以外の) ログイン方法ではパスワードの有効期限がチェックされます。
現在のpam.d/sshd
ファイルにはエントリがあります。への参照を含むファイルaccount include common-account
があると思われます。 これは、期限切れのパスワードをチェックする行です。common-account
pam_unix.so
このファイルは他のログイン方法で使用されているため、おそらくファイル自体には触れたくないでしょう。代わりに、ファイルから をcommon-account
削除します。以外にに他の関数がある場合は、それらを に直接入れるとよいでしょう。include
pam.d/sshd
common-account
pam_unix.so
pam.d/sshd
最後に、これはシステムのセキュリティを変更するものであり、私が適切なアドバイスをしてくれると盲目的に信じるべきではないことを覚えておいてください。PAM についてよく知らない場合は、PAM の仕組みについて読んでください。出発点としてはman 7 PAM
、、、man 5 pam.conf
などが考えられますman 8 pam_unix
。
答え2
pam_unix.soに(2016年2月頃)no_pass_expiryというオプションが追加されました(ソースコードの変更はこちらまたはマニュアルページはこちら) 基本的に、pam_unix 以外のものが認証に使用された場合 (例: sshd が認証を実行した場合)、期限切れのパスワードを無視するように pam_unix に指示します。
その結果、そのオプションを含む pam_unix.so のバージョンがある場合は、PAM を次のように構成できるはずです。
- SSH キーを使用して SSH 経由で認証した場合は、警告は表示されますが、期限切れのパスワードの変更は要求されません。
- pam_unix.so 経由のログイン/パスワードが ssh 経由の認証に使用された場合、期限切れのパスワードの変更を要求する
- 他の認証シーケンス (例: ログイン サービス経由) には影響しません。
たとえば、RHEL 7サーバーを上記のように構成するには、/etc/pam.d/sshdを更新し、アカウントとパスワードの両方の種類にpam_unix.so no_pass_expiryを追加します。
account required pam_nologin.so
account sufficient pam_unix.so no_pass_expiry
account include password-auth
password sufficient pam_unix.so no_pass_expiry
password include password-auth
答え3
- コンプライアンス上の理由から、PAM または sshd_config を変更したくない場合があります。
- 使用している可能性がありますパスワード認証なしsshd_config内
- パスワードがランダム化されている可能性があります。
- CIS コンプライアンスを実装している可能性もあります。
- それでもユーザーにはプロンプトが表示されます
その後、root はパスワードの変更日を調整できます。
for user in `grep ":x:[0-9]\{4\}" /etc/passwd|cut -d: -f1`; do chage -d today $user; done