有一台 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 運行 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 的工作原理,請閱讀它。一些起始位置可能是man 7 PAM
、、man 5 pam.conf
和man 8 pam_unix
。
答案2
pam_unix.so 中新增了一個名為 no_pass_expiry 的選項(大約在 2016 年 2 月)(原始碼在這裡修改或者手冊頁在這裡)。基本上,如果使用 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