!!! 注意 !!!

!!! 注意 !!!

最近、systemd-homed を試してみましたが、その際に Yubikey を FIDO2 デバイスとして登録しました。作成されたホームに対して認証しようとすると、homectl authenticate <user>Yubikey が正しくアクティブ化され、PIN を要求し、タッチを待ってから通常のパスワード プロンプトが表示されます。

しかし、tty からそのアカウントにログインしようとすると、パスワードの入力のみが求められ、U2F は完全に省略されます。それでも、Yubikey が切断されていても、以前にロックされていたホームは復号化されて開きます。

認証に U2F を使用するように強制するにはどうすればよいですか? については知っていますpam-u2fが、ここで関連する場合、方法がわかりません。 を使用した「従来の」ユーザー ログインのセキュリティ保護に関するリソースをpam-u2fこのシナリオと一致させることはできません。 は常にキーの作成から始まりますが、この場合は によって管理されているようですsystemd-homed(これに関する明確な情報は見つかりませんでした)。

答え1

私はそれを理解したので、誰かが同じ問題に遭遇した場合に備えて、私の発見を皆さんと共有したいと思います。

これはすべて PAM の構成に関係しています。Web 上のさまざまな情報から判断すると、これは使用する Linux ディストリビューションに大きく依存します。私の場合、Arch Linux では、system-authユーザー認証を担当するデフォルトのファイルは次のようになります。

$ cat /etc/pam.d/system-auth

#%PAM-1.0

auth       required                    pam_faillock.so      preauth
auth       [success=2 default=ignore]  pam_unix.so          try_first_pass nullok
-auth      [success=1 default=ignore]  pam_systemd_home.so
auth       [default=die]               pam_faillock.so      authfail
auth       optional                    pam_permit.so
auth       required                    pam_env.so
auth       required                    pam_faillock.so      authsucc
# ...

これは、pam_unix.soモジュール (パスワードによる認証を行う) が最初に実行され、成功した場合は次の 2 つのモジュールをスキップすることを意味します。したがって、パスワードが正しい場合はpam_systemd_home.so実行されず、U2F を照会しません。アカウント パスワードは LUKS キーとして登録されているため、ホーム パーティション コンテナーのロックを解除するだけで十分です。

!!! 注意 !!!

PAM 構成をいじるときはいつもそうですが、変更が正常に確認されるまで、常にルート シェルを開いたままにしてください。そうしないと、PC からロックアウトされてしまう可能性があります。

FIDO2 デバイスのみで認証を実現したかったので、次のようにしました。

cat /etc/pam.d/system-auth
#%PAM-1.0

auth       required                    pam_faillock.so      preauth
-auth      [success=2 default=ignore]  pam_systemd_home.so
auth       [success=1 default=ignore]  pam_unix.so          try_first_pass nullok
auth       [default=die]               pam_faillock.so      authfail
auth       optional                    pam_permit.so
auth       required                    pam_env.so
auth       required                    pam_faillock.so      authsucc

最初pam_systemd_home.soに実行され、成功するとデフォルトのパスワード プロンプトがスキップされます。LUKS の場合、FIDO2 デバイスがトークンとして登録されるため、これで十分です。

[success=2 default=ignore]「本物の」2FA を導入したい場合は、と の[success=1...設定を に変更するだけですrequired

関連情報