使用UsePAM的基于密码和SSH密钥的登录已过期是


12

有一台SLES 11机器。用户通过SSH和pubkey登录(混合使用,有些用户使用密码,有些用户使用ssh密钥)

sshd_config具有:

UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes

问题:如果使用pubkey登录的用户的密码过期,则系统将提示该用户更改密码。

问题:如果用户具有有效的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:解决方案不能是:将用户密码设置为永不过期

更新#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 # 

您可能能够通过删除做到这一点pam_unix.sosession/etc/pam.d/sshd(,取而代之的是pam_lastlog.so,如果它不存在,我不知道,pam_unix.so/session是一个做这个或没有,但感觉像在正确的地方。
帕特里克

1
将用户帐户设置为永不过期:)
Raza 2014年

@Raza:谢谢:)好主意,但不能解决问题:(
thequestionthequestion

尝试ForcedPasswdChange No将其用于SSH1
Raza

1
我意识到ForcedPasswdChange No到期后将无法使用。您正在寻找一种允许过期用户登录的解决方案
Raza 2014年

Answers:


10

导致密码过期提示的操作顺序如下:

  • SSH运行PAM account阶段,该阶段将验证该帐户是否存在并有效。该account阶段会注意到密码已过期,并通知SSH。
  • SSH执行基于密钥的身份验证。为此,它不需要PAM,因此不会运行该auth阶段。然后,它设置SSH登录会话并运行PAM session阶段。
  • 接下来,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文件本身,因为它已用于其他登录方法。相反,您想includepam.d/sshd文件中删除。如果有其他的功能common-account之外pam_unix.so,你可能想要把它们直接进入pam.d/sshd

最后,请记住,这是对系统安全性的修改,您不应该只是盲目地相信我给您提供很好的建议。如果您不熟悉PAM的工作原理,请继续阅读。有些地方开始可能是man 7 PAMman 5 pam.confman 8 pam_unix


很好地解释了操作顺序,谢谢。
M_dk 2015年

3

一个选项被添加到pam_unix.so(大约2016年2月),称为no_pass_expiry(源代码在此处更改此处在手册页中)。基本上,它告诉pam_unix如果已使用除pam_unix之外的其他内容进行身份验证,例如sshd执行了身份验证,则忽略过期的密码。

因此,如果您拥有包含该选项的pam_unix.so版本,则应该能够将PAM配置为:

  1. 仍然发出警告,但是如果使用SSH密钥通过ssh进行身份验证,则不需要更改过期密码
  2. 如果使用通过pam_unix.so的登录名/密码通过ssh进行身份验证,则需要更改过期密码的密码
  3. 不影响任何其他身份验证序列(例如,通过登录服务)。

例如,通过简单地更新/etc/pam.d/sshd并将pam_unix.so no_pass_expiry添加到帐户和密码类型,例如,我将RHEL 7服务器配置为执行上述操作,例如

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

1
刚刚尝试过,它的工作原理。您可以通过在“ man 8 pam_unix”手册页中搜索“ no_pass_expiry”是否存在来检查您的PAM是否支持此选项。
Tomofumi

从2016年开始的代码更改在Ubuntu 18.04中仍然不存在... :(
ColinM

0
  • 出于合规性原因,您可能不想更改PAM或sshd_config。
  • 您可能在sshd_config中使用PasswordAuthentication no
  • 您可能拥有随机密码。
  • 您甚至可能已经实现了CIS合规性。
  • 仍然您的用户得到提示

然后root可以调整密码更改日期:

for user in `grep ":x:[0-9]\{4\}" /etc/passwd|cut -d: -f1`; do chage -d today $user; done
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.