我对用户仍然可以通过 ssh 访问其帐户已过期的 Linux 机器(Ubuntu 18.04.6 LTS)这一事实感到有些惊讶。
我使用以下命令设置帐户到期日期chage
:
sudo chage -l xxxx
Last password change : Oct 10, 2024
Password expires : never
Password inactive : never
Account expires : Nov 05, 2024
Minimum number of days between password change : 0
Maximum number of days between password change : 99999
Number of days of warning before password expires : 7
该帐户于 2024-11-05 到期,但用户仍然可以通过 ssh 访问该帐户。
sshd 服务器或 PAM 中是否有任何配置来强制帐户过期?
据我所知,sshdUsePAM yes
和 PAM 应该可以阻止登录,但它唯一做的就是 Your account has expired; please contact your system administrator
在 ssh 横幅中打印。
如果我这样做,我会得到相同的结果sudo su xxxx
,我确实得到了一个Your account has expired; please contact your system administrator
,但无论如何我都会得到 shell 提示符。
PAM 是一个模块化系统;它完全依赖于配置来
/etc/pam.d/
定义调用哪些模块以及它们的结果如何被纳入 PAM 调用的总体结果之中。例如,每个模块都可以作为“必需”加载,其中其返回的错误代码最终会在最后产生影响,或者作为“必需”加载,其中错误代码是立即返回的失败,或者作为“可选”加载,其中该模块的错误被忽略,或者一些其他选项(请参阅pam(8)和pam.conf(5))。
根据 /etc/shadow 数据,到期时间由 PAM 配置的 (授权) 部分处理
pam_unix.so
。account
如果您从 pam_unix 收到“帐户已过期”消息,但它没有停止该过程,那么听起来好像模块 (意外或其他原因) 被定义为optional
必需的。当 sshd 处理连接时,它使用来自 的模块
/etc/pam.d/sshd
;当运行 su 时,它使用su
或su-l
。这些通常包括通用/etc/pam.d/system-auth
或类似模块。检查所有这些配置,直到找到配置错误的模块并将其修复为“必需”。请注意,不同部分中的同一模块执行不同的任务:
passwd
。