私は現在PAMについて学んでいます。今はOTPとパスワードを使用していますが、OTPとパスワードを使用できるようにしたいと思います。失敗した場合は、YubiKeyとパスワードを使用してください。私はArchを使用しており、pam.dディレクトリのシステム認証ファイルは次のようになります。
auth required pam_oath.so usersfile=/etc/users.oath window=30 digits=6 debug
auth required pam_unix.so try_first_pass nullok
auth optional pam_permit.so
auth required pam_env.so
account required pam_unix.so
account optional pam_permit.so
account required pam_time.so
password required pam_unix.so try_first_pass nullok sha512 shadow
password optional pam_permit.so
session required pam_limits.so
session required pam_unix.so
session optional pam_permit.so
答え1
ArchはLinux PAM(Solaris PAMおよびFreeBSD PAMとは異なり)であり、Linux PAMにはルールをスキップする方法があるため、これを達成する1つの方法は次のとおりです。
auth required pam_unix.so ... # password
auth [success=2 default=bad] pam_yubikey ...
auth [success=1 default=bad] pam_otp ...
auth required pam_deny.so
auth required pam_env.so
...
env
yubikeyの場合、有効な場合は2つのルール(後続の認証設定フェーズ)を下げ、OTPの場合は1つのルールを下げる必要があり、そうでない場合は認証を拒否する必要があります。このビットdefault
のオプションや他のオプションが何であるかわからないため、[...]
失敗するように設定しました。
別のオプションはサブスタックです。デフォルトのルールファイルには次の内容があります。
...
auth substack otp-foo
auth substack yubikey-foo
...
その後、添付ファイルは/etc/pam.d/{otp-foo,yubikey-foo}
if-authgood-or-pam_denyを実行します。ただし、この場合は両方とも試行されます(Linux PAMはすべてのサブスタックで動作します)。 yubikeyが機能している場合は、otpチェックをスキップする前の例とは異なります。
答え2
thrigの助けを借りてついに正解を得ましたが、default = badのためにスタックが常に失敗したため、彼の最初の解決策は機能しませんでした。私のアプローチは2faサブスタックを作成することです。今回はsystem-authの代わりにsuでテストしました。 su PAMファイルは次のとおりです。
#%PAM-1.0
auth sufficient pam_rootok.so
# Uncomment the following line to implicitly trust users in the "wheel" group.
#auth sufficient pam_wheel.so trust use_uid
# Uncomment the following line to require a user to be in the "wheel" group.
#auth required pam_wheel.so use_uid
auth required pam_unix.so
auth substack 2fa
account required pam_unix.so
session required pam_unix.so
pam_unixの後に見られるように、以下のようにサブスタック2faを含めました。
auth sufficient pam_yubico.so id=35659 authfile=/etc/yubikey_mappings debug
auth required pam_oath.so usersfile=/etc/users.oath window=30 digits=6 debug
サブスタックにあるため、十分な制御値はモジュールスタック全体を終了せず、サブスタックのみを終了します。 yubikeyが失敗しても正しいパスワードを入力すると、OTPを使用できます。