Kann ein Prozess einen Eigentümer haben? Was bedeutet es?

9

Mit dem psBefehl können wir den Eigentümer eines Prozesses ermitteln . Bedeutet dies, dass andere Benutzer diesen Prozess nicht ausführen / beenden / fortsetzen können?

Naga Venkatesh Gavini
quelle

Antworten:

18

Anmeldeinformationen lesen (7) , Gabelung (2) , ausführen (2) . Der Fork-Systemaufruf ist die Art und Weise, wie Prozesse erstellt werden (wird heute forkhäufig mit Klon (2) implementiert, aber Sie können dies als Implementierungsdetail sehen). Der Systemaufruf exec ist die Art und Weise, wie ausführbare Programme gestartet werden. Denken Sie daran, dass alles von einem Prozess mit einigen Systemaufrufen erledigt wird (aufgeführt in syscalls (2) ). Der allererste Prozess ( init oder systemd ) wurde vom Kernel beim Booten auf magische Weise gestartet. Andere Prozesse wurden von fork (2) gestartet. Moderne Linux - Kernel manchmal - aber selten - beginnt magisch einige speziellen Verfahren ( zum Beispiel /sbin/hotplug) oder Kernel - Threads (zB kworker, kswapd....).

Also ja, jeder Prozess (und jede Datei) hat einen Eigentümer (technisch die UID , eine kleine nicht negative Zahl) und eine Gruppe (die GID). Die 0-UID ist für root und verfügt über zusätzliche Berechtigungen.

Lesen Sie auch über setuid (und setreuid (2) ...). Es ist schwierig.

Bedeutet dies, dass der andere Eigentümer diesen Prozess nicht ausführen kann?

Ein Prozess wird bereits ausgeführt (er kann jedoch inaktiv sein oder warten), sodass niemand ihn erneut ausführen kann. Verwechseln Sie einen Prozess (etwas Dynamisches) nicht mit dem darin ausgeführten Programm (einer ausführbaren Datei , häufig im ELF- Format).

Ein bestimmtes Programm (z. B. /bin/bash) kann in mehreren Prozessen ausgeführt werden. Viele ausführbare Dateien verbleiben auf Ihrer Festplatte, ohne dass (zu einem bestimmten Zeitpunkt) Prozesse ausgeführt werden.

Unter Linux ist proc (5) sehr nützlich, um den Kernel nach dem Status von Prozessen abzufragen. Versuchen Sie es mit Beispielen cat /proc/$$/statusund cat /proc/self/maps. Siehe auch pgrep (1) , ps (1) , top (1) .

Jeder Prozess verfügt über einen eigenen virtuellen Adressraum , eine eigene Dateideskriptortabelle , ein eigenes Arbeitsverzeichnis (und häufig mehrere Threads , siehe pthreads (7) ) usw. usw.

Bedeutet dies, dass andere Eigentümer diesen Prozess nicht ausführen / töten / fortsetzen können?

Das Ausführen eines Prozesses macht keinen Sinn (er wird bereits ausgeführt). Die ausführbare Datei des Prozesses von pid 1234 ist jedoch als /proc/1234/exeSymlink verfügbar , und Sie können diese für execve (2) verwenden - sollten dies aber wahrscheinlich nicht -. Es gelten die Berechtigungsregeln für execve.

Um (2) einen Prozess zu beenden, sollten Sie im Allgemeinen dieselbe UID haben. In der Dokumentation heißt es jedoch:

  For a process to have permission to send a signal, it must either be
   privileged (under Linux: have the CAP_KILL capability in the user
   namespace of the target process), or the real or effective user ID of
   the sending process must equal the real or saved set-user-ID of the
   target process.  In the case of SIGCONT, it suffices when the sending
   and receiving processes belong to the same session. 

Verwenden Sie das mit kill (2) verwendete Signal (oder ), um einen Prozess zu stoppen . Siehe Signal (7) .SIGSTOPSIGTSTP

Um wieder einen gestoppten Prozess, verwenden Sie das SIGCONTSignal.

Basile Starynkevitch
quelle
4

Der Eigentümer ist normalerweise der Benutzer, der diesen Prozess gestartet hat. Der Befehl kann möglicherweise von anderen Benutzern ausgeführt werden, dies wäre jedoch ein anderer Prozess.

Bedeutet dies, dass der andere Eigentümer diesen Prozess nicht ausführen kann?

Es gibt keinen anderen Besitzer. Verwechseln Sie keine Programme (ausführbare Dateien) und Prozesse (laufende Programme).

Bedeutet dies, dass andere Eigentümer diesen Prozess nicht ausführen / töten / fortsetzen können?

Der einzelne Eigentümer hat den Prozess bereits gestartet. Wenn Sie andere Benutzer meinen , nicht Eigentümer, hängt das davon ab.

Root, dh ein Benutzer mit uid0, hat die volle Leistung. Andere Benutzer, die dasselbe verwenden, uidsind aus Sicht des Betriebssystems derselbe Benutzer. Sie haben also auch die volle Leistung des Prozesses.

Benutzer mit einer anderen UID können den Prozess nicht beenden / stoppen / fortsetzen, es sei denn, sie dürfen über einen sudoähnlichen Befehl oder in geringerem Umfang zum Eigentümer oder zum Root-Privileg wechseln oder in geringerem Maße zu diesem Prozess aus ihrer Hierarchie.

jlliagre
quelle