Unter Linux möchte ich die ausführbaren Dateien verfolgen, die in meinem Namen ausgeführt werden, einschließlich der gesamten Befehlszeile (in der Praxis wird jeder exec * () als mein eigener Benutzer ausgeführt). Ein Programm, das ich nicht kontrolliere, soll, um eine Aufgabe zu erledigen, das Programm ausführen, das ich übergebe, aber ich möchte sicherstellen, dass es dies tut und welche Optionen es verwendet. Das Programm, das ich nicht kontrolliere, ist hinterhältig und scheint das Verhalten abhängig vom Namen des Programms zu ändern, das es für die Aufgabe ausführen soll. Daher kann ich kein Shell-Skript übergeben, das die Informationen protokolliert und das Real aufruft Programm.
Kann ich über alle Exec * () informiert werden, die als mein Benutzer auf dem System unter Linux ausgeführt wurden, einschließlich der vollständigen Befehlszeile? Das heißt, es läuft nicht ps
in einer Schleife. Ich mache es lieber direkt auf dem System, auf dem ich arbeite und keinen Root-Zugriff benötige, aber wenn nötig, kann ich ein System erzeugen, auf dem ich Root-Zugriff habe, die Programme installieren und dort nachforschen.
Verwenden von Ubuntu 12.4 LTS.
quelle
audit
gibt, aber eine 'ganze Befehlszeile' in der Shell kann sich auch auf den untergeordneten Prozess auswirken, indem Umleitungs- / Piping- und envvar-Einstellungen verwendet werden und Substitutionen / Erweiterungen sowie nicht signifikante Anführungszeichen enthalten und Abstand und Kontrollstrukturen wiedoa && dob
, und Sie werden diese nicht bekommen.Antworten:
Sie müssen konfigurieren
auditd
, umexecve
Ereignisse aufzuzeichnen . Beispiel für RHEL5:Ich ignoriere die Bogenwarnung und es scheint keine Rolle zu spielen, aber Sie können sie verwenden
-F arch=b64
oder-F arch=b32
einstellen, wenn Sie möchten.Das Ergebnis des oben Gesagten ist:
Das ist natürlich schnell und schmutzig, aber das sind die Grundlagen dafür, wie Sie es tun. Was Sie genau tun müssen, hängt wahrscheinlich stark davon ab, was Sie genau tun möchten. Sie können den Überwachungsfluss mithilfe verschiedener Filter im
auditctl
Befehl reduzieren, aber ich kenne keine dieser Informationen, sodass ich nicht weiß, was ich einschließen soll. Wenn Sie etwas Spezifischeres benötigen, empfehlen wir Ihnen, entweder die Manpage zu überprüfen oder einen Kommentar zu dieser Antwort zu schreiben, und ich werde sie weiter aktualisieren.Ich hoffe, das hilft Ihnen, in die richtige Richtung zu gehen.
BEARBEITEN:
Da Ihre Frage die Betrachtung eines bestimmten Benutzers beinhaltet, kann ich Ihnen Folgendes zeigen:
Identisch mit den oben genannten, aber nur
execve
von jemandem, der mit der effektiven Benutzer-ID von ausgeführt16777216
wird, wird protokolliert. Wenn Sie denloginuid
Wert des Benutzers angeben müssen (als den er sich ursprünglich am System angemeldet hat), filtern Sieauid
stattdessen nach:AUID / loginuid-Filter wären beispielsweise nützlich, wenn der Benutzer ein
su
oder einsudo
Root- Verfahren ausführt . In dieser Situation werden viele Dinge als root ausgeführt, aber Sie befassen sich nur mit den Dingen, die vom betreffenden Benutzer gestartet wurden.auditctl
Außerdem können Sie Filter stapeln, sodass Sie nach beiden filtern könneneuid
undauid
:quelle
Sie haben etwas Einfaches gefragt. Ich habe ein Beispiel mit gemacht,
mplayer
aber ich denke, es kann an andere Situationen angepasst werden:Wie Sie sehen, ist dies sehr einfach: Es analysiert das erste Argument, da es sich um eine Datei handelt, wird ein Protokoll in die zentrale Datei erstellt
$LOG
und zu einer Datei verkettet (die immer denselben Namenmplayer.log
im selben Verzeichnis hat.So kann der Benutzer den neuesten Film erhalten, den er in jedem Verzeichnis gelesen hat.
quelle