Saya bertanya-tanya tentang keamanan sinyal UNIX.
SIGKILL
akan membunuh prosesnya. Jadi, apa yang terjadi ketika proses pengguna non root mengirim sinyal ke proses pengguna root? Apakah prosesnya masih menjalankan pengendali sinyal?
Saya mengikuti jawaban yang diterima (gollum), dan saya mengetik man capabilites
, dan saya menemukan banyak hal tentang kernel Linux. Dari man capabilities
:
NAME
capabilities - overview of Linux capabilities
DESCRIPTION
For the purpose of performing permission checks, traditional UNIX
implementations distinguish two categories of processes: privileged
processes (whose effective user ID is 0, referred to as superuser or
root), and unprivileged processes (whose effective UID is nonzero).
Privileged processes bypass all kernel permission checks, while
unprivileged processes are subject to full permission checking based
on the process's credentials (usually: effective UID, effective GID,
and supplementary group list).
Starting with kernel 2.2, Linux divides the privileges traditionally
associated with superuser into distinct units, known as capabilities,
which can be independently enabled and disabled. Capabilities are a
per-thread attribute.
SIGKILL
, yang merupakan kasus khusus dan dikelola sepenuhnya oleh kernel, sinyal hanyalah permintaan. Proses penerimaan dapat melakukan apa saja yang mereka inginkan.SIGKILL
danSIGSTOP
...SIGKILL
. AwalnyaSIGINT
,,SIGKILL
danSIGTERM
akan memiliki efek yang sama persis, satu-satunya perbedaan adalah bahwa proses penerimaan dapat mengubah default ini untuk beberapa di antaranya.Jawaban:
Di Linux itu tergantung pada kemampuan file.
Ambil
mykill.c
sumber sederhana berikut :bangun itu:
Sekarang saat root pengguna memulai proses tidur di latar belakang:
Sekarang ketika pengguna normal mencoba membunuhnya:
Sekarang saat pengguna root mengubah
/tmp/mykill
batas:Dan coba lagi sebagai pengguna normal:
Akhirnya tolong hapus
/tmp/mykill
untuk alasan yang jelas;)sumber
Tidak ada:
sumber
kill(2)
halaman manual menjelaskan:sumber
sinyal akan dibawa tetapi pemilik proses milik root. jadi, pengguna lain tidak memiliki hak untuk menghentikan proses sehingga Anda akan menerima masalah kesalahan izin.
proses terminasi hanya dimungkinkan ketika Anda memiliki kepemilikan (hak yang tepat) dari proses tersebut.
sumber