期限切れのパスワードとSSHキーベースのログイン(UsePAMあり)

期限切れのパスワードとSSHキーベースのログイン(UsePAMあり)

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 は PAMaccountステージを実行し、アカウントが存在し有効であることを確認します。この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-accountpam_unix.so

このファイルは他のログイン方法で使用されているため、おそらくファイル自体には触れたくないでしょう。代わりに、ファイルから をcommon-account削除します。以外にに他の関数がある場合は、それらを に直接入れるとよいでしょう。includepam.d/sshdcommon-accountpam_unix.sopam.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 を次のように構成できるはずです。

  1. SSH キーを使用して SSH 経由で認証した場合は、警告は表示されますが、期限切れのパスワードの変更は要求されません。
  2. pam_unix.so 経由のログイン/パスワードが ssh 経由の認証に使用された場合、期限切れのパスワードの変更を要求する
  3. 他の認証シーケンス (例: ログイン サービス経由) には影響しません。

たとえば、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

関連情報