Actualmente estoy llegando a entender PAM. En este momento, uso OTP y contraseña, pero quiero poder usar OTP y contraseña y, si eso falla, usar mi YubiKey y contraseña. Estoy en Arch y mi archivo system-auth en el directorio pam.d se ve así:
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
Respuesta aceptada:
Arch es Linux PAM (que es diferente de Solaris PAM y FreeBSD PAM) y Linux PAM tiene medios para omitir reglas, por lo que una forma de hacerlo sería en la línea 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
...
que para el yubikey si eso funciona debería saltar dos reglas hacia abajo (al env
y cualquier paso de configuración de autenticación subsiguiente) y para OTP, una regla hacia abajo para lo mismo, de lo contrario, denegar la autenticación. No estoy seguro de cuál es el default
u otras opciones para el [...]
los bits deberían ser, así que los configuré para fallar.
Otra opción es una subpila, en el archivo de reglas principal tendría algo como:
...
auth substack otp-foo
auth substack yubikey-foo
...
y luego /etc/pam.d/{otp-foo,yubikey-foo}
adicional archivos, uno haría if-authgood-or-pam_deny. Sin embargo, en este caso se probarán ambos (Linux PAM funciona en todas las subpilas) a diferencia del ejemplo anterior en el que, si funciona yubikey, se salta la comprobación de otp.