Bisakah suatu proses memiliki pemilik? Apa artinya?

9

Kita dapat menentukan pemilik suatu proses dengan menggunakan psperintah. Apakah ini berarti bahwa pengguna lain tidak dapat menjalankan / mematikan / melanjutkan proses itu?

Naga Venkatesh Gavini
sumber

Jawaban:

18

Baca kredensial (7) , fork (2) , execve (2) . The sistem fork panggilan adalah cara proses diciptakan (hari ini, forksering diimplementasikan dengan clone (2) tetapi Anda dapat melihat bahwa sebagai implementasi detail). The system call exec adalah cara eksekusi program dimulai. Ingat bahwa semuanya dilakukan dari beberapa proses dengan beberapa panggilan sistem (tercantum dalam syscalls (2) ). Proses pertama ( init atau systemd ) telah dimulai secara ajaib oleh kernel pada saat boot. Proses lain telah dimulai oleh garpu (2). Kernel Linux modern terkadang - tetapi jarang - memulai secara ajaib beberapa proses khusus (mis. /sbin/hotplug) Atau utas kernel (mis. kworker, kswapd....).

Jadi ya, setiap proses (dan setiap file) memiliki beberapa pemilik (secara teknis uid , sejumlah kecil non-negatif) dan grup (gid). 0 uid adalah untuk root dan memiliki izin tambahan.

Baca juga tentang setuid (dan setreuid (2) ...) Ini rumit.

apakah itu berarti pemilik lain tidak dapat menjalankan proses itu?

Suatu proses sudah berjalan (tapi bisa diam atau menunggu), jadi tidak ada yang bisa menjalankannya lagi. Jangan bingung proses (sesuatu yang dinamis) dengan program ( file yang dapat dieksekusi , sering dalam format ELF ) berjalan di dalamnya.

Program tertentu (misalnya /bin/bash) dapat dieksekusi dalam beberapa proses. Banyak yang dapat dieksekusi tetap di disk Anda tanpa (pada saat tertentu) ada proses yang menjalankannya.

Di Linux, proc (5) sangat berguna untuk menanyakan kernel tentang keadaan proses. Coba untuk contoh cat /proc/$$/statusdan cat /proc/self/maps. Lihat juga pgrep (1) , ps (1) , atas (1) .

Setiap proses memiliki ruang alamat virtual sendiri , tabel deskriptor file sendiri , direktori kerjanya sendiri , (dan sering beberapa utas , lihat pthreads (7) ) dll dll ...

apakah itu berarti bahwa pemilik lain tidak dapat menjalankan / membunuh / melanjutkan proses itu?

Menjalankan proses tidak masuk akal ( sudah berjalan). Namun, proses eksekusi pid 1234 tersedia sebagai /proc/1234/exesymlink, dan Anda dapat menggunakannya untuk execve (2) - tetapi Anda mungkin tidak boleh -. Aturan izin untuk execveberlaku.

Untuk membunuh (2) suatu proses, Anda biasanya harus memiliki cairan yang sama. Namun, dokumentasi tersebut memberi tahu:

  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. 

Untuk menghentikan suatu proses, gunakan sinyal SIGSTOP(atau SIGTSTP) yang digunakan dengan kill (2) . Lihat sinyal (7) .

Untuk melanjutkan proses yang berhenti, gunakan SIGCONTsinyal.

Basile Starynkevitch
sumber
4

Pemilik biasanya adalah pengguna yang meluncurkan proses itu. Perintah mungkin dapat dieksekusi oleh pengguna lain, tetapi itu akan menjadi proses yang berbeda.

apakah itu berarti pemilik lain tidak dapat menjalankan proses itu?

Tidak ada pemilik lain. Jangan bingung program (file yang dapat dieksekusi) dan proses (menjalankan program).

Apakah itu berarti bahwa pemilik lain tidak dapat menjalankan / membunuh / melanjutkan proses itu?

Pemilik tunggal sudah meluncurkan proses. Jika yang Anda maksud adalah pengguna lain , bukan pemilik, itu tergantung.

Root, yaitu pengguna dengan nilai uid0, memiliki kekuatan penuh. Pengguna lain yang berbagi hal yang sama uidadalah, dari sudut pandang OS, pengguna yang sama, sehingga memiliki kekuatan penuh pada prosesnya juga.

Pengguna dengan uid yang berbeda tidak akan dapat membunuh / menghentikan / melanjutkan proses, kecuali mereka diizinkan untuk beralih ke pemilik atau root privilege melalui sudoatau perintah serupa atau, pada tingkat lebih rendah, jika mereka terkait dengan proses itu dari hierarki mereka.

Jlliagre
sumber