使用 UsePAM 進行基於過期密碼和 SSH 金鑰的登入 是

使用 UsePAM 進行基於過期密碼和 SSH 金鑰的登入 是

有一台 SLES 11 機器。使用者透過 SSH 和 pubkey 登入(混合,有些使用者使用密碼,有些使用者使用 ssh 金鑰)

sshd_config 有:

UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes

問題:如果使用 pubkey 登入的使用者的密碼過期,則會提示使用者變更密碼。

問題:我們如何設定 PAM 或 sshd 配置以允許使用者在擁有有效 SSH 金鑰且密碼過期的情況下登入? -沒有彈出“更改密碼”。

UPDATE#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:~ # 

UPDATE#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-account文件包含對pam_unix.so.這是檢查過期密碼的行。

您可能不想觸及common-account文件本身,因為它用於其他登入方法。相反,您想include從文件中刪除pam.d/sshd。如果common-account除此之外還有其他功能pam_unix.so,您可能希望將它們直接放入pam.d/sshd.

最後,請記住,這是對您系統安全性的修改,您不應該盲目相信我會給您一個好的建議。如果您不熟悉 PAM 的工作原理,請閱讀它。一些起始位置可能是man 7 PAM、、man 5 pam.confman 8 pam_unix

答案2

pam_unix.so 中新增了一個名為 no_pass_expiry 的選項(大約在 2016 年 2 月)(原始碼在這裡修改或者手冊頁在這裡)。基本上,如果使用 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

相關內容