Czy proces może mieć właściciela? Co to znaczy?

9

Możemy określić właściciela procesu za pomocą pspolecenia. Czy to oznacza, że ​​inni użytkownicy nie mogą uruchomić / zabić / wznowić tego procesu?

Naga Venkatesh Gavini
źródło

Odpowiedzi:

18

Czytaj referencje (7) , fork (2) , execve (2) . Wywołanie systemowe widelec jest sposób procesy są tworzone (dziś forkjest często realizowane z klonu (2), ale widać, że jako szczegółach implementacji). Exec wywołania systemowego jest droga wykonywalne programy są uruchamiane. Pamiętaj, że wszystko odbywa się na podstawie niektórych procesów za pomocą niektórych wywołań systemowych (wymienionych w syscalls (2) ). Pierwszy proces ( init lub systemd ) został magicznie uruchomiony przez jądro w czasie uruchamiania systemu. Inne procesy zostały uruchomione przez fork (2). Nowoczesne jądra Linux czasami - ale rzadko - start magicznie kilka procesów specjalnych (np /sbin/hotplug) lub wątki jądra (np kworker, kswapd....).

Tak więc, każdy proces (i każdy plik) ma jakiegoś właściciela (technicznie UID , małą liczbę nieujemną) i grupę (GID). Uid 0 jest dla roota i ma dodatkowe uprawnienia.

Przeczytaj także o setuid (i setreuid (2) ...) To trudne.

czy to oznacza, że ​​drugi właściciel nie może uruchomić tego procesu?

Proces już działa (ale może być bezczynny lub czeka), więc nikt nie będzie mógł go uruchomić ponownie. Nie myl procesu (czegoś dynamicznego) z działającym w nim programem ( plikiem wykonywalnym , często w formacie ELF ).

Dany program (np. /bin/bash) Można wykonać w kilku procesach. Wiele plików wykonywalnych pozostaje na dysku bez (w danym momencie) jakichkolwiek procesów je uruchamiających.

W Linuksie proc (5) jest bardzo przydatny do zapytania jądra o stan procesów. Spróbuj przykładów cat /proc/$$/statusi cat /proc/self/maps. Zobacz także pgrep (1) , ps (1) , top (1) .

Każdy proces ma własną wirtualną przestrzeń adresową , własną tabelę deskryptorów plików , własny katalog roboczy (i często kilka wątków , patrz pthreads (7) ) itp. Itd.

czy to oznacza, że ​​inni właściciele nie mogą uruchomić / zabić / wznowić tego procesu?

Uruchomienie procesu nie ma sensu ( już działa). Jednak plik wykonywalny procesu pid 1234 jest dostępny jako /proc/1234/exedowiązanie symboliczne i możesz go użyć do execve (2) - ale prawdopodobnie nie powinieneś -. Obowiązują zasady dotyczące uprawnień execve.

Aby zabić (2) proces, zazwyczaj powinieneś mieć ten sam identyfikator użytkownika. Jednak dokumentacja mówi:

  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. 

Aby zatrzymać proces, użyj sygnału SIGSTOP(lub SIGTSTP) używanego z funkcją kill (2) . Zobacz sygnał (7) .

Aby wznowić zatrzymany proces, użyj SIGCONTsygnału.

Basile Starynkevitch
źródło
4

Właściciel jest zwykle użytkownikiem, który uruchomił ten proces. Polecenie może być wykonywane przez innych użytkowników, ale byłby to inny proces.

czy to oznacza, że ​​drugi właściciel nie może uruchomić tego procesu?

Nie ma innego właściciela. Nie należy mylić programów (plików wykonywalnych) i procesów (uruchomionych programów).

Czy to oznacza, że ​​inni właściciele nie mogą uruchomić / zabić / wznowić tego procesu?

Pojedynczy właściciel już rozpoczął proces. Jeśli masz na myśli innych użytkowników , a nie właścicieli, to zależy.

Root, czyli użytkownik o wartości uid0, ma pełną moc. Inni użytkownicy, którzy dzielą to samo, uidsą z punktu widzenia systemu operacyjnego tym samym użytkownikiem, więc też mają pełną moc w tym procesie.

Użytkownicy z innym identyfikatorem użytkownika nie będą w stanie zabić / zatrzymać / wznowić procesu, chyba że będą mogli przełączyć się na uprawnienie właściciela lub roota za pomocą sudolub podobnej komendy lub, w mniejszym stopniu, jeśli są związani z tym procesem z ich hierarchii.

jlliagre
źródło