在全新安装的 Arch Linux 中,我尝试要求用户在首次登录时更改密码。我使用 使密码过期passwd --expire username
,但用户无法再登录。显示此消息:
You are required to change your password immediately (administrator enforced)
Authentication token manipulation error
几秒钟后,它返回到登录提示。
是什么原因导致了这个错误,可以修复它以允许用户更改密码吗?
无论我设置密码还是使用 删除密码,我都会得到相同的行为passwd --delete
。
答案1
我对这种行为感到很好奇,所以我在我的机器上进行了测试。
再生产
我创建一个新用户
# useradd -m -s /bin/bash test
我为它创建了一个虚拟密码
# passwd test Geben Sie ein neues Passwort ein: Geben Sie das neue Passwort erneut ein:
在另一个终端测试我目前所做的操作
$ su - test Passwort: $ # I'm in. $ exit # I'm out.
回到我的根终端,我尝试做你所做的事情......
# passwd --expire test passwd: Passwortablauf-Informationen geändert.
回到我的正常终端,我尝试连接新用户。
$ su - test Passwort: You are required to change your password immediately (administrator enforced) su: Fehler beim Ändern des Authentifizierungstoken
有趣,我和你的情况一样。
剥壳
我很好奇,所以我查看了手册
# LC_ALL=en_US.UTF-8 man passwd #Comment# LC_ALL is needed because otherwise, I get the manual in german.
奇怪的是,上面写着:
-e, --expire
Immediately expire an account's password. This in effect can force a user to change their password at the
user's next login.
我得出的结论是,所描述的行为不起作用,这很奇怪......
所以据我所知,pam.d
他负责登录,所以我在日志中查找了它。
# journalctl -g pam -xe
在日志中我看到了以下内容。
Jul 28 xx:xx:xx funilrys su[xxxxx]: pam_unix(su-l:auth): authentication failure; logname= uid=1000 euid=0 tty=pts/4 ruser=funilrys rhost= user=test
Jul 28 xx:xx:xx funilrys su[xxxxx]: pam_unix(su-l:account): expired password for user test (root enforced)
Jul 28 xx:xx:xx funilrys su[xxxxx]: pam_warn(su-l:chauthtok): function=[pam_sm_chauthtok] flags=0x4020 service=[su-l] terminal=[pts/4] user=[test] ruser=[funilrys] rhost=[<unknown>]
注意:当我登录时,使用的su
是su-l
该服务。
这意味着它可以pam.d
正常工作但它不能处理密码更改。
但我并不相信,因此我使用 SSH 进行了测试(我将 SSH 配置留给您)并且它成功了。
$ ssh -p xxxxx [email protected]
Passwort:
You are required to change your password immediately (administrator enforced)
Ändern des Passworts für test.
Current password:
Geben Sie ein neues Passwort ein:
Geben Sie das neue Passwort erneut ein:
$
我问自己,区别在哪里?
我发现该/etc/pam.d/sshd
文件有这一行
password include system-remote-login
因此,由于我的服务是,su-l
我将这行添加到/etc/pam.d/su-l
然后再试一次。
$ su - test
Passwort:
You are required to change your password immediately (administrator enforced)
Ändern des Passworts für test.
Current password:
Geben Sie ein neues Passwort ein:
Geben Sie das neue Passwort erneut ein:
而且它成功了!
结论
如果您将以下行添加到/etc/pam.d/login
,/etc/pam.d/su-l
或根据您使用的服务添加其他配置。用户将能够在下次登录时更改其密码。
password include system-remote-login
建议(编辑 1)
在我的分析中,我经历了这一切,但是深入研究之后,我不得不承认,即使system-remote-login
它有效,我们也应该避免它,因为它实际上是为 SSH 考虑的。
因此,我建议遇到此问题的任何人都将以下行(改为)添加到/etc/pam.d/login
,/etc/pam.d/su-l
或根据您使用的服务在其他配置中添加。
password include system-local-login