Por que não consigo usar pam_echo.so na pilha de sudo pam?

3

Eu tenho uma máquina do CentOS 7 em que gostaria de exibir uma mensagem quando a autenticação falha durante o sudo. Eu tentei fazer isso adicionando uma linha pam_echo em /etc/pam.d/sudo.

Para testar, criei um arquivo, / etc / security / foo, que contém a string 'bar'.

Esta é minha pilha de sudo, /etc/pam.d/sudo: auth include system-auth auth optional pam_echo.so file=/etc/security/foo account include system-auth password include system-auth session optional pam_keyinit.so revoke session required pam_limits.so

Por algum motivo, não vejo essa saída de pam_echo quando não autentico. $ sudo ls [sudo] password for steve: Sorry, try again. [sudo] password for steve: Sorry, try again. [sudo] password for steve: sudo: 3 incorrect password attempts

Testei a pilha de sudo com o pamtester e obtive o resultado esperado depois de digitar a senha errada. $ pamtester sudo steve authenticate Password: bar

Da mesma forma, não recebo nenhuma saída ao digitar a senha correta. $ pamtester sudo steve authenticate Password: pamtester: successfully authenticated

Parece que o sudo está de alguma forma substituindo ou interferindo na saída do pam. Por que o sudo precisa fazer isso? Posso mudar o comportamento do sudo para que a saída passe?

    
por Steve F 14.12.2017 / 19:34

1 resposta

2

Eu rodei o sudo e usei o GDB para fazer um back-trace. Eu segui as migalhas de pão e descobri que impedir a saída do PAM é codificado para o sudo.

O backtrace:

#13 0x00007f9879eba7e0 in pam_authenticate (pamh=0x56373c553960, flags=flags@entry=32768) at pam_auth.c:34
#14 0x00007f987a3510de in sudo_pam_verify (pw=, prompt=0x56373c553d00 "[sudo] password for steve: ", auth=, callback=0x7ffea8406880)
    at auth/pam.c:182
#15 0x00007f987a35052c in verify_user (pw=0x56373c54ce98, prompt=prompt@entry=0x56373c553d00 "[sudo] password for steve: ", validated=validated@entry=2, callback=callback@entry=0x7ffea8406880) at auth/sudo_auth.c:294
#16 0x00007f987a3520e5 in check_user (auth_pw=0x56373c54ce98, mode=, validated=2) at ./check.c:149
#17 0x00007f987a3520e5 in check_user (validated=validated@entry=2, mode=) at ./check.c:212
#18 0x00007f987a36506d in sudoers_policy_main (argc=argc@entry=1, argv=argv@entry=0x7ffea8406cf0, pwflag=pwflag@entry=0, env_add=env_add@entry=0x56373c5414f0, closure=closure@entry=0x7ffea84069f0) at ./sudoers.c:423
#19 0x00007f987a35eca4 in sudoers_policy_check (argc=1, argv=0x7ffea8406cf0, env_add=0x56373c5414f0, command_infop=0x7ffea8406a80, argv_out=0x7ffea8406a88, user_env_out=0x7ffea8406a90) at ./policy.c:758
#20 0x000056373aee448f in main (plugin=0x56373b102480 , user_env_out=0x7ffea8406a90, argv_out=0x7ffea8406a88, command_info=0x7ffea8406a80, env_add=0x56373c5414f0, argv=0x7ffea8406cf0, argc=1) at ./sudo.c:1342
#21 0x000056373aee448f in main (argc=, argv=, envp=) at ./sudo.c:261

Nas linhas 181-182 do auth / pam.c, descobri que o pam_authenticate é chamado com o sinalizador PAM_SILENT para evitar qualquer saída.

    /* PAM_SILENT prevents the authentication service from generating output. */
    *pam_status = pam_authenticate(pamh, PAM_SILENT);
    
por 18.12.2017 / 20:21