Kita dapat menentukan pemilik suatu proses dengan menggunakan ps
perintah. Apakah ini berarti bahwa pengguna lain tidak dapat menjalankan / mematikan / melanjutkan proses itu?
Baca kredensial (7) , fork (2) , execve (2) . The sistem fork panggilan adalah cara proses diciptakan (hari ini, fork
sering 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/$$/status
dan 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/exe
symlink, dan Anda dapat menggunakannya untuk execve (2) - tetapi Anda mungkin tidak boleh -. Aturan izin untuk execve
berlaku.
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 SIGCONT
sinyal.
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 uid
0, memiliki kekuatan penuh. Pengguna lain yang berbagi hal yang sama uid
adalah, 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 sudo
atau perintah serupa atau, pada tingkat lebih rendah, jika mereka terkait dengan proses itu dari hierarki mereka.