首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >过期密码和基于SSH密钥的UsePAM登录

过期密码和基于SSH密钥的UsePAM登录
EN

Unix & Linux用户
提问于 2014-10-09 18:09:24
回答 3查看 38K关注 0票数 12

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

sshd_config有:

代码语言:javascript
复制
UsePAM yes
PasswordAuthentication yes
PubkeyAuthentication yes

问题是:如果密码对使用公键登录的用户过期,则会提示用户更改密码。

问题:如果用户拥有有效的SSH密钥且密码过期,我们如何设置PAM或sshd配置以允许用户登录?-而不弹出“更改您的密码”。

UPDATE#1:解决方案不能是:"UsePAM no“

代码语言:javascript
复制
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:

代码语言:javascript
复制
SERVER:/etc/pam.d # cat common-account
#%PAM-1.0
...
account required    pam_unix2.so    
account required    pam_tally.so
SERVER:/etc/pam.d # 
EN

回答 3

Unix & Linux用户

发布于 2014-10-09 23:36:09

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

  • 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文件本身,因为它用于其他登录方法。相反,您希望从您的include文件中删除pam.d/sshd。如果common-account中除了pam_unix.so之外还有其他函数,您可能希望将它们直接放入pam.d/sshd中。

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

票数 13
EN

Unix & Linux用户

发布于 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配置为:

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

例如,我配置了一个RHEL 7服务器来完成上述工作,只需更新/etc/pan.d/sshd,并将pam_unix.so no_pass_expiry添加到帐户和密码类型中,例如

代码语言:javascript
复制
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
票数 6
EN

Unix & Linux用户

发布于 2017-05-31 12:03:52

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

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

代码语言:javascript
复制
for user in `grep ":x:[0-9]\{4\}" /etc/passwd|cut -d: -f1`; do chage -d today $user; done
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/160268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档