¿Por qué no puedo usar pam_echo.so en la pila sudo pam?

¿Por qué no puedo usar pam_echo.so en la pila sudo pam?

Tengo una máquina CentOS 7 donde me gustaría mostrar un mensaje cuando falla la autenticación durante sudo. Intenté hacer esto agregando una pam_echolínea en /etc/pam.d/sudo.

Para realizar pruebas, creé un archivo /etc/security/fooque contiene la cadena 'barra'.

Esta es mi pila sudo pam /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 alguna razón, no veo este resultado de pam_echo cuando no puedo autenticarme.

$ 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

Probé la pila Sudo pam con pamtester y obtuve el resultado esperado después de ingresar la contraseña incorrecta.

$ pamtester sudo steve authenticate
Password:
bar

Del mismo modo, no obtuve ningún resultado al ingresar la contraseña correcta.

$ pamtester sudo steve authenticate
Password: 
pamtester: successfully authenticated

Parece que sudo de alguna manera anula o interfiere con la salida de pam. ¿Por qué sudo necesitaría hacer esto? ¿Puedo cambiar el comportamiento de Sudo para que llegue la salida?

Respuesta1

Ejecuté sudo y usé GDB para hacer un seguimiento. Seguí las rutas de navegación y descubrí que evitar la salida de PAM está codificado en sudo.

El rastro atrás:

#13 0x00007f9879eba7e0 en pam_authenticate (pamh=0x56373c553960, flags=flags@entry=32768) en pam_auth.c:34
#14 0x00007f987a3510de en sudo_pam_verify (pw=, Prompt=0x56373c553d00 "[sudo] contraseña para steve: ", auth=, callback=0x7ffea8406880)
    en auth/pam.c:182
#15 0x00007f987a35052c en verificar_usuario (pw=0x56373c54ce98, Prompt=prompt@entry=0x56373c553d00 "[sudo] contraseña para steve: ", validado=validado@entry=2, callback=callback@entry=0x7ffea8406880) en auth/sudo_auth.c : 294
#16 0x00007f987a3520e5 en check_user (auth_pw=0x56373c54ce98, modo=, validado=2) en ./check.c:149
#17 0x00007f987a3520e5 en check_user (validado=validado@entrada=2, modo=) en ./check.c:212
#18 0x00007f987a36506d en sudoers_policy_main (argc=argc@entry=1, argv=argv@entry=0x7ffea8406cf0, pwflag=pwflag@entry=0, env_add=env_add@entry=0x56373c5414f0, cierre=closure@entry=0x7 ffea84069f0) en ./sudoers .c:423
#19 0x00007f987a35eca4 en sudoers_policy_check (argc=1, argv=0x7ffea8406cf0, env_add=0x56373c5414f0, command_infop=0x7ffea8406a80, argv_out=0x7ffea8406a88, user_env_out=0x7ffea840 6a90) en ./policy.c:758
#20 0x000056373aee448f en principal (plugin=0x56373b102480, user_env_out=0x7ffea8406a90, argv_out=0x7ffea8406a88, command_info=0x7ffea8406a80, env_add=0x56373c5414f0, argv=0 x7ffea8406cf0, argc=1) en ./sudo.c:1342
#21 0x000056373aee448f en principal (argc=, argv=, envp=) en ./sudo.c:261

En las líneas 181-182 de auth/pam.c, encontré que se llama a pam_authenticate con el indicador PAM_SILENT para evitar cualquier resultado.

    /* PAM_SILENT evita que el servicio de autenticación genere resultados. */
    *pam_status = pam_authenticate(pamh, PAM_SILENT);

información relacionada