有一台 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