Warum kann ich pam_echo.so nicht im Sudo-Pam-Stapel verwenden?

Warum kann ich pam_echo.so nicht im Sudo-Pam-Stapel verwenden?

Ich habe eine CentOS 7-Maschine, auf der ich eine Meldung anzeigen möchte, wenn die Authentifizierung während sudo fehlschlägt. Ich habe versucht, dies zu tun, indem ich eine pam_echoZeile in hinzugefügt habe /etc/pam.d/sudo.

Zum Testen habe ich eine Datei erstellt, /etc/security/foodie die Zeichenfolge „bar“ enthält.

Dies ist mein Sudo-Pam-Stapel /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

Aus irgendeinem Grund sehe ich diese Ausgabe von pam_echo nicht, wenn die Authentifizierung fehlschlägt.

$ 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

Ich habe den Sudo-Pam-Stack mit Pamtester getestet und nach Eingabe des falschen Passworts das erwartete Ergebnis erhalten.

$ pamtester sudo steve authenticate
Password:
bar

Ebenso bekam ich bei der Eingabe des richtigen Passwortes keine Ausgabe.

$ pamtester sudo steve authenticate
Password: 
pamtester: successfully authenticated

Es scheint, dass sudo die PAM-Ausgabe irgendwie überschreibt oder stört. Warum müsste sudo das tun? Kann ich das Verhalten von sudo ändern, damit die Ausgabe durchkommt?

Antwort1

Ich habe sudo ausgeführt und GDB für einen Backtrace verwendet. Ich bin den Brotkrümelspuren gefolgt und habe festgestellt, dass die Verhinderung der PAM-Ausgabe in sudo fest codiert ist.

Der Backtrace:

#13 0x00007f9879eba7e0 in pam_authenticate (pamh=0x56373c553960, flags=flags@entry=32768) bei pam_auth.c:34
#14 0x00007f987a3510de in sudo_pam_verify (pw=, prompt=0x56373c553d00 "[sudo] Passwort für Steve: ", auth=, callback=0x7ffea8406880)
    bei auth/pam.c:182
#15 0x00007f987a35052c in verify_user (pw=0x56373c54ce98, prompt=prompt@entry=0x56373c553d00 "[sudo] Passwort für Steve: ", validiert=validiert@entry=2, callback=callback@entry=0x7ffea8406880) bei auth/sudo_auth.c:294
#16 0x00007f987a3520e5 in check_user (auth_pw=0x56373c54ce98, mode=, validated=2) bei ./check.c:149
#17 0x00007f987a3520e5 in check_user (validiert=validiert@Eintrag=2, Modus=) bei ./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) bei ./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) bei ./policy.c:758
#20 0x000056373aee448f im Main (Plugin=0x56373b102480, User_env_out=0x7ffea8406a90, argv_out=0x7ffea8406a88, Command_info=0x7ffea8406a80, env_add=0x56373c5414f0, argv=0x7ffea8406cf0, argc=1) bei ./sudo.c:1342
#21 0x000056373aee448f in main (argc=, argv=, envp=) bei ./sudo.c:261

In den Zeilen 181-182 von auth/pam.c habe ich festgestellt, dass pam_authenticate mit dem Flag PAM_SILENT aufgerufen wird, um jegliche Ausgabe zu verhindern.

    /* PAM_SILENT verhindert, dass der Authentifizierungsdienst eine Ausgabe generiert. */
    *pam_status = pam_authenticate(pamh, PAM_SILENT);

verwandte Informationen