Wie können Sie einen Prozess starten und ihn für den top
Befehl unsichtbar machen ? Der Prozess wird von einem normalen Benutzer (nicht root) gestartet und sollte für andere normale Benutzer nicht sichtbar sein.
Wie können Sie einen Prozess starten und ihn für den top
Befehl unsichtbar machen ? Der Prozess wird von einem normalen Benutzer (nicht root) gestartet und sollte für andere normale Benutzer nicht sichtbar sein.
Antworten:
Der Linux-Kernel seit 3.3 unterstützt das Ausblenden von Prozessen für andere Benutzer.
Dies geschieht mit hidepid=
und gid=
mount options für / proc, wie in der entsprechenden commit- und Documentation / filesystems / proc.txt beschrieben .
Debian Wheezy enthält auch diese Funktion.
Der top
Befehl liest die Daten aus proc, die direkt vom Kernel bereitgestellt werden. Um Prozesse auszublenden, müssen Sie Code im Kernel verwenden, um die Maskierung durchzuführen.
Abgesehen von der Verwendung eines Sicherheitsframeworks wie SELinux und grsecurity (wie in den anderen Antworten erwähnt) ist der Code im Rootkit-Stil Ihre einzige verbleibende Option. Ich sage "style", weil ein "Rootkit" an sich nicht schlecht ist, sondern wie es verwendet wird. Es gibt durchaus berechtigte Gründe, Prozesse vor anderen Benutzern zu verbergen, weshalb diese Funktion in Sicherheitsframeworks vorhanden ist.
Der grundlegende Weg, den Sie gehen müssen, um dies zum Laufen zu bringen, besteht darin, sich in die Funktion (en) im Linux-Kernel einzuklinken (oder sie zu hijacken, je nachdem, wie Sie sie betrachten), die die /proc/pid/
Daten verteilen . Ich demonstriere eine Methode zum Einbinden in Linux-Kernelfunktionen in einem Sicherheitsmodul, das ich geschrieben habe:
https://github.com/cormander/tpe-lkm
Der "High-Level" -Code dafür befindet sich in der hijack_syscalls()
Methode in security.c
, und die Detailmagie dahinter befindet sich in der hijacks.c
Datei.
Sie finden die gewünschten Funktionen wahrscheinlich im fs/proc/
Verzeichnis des Quellcodes des Linux-Kernels. Denken Sie daran, dass Linux kein stabiles ABI bietet. Daher muss sich Ihr Code etwas ändern, damit er in verschiedenen Versionen des Linux-Kernels funktioniert. Denken Sie auch daran, dass Sie vollständigen Root-Zugriff auf den Computer benötigen, um diesen Code einfügen zu können.
AKTUALISIEREN:
Wenn Sie das pid_getattr
Kernel-Symbol mit zusätzlichem Code umschließen, ist dies ganz einfach. Ich habe kürzlich etwas hinzugefügt, das Prozesse im obigen Kernel-Modul verbirgt:
https://github.com/cormander/tpe-lkm/commit/899bd5d74764af343d5fee1d8058756ddc63bfe3
Sie könnten etwas Ähnliches tun, indem Sie die Prozesse eines bestimmten Benutzers oder einer bestimmten Gruppe für niemanden außer root und diesem Benutzer sichtbar machen. Es ist etwas komplexer, es nach Prozessnamen zu tun, aber möglich. Schauen Sie sich die exe_from_mm()
Funktion an. Beachten Sie, dass die Verwendung innerhalb von möglicherweise Auswirkungen auf die Leistung hat pid_getattr
.
Es scheint die beiden Hauptoptionen.
Selinux arbeitet, indem es verschiedene Leute in verschiedene Sicherheitsdomänen einsetzt und sie in gewisser Weise mit Sandboxen versieht, damit sie nicht die anderen sehen können. Dies wird in dieser Frage behandelt . Da sich Selinux schnell zum De-facto-Sicherheits-Framework in der Linux-Welt entwickelt, ist dies wahrscheinlich die Richtung, in die Sie schauen sollten.
Das andere ist die von Marioosh erwähnte und in dieser Frage gestellte Unsicherheit . In einigen Distributionen gibt es alternative Kernelpakete mit Grsecurity-Patches. Wenn dies bei Ihnen der Fall ist, können Sie die Verwendung prüfen.
Wenn Sie dies aus irgendeinem Grund ohne das Hinzufügen eines Sicherheitsframeworks wie selinux oder grsecurity tun möchten, erklären Sie bitte, warum Sie kein Root-Kit schreiben.
Es ist nicht so einfach auf Standard-Linux-Box. Schau dir die Sicherheit an , aber es erfordert das Patchen des Kernels usw.
Sie könnten Ihr argv [0] mit einem anderen Namen überschreiben ... aber genau genommen suchen Sie nach einer Art Rootkit. Dies kann Ihnen helfen: http://stupefydeveloper.blogspot.com/2008/10/linux-change-process-name.html
Sie können einen entsprechenden Befehl schreiben, der genauso funktioniert top
, aber keine Prozesse anzeigt, die mit einem bestimmten Namen übereinstimmen. Alternativ können Sie den Quellcode des top
Befehls abrufen und entsprechend ändern. Sie können dann den top
Befehl in /usr/sbin
(oder wo immer er ist) durch Ihre Version ersetzen .
top
Befehl unsichtbar gemacht werden sollen .
this_is_not_the_process_you_are_looking_for
?