Yubikey で pam_oath を設定できません: OTP はユーザーとしてログインする権限がありません

Yubikey で pam_oath を設定できません: OTP はユーザーとしてログインする権限がありません

つまり、私が望んでいるのは、Yubikey を第 2 要素または唯一の要素として使用してシステムにログインすることです。

私は Linux Mint 21.3 を使用しており、Yubikey は 5C NFC です。

私の/etc/pam.d/common-auth

auth    [success=1 default=ignore]      pam_unix.so nullok
auth    requisite                       pam_deny.so
auth    required pam_oath.so debug usersfile=/etc/users.oath digits=6 window=0
auth    required                        pam_permit.so
auth    required                        pam_ecryptfs.so unwrap
auth    optional                        pam_cap.so

私が追加したのは 3 行目だけです。残りは以前からありました。

Q1:私の理解が正しいでしょうか、行の順序が重要なのでしょうか?

HEX シークレットをoathtoolBase32 に生成/変換します:

kein@leaf:~$ oathtool -v --hotp -d 6 46362175108032033577
Hex secret: 46362175108032033577
Base32 secret: IY3CC5IQQAZAGNLX
Digits: 6
Window size: 0
Start counter: 0x0 (0)

801904

(1.2.5 AppImage)ではyubikey-manager、スロットの 1 つをOATH-HOTPBase32 シークレットを貼り付けて 6 桁を選択するように構成します。

次に作成します/etc/users.oath: (600 権限、所有者 - ルート)

HOTP    kein    -   46362175108032033577

現在: 最初の試みは成功しました:

kein@leaf:~$ sudo echo "YAPPY"
[sudo] password for kein:            
[../../pam_oath/pam_oath.c:parse_cfg(123)] called.
[../../pam_oath/pam_oath.c:parse_cfg(124)] flags 32768 argc 4
[../../pam_oath/pam_oath.c:parse_cfg(126)] argv[0]=debug
[../../pam_oath/pam_oath.c:parse_cfg(126)] argv[1]=usersfile=/etc/users.oath
[../../pam_oath/pam_oath.c:parse_cfg(126)] argv[2]=digits=6
[../../pam_oath/pam_oath.c:parse_cfg(126)] argv[3]=window=0
[../../pam_oath/pam_oath.c:parse_cfg(127)] debug=1
[../../pam_oath/pam_oath.c:parse_cfg(128)] alwaysok=0
[../../pam_oath/pam_oath.c:parse_cfg(129)] try_first_pass=0
[../../pam_oath/pam_oath.c:parse_cfg(130)] use_first_pass=0
[../../pam_oath/pam_oath.c:parse_cfg(131)] usersfile=/etc/users.oath
[../../pam_oath/pam_oath.c:parse_cfg(132)] digits=6
[../../pam_oath/pam_oath.c:parse_cfg(133)] window=0
[../../pam_oath/pam_oath.c:pam_sm_authenticate(275)] get user returned: kein
[../../pam_oath/pam_oath.c:pam_sm_authenticate(283)] usersfile is /etc/users.oath
[../../pam_oath/pam_oath.c:pam_sm_authenticate(293)] authenticate first pass rc -2 (OATH_INVALID_DIGITS: Unsupported number of OTP digits) last otp Sun Jun 30 07:11:28 3357022

One-time password (OATH) for `kein':       
[../../pam_oath/pam_oath.c:pam_sm_authenticate(376)] conv returned: 801904
[../../pam_oath/pam_oath.c:pam_sm_authenticate(440)] OTP: 801904
[../../pam_oath/pam_oath.c:pam_sm_authenticate(448)] authenticate rc 0 (OATH_OK: Successful return) last otp Tue Nov  8 02:59:37 4368416

[../../pam_oath/pam_oath.c:pam_sm_authenticate(472)] done. [Success]
YAPPY

しかし、2 回目の試行 (別の端末) は失敗します。

kein@leaf:~$ sudo echo "YAPPY"
[sudo] password for kein:            
[../../pam_oath/pam_oath.c:parse_cfg(123)] called.
[../../pam_oath/pam_oath.c:parse_cfg(124)] flags 32768 argc 4
[../../pam_oath/pam_oath.c:parse_cfg(126)] argv[0]=debug
[../../pam_oath/pam_oath.c:parse_cfg(126)] argv[1]=usersfile=/etc/users.oath
[../../pam_oath/pam_oath.c:parse_cfg(126)] argv[2]=digits=6
[../../pam_oath/pam_oath.c:parse_cfg(126)] argv[3]=window=0
[../../pam_oath/pam_oath.c:parse_cfg(127)] debug=1
[../../pam_oath/pam_oath.c:parse_cfg(128)] alwaysok=0
[../../pam_oath/pam_oath.c:parse_cfg(129)] try_first_pass=0
[../../pam_oath/pam_oath.c:parse_cfg(130)] use_first_pass=0
[../../pam_oath/pam_oath.c:parse_cfg(131)] usersfile=/etc/users.oath
[../../pam_oath/pam_oath.c:parse_cfg(132)] digits=6
[../../pam_oath/pam_oath.c:parse_cfg(133)] window=0
[../../pam_oath/pam_oath.c:pam_sm_authenticate(275)] get user returned: kein
[../../pam_oath/pam_oath.c:pam_sm_authenticate(283)] usersfile is /etc/users.oath
[../../pam_oath/pam_oath.c:pam_sm_authenticate(293)] authenticate first pass rc -2 (OATH_INVALID_DIGITS: Unsupported number of OTP digits) last otp Sun Mar 24 18:24:03 2024

One-time password (OATH) for `kein':       
[../../pam_oath/pam_oath.c:pam_sm_authenticate(376)] conv returned: 118838
[../../pam_oath/pam_oath.c:pam_sm_authenticate(440)] OTP: 118838
[../../pam_oath/pam_oath.c:pam_sm_authenticate(448)] authenticate rc -6 (OATH_INVALID_OTP: The OTP is not valid) last otp Sun Mar 24 18:24:03 2024

[../../pam_oath/pam_oath.c:pam_sm_authenticate(455)] One-time password not authorized to login as user 'kein'
[../../pam_oath/pam_oath.c:pam_sm_authenticate(472)] done. [Authentication failure]
Sorry, try again.
[sudo] password for kein: 

結局、次のもの/etc/users.oathが含まれます:HOTP kein - 46362175108032033577 0 801904 2024-03-24T18:24:03L

2Q: 2 回目 (およびそれ以降) の試行が失敗する理由は何ですか? 何が問題なのでしょうか?

3Q: なぜOATH_INVALID_DIGITS: Unsupported number of OTP digits

関連情報