GNU/Linux >> Znalost Linux >  >> Linux

Může mít proces vlastníka? Co to znamená?

Přečtěte si pověření (7), fork (2), execve (2). Systémové volání fork je způsob vytváření procesů (dnes fork je často implementován pomocí clone(2), ale můžete to vidět jako detail implementace). Systémové volání exec je způsob, jakým se spouštějí spustitelné programy. Pamatujte, že vše se děje z nějakého procesu s nějakými systémovými voláními (uvedenými v syscalls(2)). Úplně první proces (init nebo systemd) byl magicky spuštěn jádrem při bootu. Další procesy byly spuštěny pomocí fork(2). Moderní linuxová jádra někdy – ale zřídka – spustí magicky několik speciálních procesů (např. /sbin/hotplug ) nebo vlákna jádra (např. kworker , kswapd ....).

Takže ano, každý proces (a každý soubor) má nějakého vlastníka (technicky uid, malé nezáporné číslo) a skupinu (gid). 0 uid je pro root a má další oprávnění.

Přečtěte si také o setuid (a setreuid(2)...) Je to složité.

znamená to, že druhý vlastník nemůže tento proces spustit?

Proces je již běží (ale může být nečinný nebo čekající), takže jej nikdo nemůže spustit znovu. Nezaměňujte proces (něco dynamického) s programem (spustitelný soubor, často ve formátu ELF), který v něm běží.

Daný program (např. /bin/bash ) lze spustit v několika procesy. Mnoho spustitelných souborů zůstává na vašem disku, aniž by na nich (v daném okamžiku) běžely nějaké procesy.

V Linuxu je proc(5) velmi užitečný pro dotazování jádra na stav procesů. Zkuste příklady cat /proc/$$/status a cat /proc/self/maps . Viz také pgrep(1), ps(1), top(1).

Každý proces má svůj vlastní virtuální adresní prostor, svou vlastní tabulku deskriptorů souborů, svůj vlastní pracovní adresář (a často několik vláken, viz pthreads(7)) atd atd...

znamená to, že ostatní vlastníci nemohou tento proces spustit/zabít/obnovit?

Spuštění procesu nedává žádný smysl (je to již běh). Spustitelný soubor procesu pid 1234 je však dostupný jako /proc/1234/exe symbolický odkaz a můžete jej použít pro execve(2) - ale pravděpodobně byste neměli -. Pravidla oprávnění pro execve platí.

Chcete-li zabít(2) proces, obecně byste měli mít stejné uid. Dokumentace však říká:

  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. 

Chcete-li zastavit proces, použijte SIGSTOP (nebo SIGTSTP ) signál použitý s kill(2). Viz signál(7).

Chcete-li obnovit zastavený proces, použijte SIGCONT signál.


Vlastníkem je obvykle uživatel, který tento proces spustil. Příkaz může být spustitelný jinými uživateli, ale to by byl jiný proces.

znamená to, že druhý vlastník nemůže tento proces spustit?

Jiný vlastník neexistuje. Nepleťte si programy (spustitelné soubory) a procesy (spuštěné programy).

Znamená to, že ostatní vlastníci nemohou tento proces spustit/ukončit/obnovit?

Jediný vlastník již proces zahájil. Pokud máte na mysli ostatní uživatele , nikoli vlastníky, to záleží.

Root, tj. uživatel s uid rovná 0, má plný výkon. Ostatní uživatelé sdílejí totéž uid jsou z pohledu operačního systému stejným uživatelem, takže máte také plnou moc na proces.

Uživatelé s jiným uid nebudou moci proces ukončit/zastavit/obnovit, pokud jim není povoleno přejít na oprávnění vlastníka nebo root prostřednictvím sudo nebo podobný příkaz, nebo v menší míře, pokud se vztahují k tomuto procesu z jejich hierarchie.


Linux
  1. Co znamená ve výstupu Ps?

  2. Co znamená „rm is hash“?

  3. Co se stane, když [[ $? -ne 0]]; znamená v .ksh

  1. Co to znamená #define X X?

  2. Co dělat, když Ctrl + C nemůže zabít proces?

  3. Co znamená zabít -3?

  1. Může někdo podrobně vysvětlit, co dělá set -m?

  2. jaké zabijáky procesů má linux?

  3. Co znamená schopnost ep?