使用 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

相关内容