Saya membaca buku pengembangan kernel Linux , dalam bab 5 "Implementasi Panggilan Sistem" halaman 77 mengatakan
Misalnya, mampu (CAP_SYS_NICE) memeriksa apakah pemanggil memiliki kemampuan untuk mengubah nilai bagus dari proses lain. Secara default, superuser memiliki semua kemampuan dan nonroot tidak memiliki. Misalnya, ini adalah panggilan sistem reboot (). Perhatikan bagaimana langkah pertama memastikan bahwa proses panggilan memiliki CAP_SYS_REBOOT. Jika satu pernyataan bersyarat itu dihapus, proses apa pun dapat mem-boot ulang sistem.
Namun, di Debian Sid saya, saya bisa reboot mesin saya dengan menggunakan gnome atau dengan menjalankan / sbin / reboot tanpa sudo atau su. Bagaimana ini mungkin?
Mungkin dengan systemctl?
ls -l /sbin/reboot
lrwxrwxrwx 1 root root 14 Jun 28 04:23 /sbin/reboot -> /bin/systemctl
EDIT: Grup pengguna saya
[damian@xvz:~]$ groups
damian sudo wireshark bumblebee
EDIT 2: izin systemctl
[damian@xvz:~]$ ls -l /bin/systemctl
-rwxr-xr-x 1 root root 626640 Jun 28 04:23 /bin/systemctl
systemctl
. Apa yangls -l /bin/systemctl
memberitahu Anda?Jawaban:
Ini dilakukan melalui manajer otorisasi yang disebut
polkit
:Dengan
systemd
danpolkit
pengguna dengan sesi non-jauh dapat mengeluarkan perintah terkait daya. Anda dapat membuat daftar semuapolkit
tindakan terdaftar dan mendapatkan detail tentang salah satu dari merekapkaction
(dipanggil tanpa argumen itu akan mencantumkan semua id tindakan).Dalam kasus khusus ini id tindakan
org.freedesktop.login1.reboot
demikian jika Anda menjalankan:outputnya harus seperti:
Di sini,
active: yes
berarti pengguna dalam sesi aktif berwenang untuk me-reboot sistem (detail tentang otorisasi implisit padapolkit
halaman). Anda dapat memeriksa apakah sesi Anda aktif dengan:sumber
rm -rf
file pengguna Anda ...sudo --user=jimmy
dimana penggunajimmy
tidak tidak memiliki hak untuk mengeksekusi bahwa perintah polkit ...