Como ter o módulo pam de backup

3

Atualmente, estou começando a entender o PAM. Agora eu uso OTP e senha, mas eu quero ser capaz de usar o OTP e senha e se isso falhar, então use o meu YubiKey e senha. Eu estou no Arch e meu arquivo system-auth no diretório pam.d se parece com isto:

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
    
por Coding Guy 09.12.2017 / 15:21

2 respostas

3

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.

    
por 09.12.2017 / 17:03
1

Com a ajuda do thrig, finalmente acertei, mas sua primeira solução não funcionou porque o padrão = bad faria com que a pilha falhasse sempre. A maneira que fiz foi fazer uma subcapa 2fa. Eu testei isso em su em vez de system-auth neste momento. O arquivo su PAM se parece com isto:

#%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

Como você pode ver logo após o pam_unix eu incluo a subcompacta 2fa que se parece com isto:

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

Por estar em uma sub-pilha, o valor de controle suficiente não encerra toda a pilha do módulo apenas na sub-pilha. Então, agora, se meu yubikey falhar, posso usar o OTP em vez disso, se eu tiver digitado a senha correta.

    
por 09.12.2017 / 18:54