要让Linux系统在非工作时间禁止用户修改密码,关键是通过PAM的account阶段调用pam_time.so模块进行时间授权检查,并在/etc/security/time.conf中为passwd服务配置精确时段规则。

要让 Linux 系统在非工作时间禁止用户修改密码,关键不是改 passwd 命令本身,而是通过 PAM 的 account 阶段,在用户执行 passwd 时做时间授权检查——只要不满足时段条件,就直接拒绝操作,连密码提示都不出现。
这需要两步配合:启用 pam_time.so 模块拦截 + 在 time.conf 中精确限定 passwd 服务的可用时段。
✅ 在 /etc/pam.d/passwd 中启用时间检查
passwd 命令默认调用 /etc/pam.d/passwd 这个 PAM 配置文件。必须在此文件的 account 段首行添加:
account required pam_time.so
⚠️ 注意:
- 类型必须是
account(不是auth或password),因为这是“授权判断”,不是身份验证或密码修改逻辑; - 必须放在
account段最上方,否则可能被后续success=ok类模块跳过; - 不要写成
pam_time,必须带.so后缀; - 修改后无需重启服务,
passwd是即时生效的命令。
✅ 编写 /etc/security/time.conf 规则,专限 passwd 服务
规则格式固定为四字段,用分号分隔:
service;ttys;users;times
针对密码修改限制,典型配置如下:
# 只允许 admin 组在工作日 08:00–17:00 修改密码 passwd;*;@admin;Wk0800-1700 # 允许所有用户(除 root)在每天 09:00–12:00 和 13:00–16:00 修改密码 passwd;*;!root;Al0900-1200,Al1300-1600
说明:
-
service必须写passwd(大小写敏感,不能是PASSWD或password); -
ttys填*即可,覆盖终端、SSH、图形界面等所有调用场景; -
users支持@group(组)、!user(排除)、ALL(全部),按需组合; -
times用 24 小时制、无冒号、不跨天;可用Wk(工作日)、Al(每天)、MoTuWe等缩写;多个时段用英文逗号连接。
? 提示:若想完全禁止非工作时间修改密码,不要配
ALL用户规则,而应显式列出允许的组或用户,并确保没有兜底规则(如passwd;*;ALL;Al0000-2400)覆盖它。
✅ 验证与排错要点
- 测试前,确保你有另一个未受限制的账户(如 root 或另一管理员)在线,防止锁死;
- 执行
passwd时若被拒绝,系统不会提示“时间不对”,只会显示Authentication token manipulation error或直接退出——这是正常行为; - 查看是否生效:在非授权时段运行
strace -e trace=openat passwd 2>&1 | grep time.conf,确认读取了/etc/security/time.conf; - 日志通常不记录
pam_time拒绝详情,但可通过journalctl _COMM=passwd -n 20辅助观察; - 若规则无效,优先检查:
/etc/pam.d/passwd文件是否存在拼写错误、是否漏掉required、time.conf路径是否正确、规则 service 字段是否严格匹配passwd。
不复杂但容易忽略。


















