再生产

再生产

在全新安装的 Arch Linux 中,我尝试要求用户在首次登录时更改密码。我使用 使密码过期passwd --expire username,但用户无法再登录。显示此消息:

You are required to change your password immediately (administrator enforced)

Authentication token manipulation error

几秒钟后,它返回到登录提示。

是什么原因导致了这个错误,可以修复它以允许用户更改密码吗?

无论我设置密码还是使用 删除密码,我都会得到相同的行为passwd --delete

答案1

我对这种行为感到很好奇,所以我在我的机器上进行了测试。

再生产

  1. 我创建一个新用户

    # useradd -m -s /bin/bash test
    
  2. 我为它创建了一个虚拟密码

    # passwd test
    Geben Sie ein neues Passwort ein: 
    Geben Sie das neue Passwort erneut ein: 
    
  3. 在另一个终端测试我目前所做的操作

    $ su - test
    Passwort:
    $ # I'm in.
    $ exit # I'm out.
    
  4. 回到我的根终端,我尝试做你所做的事情......

    # passwd --expire test
    passwd: Passwortablauf-Informationen geändert.
    
  5. 回到我的正常终端,我尝试连接新用户。

    $ 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>]

注意:当我登录时,使用的susu-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

相关内容