
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_echo
Zeile in hinzugefügt habe /etc/pam.d/sudo
.
Zum Testen habe ich eine Datei erstellt, /etc/security/foo
die 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);