Ist es möglich, einen Prozess vor der Auflistung von "ps" oder "top" unter Linux zu "verstecken"

16818
warren

Zunächst gehe ich davon aus, dass dies, wenn dies möglich ist, als Root (oder als Benutzer, der die Root-UID von 0 verwendet) ausgeführt werden muss.

Wie kann ein Prozess gestartet werden, damit er nicht in einer Liste ps auxoder ps efoder einer topListe angezeigt wird, wenn der Befehl von Nicht-Root ausgeführt wird?

Ist das überhaupt möglich?

Die Distributionen, die ich normalerweise betreibe, sind RHEL / CentOS und Ubuntu. Wenn es also eine distrospezifische Antwort gibt, ist das auch in Ordnung.

9
Warren: Schon mal eine Lösung dafür gefunden? Chris vor 13 Jahren 0
@ Chris - nope ... @ fianchettos Antwort scheint der einzige Weg zu sein, und das ist viel mehr Arbeit, als ich es mir bequem mache: - | warren vor 13 Jahren 0
Ich werde dieses Projekt durchführen und werde mit allem berichten, was ich bestimme. Chris vor 13 Jahren 0

3 Antworten auf die Frage

12
uha

Gemäß dem Kernel-Patch http://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/?id=0499680a42141d86417a8fbaa8c8db806bea1201 können Sie die Option hidepid für das proc-Dateisystem verwenden:

hidepid = 0 (Standard) bedeutet das alte Verhalten. Jeder kann alle weltweit lesbaren / proc / PID / * -Dateien lesen.

hidepid = 1 bedeutet, dass Benutzer nicht auf // Verzeichnisse / proc zugreifen dürfen, sondern nur auf ihre eigenen. Vertrauliche Dateien wie cmdline, sched * und status sind jetzt vor anderen Benutzern geschützt. Da die Berechtigungsprüfung in proc_pid_permission () und die Berechtigungen der Dateien unberührt bleiben, werden Programme, die bestimmte Dateimodi erwarten, nicht verwirrt.

hidepid = 2 bedeutet hidepid = 1 und alle / proc / PID / sind für andere Benutzer nicht sichtbar. Das bedeutet nicht, dass es verbirgt, ob ein Prozess existiert (er kann auf andere Weise erlernt werden, z. B. durch kill -0 $ PID), er verbirgt jedoch die euid und egid des Prozesses. Es erzwingt die Aufgabe des Eindringlings, Informationen über laufende Prozesse zu sammeln, ob ein Daemon mit erhöhten Berechtigungen ausgeführt wird, ob ein anderer Benutzer ein sensibles Programm ausführt, ob andere Benutzer überhaupt ein Programm ausführen usw.

gid = XXX definiert eine Gruppe, die Informationen zu allen Prozessen sammeln kann (wie im Modus hidepid = 0). Diese Gruppe sollte verwendet werden, anstatt Nichtstammbenutzer in sudoers-Datei oder etwas anderem zu platzieren. Nicht vertrauenswürdige Benutzer (wie Daemons usw.), die die Aufgaben im gesamten System nicht überwachen sollen, sollten jedoch nicht zur Gruppe hinzugefügt werden.

Sie können die Sichtbarkeit auf Prozessebene nicht steuern. Sie können jedoch sicherstellen, dass Ihre Benutzer nur ihre eigenen Prozesse sehen können.

Falls Sie eine Kernel-Version größer als 3.3 haben, können Sie es mit dem folgenden Befehl versuchen:

  mount /proc -o remount,hidepid=2 

Können Sie die Funktion `hidepid = 2` einschränken, sodass nur bestimmte Benutzer betroffen sind (oder bestimmte Benutzer auf die Whitelists gesetzt werden)? Shule vor 8 Jahren 0
Funktioniert super! Mein Problem war, dass ich mit einem cron-Skript eine Verbindung zu einem Server herstelle und jeder Benutzer die Berechtigungsnachweise mit "htop" (z. B.) anzeigen konnte. Bei der Einstellung "hidepid = 2" können Benutzer keine Prozesse sehen, die von anderen Benutzern gestartet wurden. Daraufhin habe ich gesucht. Warum ist nicht standardmäßig eingestellt? lepe vor 8 Jahren 0
@lepe wahrscheinlich aus alten Gründen. Bricht dies und das und kann deshalb (noch) nicht überall verwendet werden. Dodekeract vor 7 Jahren 0
OP bat darum, dass die PID insgesamt nicht sichtbar ist, nicht nur für andere Benutzer ...? Blauhirn vor 7 Jahren 0
Gibt es eine Möglichkeit, nur von bestimmten Benutzern erstellte Prozesse auszublenden? z.B. "root"? Avery235 vor 6 Jahren 0
5
fianchetto

Nun, Sie haben hier ein paar Möglichkeiten. Der einfachste Ausweg wäre, die PS- und Top-Programme mit modifizierten Versionen auszutauschen, die das verbergen, was Sie verstecken möchten.

Die Alternative wäre, Ihren Code in einen vorhandenen Prozess einzufügen oder ein Wrapper-Skript mit einem harmlosen Namen um den Code zu schreiben.

In einigen Versionen von PS können Sie es ändern, indem Sie argv [] ändern. Sie sind sich jedoch nicht sicher, ob dies für top funktioniert, und nicht, ob es unter Linux funktioniert (es handelt sich hauptsächlich um eine BSD-Konvention).

Es hängt alles davon ab, was genau Sie damit erreichen wollen?

Mein Ziel hier ist, dass Prozesse, die von root erzeugt werden, nicht für alle Benutzer sichtbar sind (möglicherweise Sicherheits-Daemons oder ähnliches). warren vor 14 Jahren 0
@flanchetto Also, sagen Sie, wenn ich ein Programm habe, das bereits läuft und es später einen Befehlszeilenbefehl mit einem Kennwort ausführt, in dem derselbe Vorgang ausgeführt wird, dass das Kennwort sicher vergeben wird? Führen Sie zB `python myScript.py` aus, und alle` subprocess.Popen'-Befehle (die möglicherweise Kennwörter enthalten können) werden nicht angezeigt, solange es sich um denselben Prozess handelt. Shule vor 8 Jahren 0
Wie auch immer, das funktioniert nicht (ich habe es gerade ausprobiert und das Passwort gesehen). Ich gehe also davon aus, dass Sie etwas anderes meinen. Fühlen Sie sich frei zu klären. :) Shule vor 8 Jahren 0
-2
JamesD

Verwenden Sie den Befehl F in top und n, um beispielsweise das zu konfigurieren, was Sie sehen möchten. Verwenden Sie den W-Befehl, um die gewünschte Konfiguration für ~ / .toprc - use zu schreiben. um die obersten Befehle zu sehen. Dies kann Ihr Problem schnell lösen - es hat für mich getan. Mit F kann ich die Felder hinzufügen / entfernen, die ich sehen möchte, während in f die Sortierung mit s festgelegt werden kann, dann q, um zur Anzeige zurückzukehren. dann n, um festzulegen, wie viele Prozesse ich sehen möchte, und W in .toprc speichern

Das verbirgt meiner Meinung nach nur etwas warren vor 7 Jahren 0