GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kann ein Prozess einen Besitzer haben? Was bedeutet das?

Anmeldedaten lesen(7), fork(2), execve(2). Der Fork-Systemaufruf ist die Art und Weise, wie Prozesse erstellt werden (heute fork wird oft mit clone(2) implementiert, aber Sie können das als Implementierungsdetail sehen). Der Systemaufruf exec ist die Art und Weise, wie ausführbare Programme gestartet werden. Denken Sie daran, dass alles von irgendeinem Prozess mit einigen Systemaufrufen (aufgelistet in syscalls(2)) erledigt wird. 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 starten manchmal - aber selten - auf magische Weise ein paar spezielle Prozesse (z. B. /sbin/hotplug ) oder Kernel-Threads (z. B. kworker , kswapd ....).

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

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

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

Ein Prozess ist bereits ausgeführt (aber es könnte im Leerlauf sein oder warten), sodass niemand es erneut ausführen kann. Verwechseln Sie einen Prozess (etwas Dynamisches) nicht mit dem darin laufenden Programm (eine ausführbare Datei, oft im ELF-Format).

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

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

Jeder Prozess hat seinen eigenen virtuellen Adressraum, seine eigene Dateideskriptortabelle, sein eigenes Arbeitsverzeichnis (und oft mehrere Threads, siehe pthreads(7)) etc etc...

Bedeutet das, dass andere Eigentümer diesen Prozess nicht ausführen/beenden/fortsetzen können?

Das Ausführen eines Prozesses macht keinen Sinn (es ist bereits laufend). Die ausführbare Datei des Prozesses von PID 1234 ist jedoch als /proc/1234/exe verfügbar Symlink, und Sie könnten das für execve(2) verwenden - aber Sie sollten wahrscheinlich nicht -. Die Berechtigungsregeln für execve gilt.

Um einen Prozess zu beenden(2), sollten Sie im Allgemeinen dieselbe UID haben. Die Dokumentation sagt 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. 

Zum Stoppen einen Prozess, verwenden Sie den SIGSTOP (oder SIGTSTP )-Signal, das mit kill(2) verwendet wird. Siehe Signal(7).

Zum Fortsetzen einen angehaltenen Prozess, verwenden Sie den SIGCONT Signal.


Der Eigentümer ist normalerweise der Benutzer, der diesen Prozess gestartet hat. Der Befehl könnte von anderen Benutzern ausgeführt werden, aber das wäre ein anderer Prozess.

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

Es gibt keinen anderen Eigentümer. Verwechseln Sie nicht Programme (ausführbare Dateien) und Prozesse (laufende Programme).

Bedeutet das, dass andere Besitzer diesen Prozess nicht ausführen/beenden/fortsetzen können?

Der Alleineigentümer hat das Verfahren bereits eingeleitet. Wenn Sie andere Benutzer meinen , nicht Besitzer, das kommt darauf an.

Root, also ein Benutzer mit uid gleich 0, hat volle Leistung. Andere Benutzer teilen denselben uid sind aus der Sicht des Betriebssystems derselbe Benutzer, haben also auch die volle Kontrolle über den Prozess.

Benutzer mit einer anderen UID können den Prozess nicht beenden/stoppen/fortsetzen, es sei denn, sie dürfen durch sudo entweder zum Besitzer- oder zum Root-Privileg wechseln oder ähnlichen Befehl oder, in geringerem Maße, wenn sie von ihrer Hierarchie her mit diesem Prozess verwandt sind.


Linux
  1. Was bedeutet diese Warnung?

  2. Was bedeutet #define X X?

  3. Was tun, wenn Strg + C einen Prozess nicht beenden kann?

  4. Was bedeutet kill-3?

  5. Was bedeutet \b in einem Grep-Muster?

Was bedeutet chmod 777

Was bedeutet „–“ (Doppelstrich)?

Was bedeutet es, „sh-kompatibel“ zu sein?

Was zeigt diese Prozessstatistik an?

Keine X11-DISPLAY-Variable - was bedeutet das?

Was bedeutet %st oben?