设置:
1)使用“passwd -d”命令删除用户密码
2)用户正在运行 cron 任务
问题:
每 30 天(默认密码过期策略)一次 cron 失败并出现错误
Authentication token is no longer valid; new one required
ERROR: failed to open PAM security session: Success
ERROR: cannot set security context
我的问题:
有没有办法防止这种情况发生?
为什么删除密码后用户的身份验证令牌会过期?
答案1
我在使用“用户数据”(web-form-posted 安装脚本(bash 或 cloud-init))选项创建的 Debian 8 DigitalOcean droplet 上遇到了这个问题。
检查 systemd 日志中是否存在相关错误消息:
journalctl | grep -B 1 -i “cron。*身份验证令牌” | tail -n 3
May 19 13:17:01 debian-512mb-fra1-01 CRON[16714]: pam_unix(cron:account): expired password for user root (root enforced)
May 19 13:17:01 debian-512mb-fra1-01 CRON[16714]: Authentication token is no longer valid; new one required
May 19 13:17:01 debian-512mb-fra1-01 cron[470]: Authentication token is no longer valid; new one required
查看哪些帐户已过期
剪切 -d: -f 1 /etc/passwd | 读取 U 时;执行更改 -l $U | sed "s|^|$U:|";完成 | grep "必须是"
root:Last password change : password must be changed
root:Password expires : password must be changed
root:Password inactive : password must be changed
使用“chage”工具更新到期字段,首次尝试
更改-I -1 -m 0 -M 999999 -W 31 根
注意:直到我添加了“上次更改”选项(-d)才达到预期的效果
使用“chage”工具更新到期字段,第二次尝试
chage -d `日期 "+%F"` -E 2999-01-01 -I -1 -m 0 -M 999999 -W 31 root
检查字段过期
更改-l root
Last password change : May 19, 2017
Password expires : never
Password inactive : never
Account expires : Jan 01, 2999
Minimum number of days between password change : 0
Maximum number of days between password change : 999999
Number of days of warning before password expires : 31
答案2
听起来你的系统删除了密码但没有清除密码过期要求。
如果是这种情况,您可以使用以下方式手动清除这些字段vipw
——受影响的字段将位于passwd
文件中或shadow
文件中,具体取决于您的操作系统(有关文件格式的详细信息,请参阅man 5 passwd
和,man 5 shadow
以便了解需要清除哪些字段)
答案3
在 Ubuntu 上我的/etc/shadow文件丢失(尽管有一个 /etc/shadow-)所以我所做的就是跑步......
sudo pwconv
...通过重新创建 /etc/shadow 文件,它为我解决了这个问题。
(虽然我还不能确认这是一个长期的解决方案,但它可能会持续到密码更改/过期时间或直到发生其他因素)——有人支持我或纠正我