Jeden Aufruf jedes SUID-Programms protokollieren?

12

Ich möchte eine Protokolldatei haben, die einen Eintrag für jedes Mal enthält, wenn ein Benutzer ein suid-Programm ausführt, das den Benutzernamen, das Programm und alle an ihn übergebenen Befehlszeilenargumente enthält. Gibt es eine Standardmethode, um dies unter Linux zu erreichen?

Kim
quelle

Antworten:

7

Sie können alle Aufrufe einer bestimmten ausführbaren Datei (setuid oder nicht) über das Überwachungssubsystem protokollieren . Die Dokumentation ist eher spärlich; Beginnen Sie mit der Manpage auditctl oder vielleicht mit diesem Tutorial . Die neuesten Distributionen versenden ein auditdPaket. Installieren Sie es und stellen Sie sicher, dass der auditdDämon ausgeführt wird

auditctl -A exit,always -F path=/path/to/executable -S execve

und beobachten Sie, wie die Anrufe angemeldet werden /var/log/audit/audit.log(oder wo immer Ihre Verteilung dies eingerichtet hat).

Gilles 'SO - hör auf böse zu sein'
quelle
1
Ich denke, man könnte ein Skript schreiben, um zuerst alle SUID-Binärdateien mit find abzurufen und dann Ihre Lösung für jede zu verwenden. Nicht elegant, aber machbar. Vielen Dank!
Kim
2
@Kim: Ich denke, Sie können alle Aufrufe einer setuid-Root-Binärdatei durch einen Nicht-Root-Benutzer protokollieren, indem Sie -F path=…durch -F euid=0 -F 'uid!=0'oder so etwas ersetzen . Ich kann nicht einen Haken in sehe den setxid Code durch aufgerufenexecve , noch eine bestimmte setxid Uhr im Audit - Subsystem . Natürlich können Sie auch jeden einzelnen execveVorgang nachbearbeiten.
Gilles 'SO- hör auf böse zu sein'
Interessant. Noch nie davon gehört. Ich frage mich, wie weit verbreitet es ist. Debian popcon hat keinen Eintrag für auditd.
Faheem Mitha
findBefehl zum Auflisten aller SUID-Dateien:find / -xdev \( -perm -4000 \) -type f -print
1
@FaheemMitha Es hat einen Popcon-Eintrag: qa.debian.org/popcon-graph.php?packages=auditd
jofel