私は現在、PAMを理解するようになっています。現在、OTPとパスワードを使用していますが、OTPとパスワードのいずれかを使用できるようにしたいので、それが失敗した場合は、YubiKeyとパスワードを使用します。私はArchを使用しており、pam.dディレクトリのsystem-authファイルは次のようになっています。
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
承認された回答:
ArchはLinuxPAM(SolarisPAMやFreeBSDPAMとは異なります)であり、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
...
yubikeyの場合、それが機能する場合は、2つのルールを(env
に)ジャンプする必要があります。 および後続の認証設定手順)およびOTPの場合、同じルールを1つ下げます。それ以外の場合は、認証を拒否します。 default
がわからない または[...]
の他のオプション ビットはそうあるべきなので、失敗するように設定しました。
もう1つのオプションはサブスタックです。メインのルールファイルには、次のようなものがあります。
...
auth substack otp-foo
auth substack yubikey-foo
...
次に、追加の/etc/pam.d/{otp-foo,yubikey-foo}
if-authgood-or-pam_denyを実行するファイル。ただし、この場合、yubikeyが機能する場合はotpチェックをスキップする前の例とは異なり、両方が試行されます(Linux PAMはすべてのサブスタックで機能します)。