Saya sedang membaca buku pengembangan kernel Linux, di 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 memilikinya. Untuk
contoh, berikut adalah panggilan sistem reboot(). Perhatikan bagaimana langkah pertamanya
memastikan bahwa proses pemanggilan memiliki CAP_SYS_REBOOT . Jika satu
pernyataan bersyarat itu dihapus, proses apa pun dapat mem-boot ulang
sistem.
Namun, di Debian Sid saya, saya dapat me-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
[[email protected]:~]$ groups
damian sudo wireshark bumblebee
EDIT 2:izin systemctl
[[email protected]:~]$ ls -l /bin/systemctl
-rwxr-xr-x 1 root root 626640 Jun 28 04:23 /bin/systemctl
Jawaban yang Diterima:
Ini dilakukan melalui manajer otorisasi yang disebut polkit
:
polkit menyediakan API otorisasi yang dimaksudkan untuk digunakan oleh program
istimewa (“MEKANISME”) yang menawarkan layanan kepada program yang tidak memiliki hak
(“SUBJECT”) seringkali melalui beberapa bentuk mekanisme komunikasi
antar-proses.
Dengan systemd
dan polkit
pengguna dengan sesi non-jarak jauh dapat mengeluarkan perintah terkait daya. Anda dapat membuat daftar semua polkit
tindakan terdaftar dan dapatkan detail tentang tindakan tersebut dengan pkaction
(dipanggil tanpa argumen, ia akan mencantumkan semua id tindakan).
Dalam kasus khusus ini, id tindakannya adalah org.freedesktop.login1.reboot
jadi jika Anda menjalankan:
pkaction --action-id org.freedesktop.login1.reboot --verbose
outputnya harus seperti:
org.freedesktop.login1.reboot:
description: Reboot the system
message: Authentication is required for rebooting the system.
vendor: The systemd Project
vendor_url: http://www.freedesktop.org/wiki/Software/systemd
icon:
implicit any: auth_admin_keep
implicit inactive: auth_admin_keep
implicit active: yes
Di sini, active: yes
berarti pengguna dalam sesi aktif diizinkan untuk
me-reboot sistem (detail tentang otorisasi implisit di polkit
halaman). Anda dapat memeriksa apakah sesi Anda aktif dengan:
loginctl show-session $XDG_SESSION_ID --property=Active
Active=yes