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

10

Zunächst gehe ich davon aus, dass dies, wenn dies möglich ist, als root (oder als Benutzer, der die UID von root von 0 teilt) erfolgen muss.

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

Ist das überhaupt möglich?

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

Labyrinth
quelle
warren: Hast du jemals eine Lösung dafür gefunden?
Chris
@Chris - nein ... @ fianchettos Antwort scheint der einzige Weg zu sein, und das ist viel mehr Arbeit, als ich gerne unternehme: - |
Warren
Ich werde dieses Projekt durchführen und mit allem, was ich feststelle, darüber berichten.
Chris

Antworten:

5

Hier haben Sie einige Möglichkeiten. Der einfache Ausweg wäre, die ps- und top-Programme gegen modifizierte Versionen auszutauschen, die verbergen, was Sie verbergen möchten.

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

In einigen PS-Versionen können Sie es ändern, indem Sie argv [] ändern. Sie sind sich jedoch nicht sicher, ob dies für top funktioniert und 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 möchten.

Verlobter
quelle
Mein Ziel hier ist es, dass Prozesse, die von root erzeugt werden, nicht für alle Benutzer sichtbar sind (möglicherweise sicherheitsrelevante Daemons oder ähnliches)
Warren
@flanchetto Wollen Sie damit sagen, ob ich ein Programm habe, das bereits ausgeführt wird und später einen Befehlszeilenbefehl mit einem Kennwort ausführt, und zwar in demselben Prozess, in dem das Kennwort sicher vergeben wird? zB run python myScript.pyund alle subprocess.PopenBefehle (die Passwörter enthalten können oder nicht) werden nicht angezeigt, solange es sich um denselben Vorgang handelt?
Brōtsyorfuzthrāx
Wie auch immer, das funktioniert nicht (ich habe es gerade versucht und das Passwort gesehen). Ich gehe also davon aus, dass Sie etwas anderes meinen. Fühlen Sie sich frei zu klären. :)
Brōtsyorfuzthrāx
13

Laut 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 möglicherweise nicht auf / proc // -Verzeichnisse zugreifen, sondern auf ihre eigenen. Vertrauliche Dateien wie cmdline, sched * und status sind jetzt vor anderen Benutzern geschützt. Da die in proc_pid_permission () durchgeführten Berechtigungsprüfungen und die Berechtigungen der Dateien unberührt bleiben, werden Programme, die die Modi bestimmter Dateien erwarten, nicht verwechselt.

hidepid = 2 bedeutet hidepid = 1 plus alle / proc / PID / sind für andere Benutzer unsichtbar. Es bedeutet nicht, dass es verbirgt, ob ein Prozess existiert (es kann auf andere Weise gelernt werden, z. B. durch töten von -0 $ PID), aber es verbirgt Prozess-euid und egid. Es erschwert die Aufgabe des Eindringlings, Informationen über laufende Prozesse zu sammeln, ob ein Dämon mit erhöhten Berechtigungen ausgeführt wird, ob ein anderer Benutzer ein vertrauliches Programm ausführt, ob andere Benutzer überhaupt ein Programm ausführen usw.

gid = XXX definiert eine Gruppe, die alle Prozessinformationen erfassen kann (wie im Modus hidepid = 0). Diese Gruppe sollte verwendet werden, anstatt Nicht-Root-Benutzer in die Sudoers-Datei oder so etwas zu setzen. Nicht vertrauenswürdige Benutzer (wie Dämonen 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, aber Sie können sicherstellen, dass Ihre Benutzer nur ihre eigenen Prozesse sehen können.

Wenn Sie eine Kernelversion größer als 3.3 haben, können Sie es mit dem folgenden Befehl versuchen:

 
mount /proc -o remount,hidepid=2

uha
quelle
Können Sie das hidepid=2Ding so einschränken , dass es nur bestimmte Benutzer betrifft (oder bestimmte Benutzer auf die Whitelist setzt)?
Brōtsyorfuzthrāx
Funktioniert super! Mein Problem war, dass ich über ein Cron-Skript eine Verbindung zu einem Server herstelle und jeder Benutzer die Anmeldeinformationen beispielsweise mit "htop" anzeigen konnte. Bei der Einstellung "hidepid = 2" können Benutzer keine Prozesse sehen, die von anderen Benutzern gestartet wurden, wonach ich gesucht habe. Warum ist nicht standardmäßig eingestellt?
Lepe
@lepe wahrscheinlich aus alten Gründen. Würde dies und das brechen und kann daher (noch) nicht überall eingesetzt werden.
Florian Wendelborn
OP hat darum gebeten, dass die PID insgesamt unsichtbar ist, nicht nur für andere Benutzer ...?
Phil294
Gibt es eine Möglichkeit, Prozesse auszublenden, die nur von bestimmten Benutzern erstellt wurden? z.B. root?
Avery235
-2

Verwenden Sie den Befehl F in top und den Befehl n, um beispielsweise zu konfigurieren, was Sie sehen möchten. Verwenden Sie den Befehl W, um die Konfiguration zu schreiben, die Sie möchten ~ / .toprc - verwenden? 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 ich in f s verwenden kann, um die Sortierung festzulegen, und dann q, um zur Anzeige zurückzukehren. dann n, um festzulegen, wie viele Prozesse ich sehen möchte, und W, um sie in .toprc zu speichern

JamesD
quelle
Das verbirgt meiner Ansicht nach nur etwas
Warren