有一台SLES 11机器。用户通过SSH和pubkey登录(混合,一些用户使用密码,有些用户使用ssh密钥)
sshd_config有:
UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes问题是:如果密码对使用公键登录的用户过期,则会提示用户更改密码。
问题:如果用户拥有有效的SSH密钥且密码过期,我们如何设置PAM或sshd配置以允许用户登录?-而不弹出“更改您的密码”。
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:解决方案不能是:将用户密码设置为永不过期
UPDATE#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 # 发布于 2014-10-09 23:36:09
导致过期密码提示的操作顺序如下:
account阶段,该阶段验证帐户是否存在并有效。account阶段注意到密码已经过期,并让SSH知道。auth阶段。然后,它设置SSH登录会话并运行PAM session阶段。所有这些都是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。
发布于 2018-04-25 19:37:55
pam_unix.so (2016年2月前后)增加了一个名为no_pass_expiry (源代码在此更改或手册页在这里)的选项。它基本上告诉pam_unix,如果在auth中使用了pam_unix以外的其他内容,则忽略过期的密码,例如,如果sshd执行了auth。
因此,如果您有包含该选项的pam_unix.so版本,则应该能够将PAM配置为:
例如,我配置了一个RHEL 7服务器来完成上述工作,只需更新/etc/pan.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发布于 2017-05-31 12:03:52
然后root用户可以调整密码更改日期:
for user in `grep ":x:[0-9]\{4\}" /etc/passwd|cut -d: -f1`; do chage -d today $user; donehttps://unix.stackexchange.com/questions/160268
复制相似问题