Bagaimana gnome reboot tanpa hak akses root?

8

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
osdamv
sumber
Mungkin ini systemctl . Apa yang ls -l /bin/systemctlmemberitahu Anda?
G-Man Mengatakan 'Reinstate Monica'

Jawaban:

12

Ini dilakukan melalui manajer otorisasi yang disebut polkit:

polkit menyediakan API otorisasi yang dimaksudkan untuk digunakan oleh program-program istimewa ("MEKANISME") yang menawarkan layanan untuk program-program yang tidak terjangkau ("SUBJECTS") sering melalui beberapa bentuk mekanisme komunikasi antar-proses.

Dengan systemddan polkitpengguna dengan sesi non-jauh dapat mengeluarkan perintah terkait daya. Anda dapat membuat daftar semua polkittindakan terdaftar dan mendapatkan detail tentang salah satu dari mereka pkaction(dipanggil tanpa argumen itu akan mencantumkan semua id tindakan).
Dalam kasus khusus ini id tindakan org.freedesktop.login1.rebootdemikian 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: yesberarti pengguna dalam sesi aktif berwenang untuk me-reboot sistem (detail tentang otorisasi implisit pada polkithalaman). Anda dapat memeriksa apakah sesi Anda aktif dengan:

loginctl show-session $ XDG_SESSION_ID --property = Aktif
Active=yes
don_crissti
sumber
1
itu berarti program apa pun yang saya jalankan dapat me-reboot mesin saya tanpa izin saya?
osdamv
1
@osdamv - seperti halnya program yang Anda jalankan dapat rm -rffile pengguna Anda ...
don_crissti
3
@osdamv Perhatikan bahwa Anda bisa menjalankan semua program yang tidak percaya menggunakan sudo --user=jimmydimana pengguna jimmytidak tidak memiliki hak untuk mengeksekusi bahwa perintah polkit ...
Bakuriu
Bagaimana cara saya menjalankan pkaction ini?
Geremia
@ Geremia - Saya tidak mengerti pertanyaannya.
don_crissti