Arch é Linux PAM (que é diferente do Solaris PAM e FreeBSD PAM) e o Linux PAM tem meios para pular regras, então uma maneira de fazer isso seria ao longo das linhas de
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
...
qual para o yubikey se isso funcionar deve pular duas regras para baixo (para o env
e quaisquer etapas subsequentes de configuração de autenticação) e para o OTP uma regra para baixo para o mesmo, caso contrário, negando a autenticação. Não tenho certeza do que deve ser o default
ou outras opções para os [...]
bits, então configuro para falhar.
Outra opção é uma sub-pilha, no arquivo de regras principal você teria algo como:
...
auth substack otp-foo
auth substack yubikey-foo
...
e, em seguida, arquivos /etc/pam.d/{otp-foo,yubikey-foo}
adicionais um faria o if-authgood-or-pam_deny. No entanto, neste caso, ambos serão tentados (o Linux PAM funciona através de todas as sub-pilhas) ao contrário do exemplo anterior, onde se o yubikey funciona, ele pula a verificação otp.