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


12

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 # 

あなたは削除することによって、これを達成することができるかもしれないpam_unix.soからsessionの部分/etc/pam.d/sshd(ととそれを置き換えるpam_lastlog.soことはありません場合ならば、私はわからない。pam_unix.so/session1これを行うかではありませんが、それは適切な場所のように感じている。
パトリック・

1
ユーザーアカウントを期限切れにしないように設定します:)
Raza

@Raza:ありがとう:)素晴らしいアイデアですが、解決策にはならないでしょう:(
thequestionthequestion

ForcedPasswdChange Noこれを試してみてくださいSSH1
Raza

1
ForcedPasswdChange No有効期限が切れると機能しなくなることに気付きました。期限切れのユーザーがログインできるようにするソリューションを探しています
Raza

回答:


10

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

  • 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他のログイン方法で使用されているため、ファイル自体には触れたくないでしょう。代わりに、ファイルincludeからを削除しpam.d/sshdます。に他の関数がある場合common-accountpam_unix.so、おそらくそれらを直接に入れたいでしょうpam.d/sshd

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


操作の順序の素晴らしい説明、ありがとう。
M_dk 2015

3

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

その結果、そのオプションを含むpam_unix.soのバージョンがある場合、PAMを次のように構成できるはずです。

  1. 引き続き警告しますが、sshを介した認証にSSHキーを使用した場合は、期限切れのパスワードを変更する必要はありません。
  2. pam_unix.soによるログイン/パスワードがsshによる認証に使用された場合、期限切れのパスワードのパスワード変更を要求する
  3. 他の認証シーケンスに影響を与えません(たとえば、ログインサービスを介して)。

たとえば、/ etc / pam.d / sshdを更新し、pam_unix.so no_pass_expiryをアカウントとパスワードの両方のタイプに追加するだけで、上記を実行するようにRHEL 7サーバーを構成しました。たとえば、

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

1
これを試してみて、うまくいきました。PAMがこのオプションをサポートしているかどうかは、「no_pass_expiry」が「man 8 pam_unix」のマニュアルページ内に存在するかどうかで確認できます。
友文

2016年からのコード変更はUbuntu 18.04にはまだ存在しません... :(
ColinM

0
  • コンプライアンス上の理由から、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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.