Attualmente sto imparando a capire PAM. In questo momento utilizzo OTP e password, ma voglio essere in grado di utilizzare OTP e password e, se ciò non riesce, utilizzare YubiKey e password. Sono su Arch e il mio file di autenticazione di sistema nella directory pam.d è simile a questo:
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
Risposta accettata:
Arch è Linux PAM (che è diverso da Solaris PAM e FreeBSD PAM) e Linux PAM ha mezzi per saltare le regole, quindi un modo per farlo sarebbe sulla falsariga di
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
...
che per yubikey se funziona dovrebbe saltare due regole in basso (a env
ed eventuali successivi passaggi di configurazione dell'autenticazione) e per OTP una regola in meno per lo stesso, altrimenti negando l'autenticazione. Non sono sicuro di quale sia il default
o altre opzioni per il [...]
i bit dovrebbero essere, quindi li ho impostati per non riuscire.
Un'altra opzione è un substack, nel file delle regole principali avresti qualcosa come:
...
auth substack otp-foo
auth substack yubikey-foo
...
e poi /etc/pam.d/{otp-foo,yubikey-foo}
aggiuntivo file uno farebbe if-authgood-or-pam_deny. Tuttavia, in questo caso verranno provati entrambi (Linux PAM funziona attraverso tutti i substack) a differenza dell'esempio precedente in cui se yubikey funziona salta il controllo otp.