Arch Linuxの新規インストールで、最初のログイン時にユーザーにパスワードの変更を要求しようとしています。passwd --expire username
を使用してパスワードを期限切れにしましたが、ユーザーはログインできなくなりました。次のメッセージが表示されます。
You are required to change your password immediately (administrator enforced)
Authentication token manipulation error
数秒後、ログインプロンプトに戻ります。
このエラーの原因は何ですか?ユーザーがパスワードを変更できるように修正できますか?
パスワードを設定しても、passwd --delete
でパスワードを削除しても、同じ動作が発生します。
私はその動作に興味があったので、自分のマシンでテストしました。
新しいユーザーを作成します
# 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
私の分析では、調査しましたが、詳しく調べた結果、system-remote-login
が機能していても、実際にはSSHであると考えられていたため、回避する必要があることを認めなければなりません。
したがって、この問題が発生した場合は、使用するサービスに応じて、(代わりに)次の行を/etc/pam.d/login
、/etc/pam.d/su-l
またはその他の構成に追加することをお勧めします。
password include system-local-login