web-dev-qa-db-ja.com

期限切れのパスワードとUsePAMを使用したSSHキーベースのログイン

SLES 11マシンがあります。ユーザーはSSHとpubkeyを介してログインします(混合、一部のユーザーはパスワードを使用、一部はsshキーを使用)

Sshd_configには以下が含まれます。

UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes

問題:pubkeyログインを使用するユーザーのパスワードの有効期限が切れると、ユーザーはパスワードを変更するように求められます。

質問:ユーザーが有効な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 # 

パスワードプロンプトが期限切れになる原因となる操作の順序は次のとおりです。

  • SSHはPAM accountステージを実行し、アカウントが存在し、有効であることを確認します。 accountステージは、パスワードの有効期限が切れたことを通知し、SSHに通知します。
  • SSHは、鍵ベースの認証を実行します。これにはPAMが必要ないため、authステージは実行されません。次に、SSHログインセッションをセットアップし、PAM sessionステージを実行します。
  • 次に、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ファイル自体は他のログイン方法で使用されるため、触れたくないでしょう。代わりに、pam.d/sshdファイルからincludeを削除します。 common-accountの他にpam_unix.soに他の関数がある場合は、それらをpam.d/sshdに直接配置することをお勧めします。

最後に、これはシステムのセキュリティの変更であり、私に盲目的に信頼して良いアドバイスを与えるべきではないことを忘れないでください。 PAMに慣れていない場合にPAMがどのように機能するかを読んでください。開始場所には、man 7 PAMman 5 pam.confman 8 pam_unixなどがあります。

10
Jander

No_pass_expiryと呼ばれるオプションがpam_unix.so(2016年2月頃)に追加されました( ソースコードの変更はこちら または manページはこちら )。基本的には、pam_unix以外のものが認証に使用された場合、期限切れのパスワードを無視するようにpam_unixに指示します。 sshdが認証を実行した場合。

その結果、そのオプションを含む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
Todd
  • コンプライアンス上の理由から、PAMまたはsshd_configを変更したくない場合があります。
  • Sshd_configでPasswordAuthentication noを使用している可能性があります
  • パスワードがランダム化されている可能性があります。
  • CISコンプライアンスを実装している場合もあります。
  • それでもユーザーはプロンプトを受け取ります

次に、rootはパスワードの変更日を微調整できます。

for user in `grep ":x:[0-9]\{4\}" /etc/passwd|cut -d: -f1`; do chage -d today $user; done
0
bbaassssiiee