已删除密码的用户已过期“身份validation令牌”

设置:

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 

我的问题:
有没有办法来防止这种情况发生?
为什么身份validation令牌对于已删除密码的用户已过期?

这听起来像你的系统删除了密码,但没有清除密码过期的要求。

如果是这种情况,您可以使用vipw手动清除这些文件 – 受影响的字段将根据您的操作系统位于passwd文件或shadow文件中(有关文件格式的详细信息,请参阅man 5 passwdman 5 shadow您需要清除哪些字段)

我在使用“用户数据”(web-form-posted安装脚本(bash或cloud-init))选项创build的Debian 8 DigitalOcean液滴上遇到了这个问题。

检查systemd日志以获取相关的错误消息:

journalctl | grep -B 1 -i“cron。*validation令牌”| 尾巴-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 

查看哪个帐户已过期状态

cut -d:-f 1 / etc / passwd | 同时阅读U; 做chage -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”工具来更新到期字段,首先尝试

chage -I -1 -m 0 -M 999999 -W 31根

注意:直到我还添加了“最后更改”选项(-d)

使用“chage”工具更新到期字段,第二次尝试

chage -d`date“+%F”`-E 2999-01-01 -I -1 -m 0 -M 999999 -W 31 root

检查字段到期

chage -l根

 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 

在Ubuntu上,我的/ etc / shadow文件丢失(虽然有一个/ etc / shadow-),所以我所做的就是运行…

 sudo pwconv 

…它通过重新创build/ etc / shadow文件为我解决了这个问题。

(虽然我还不能确认这是一个长期的修复,但它可能会持续到密码更改/过期时间或直到其他因素发生) – 有人支持我或纠正我