Sto leggendo il libro Sviluppo del kernel Linux, nel capitolo 5 “Implementazione delle chiamate di sistema” a pagina 77 dice
Ad esempio, incapace(CAP_SYS_NICE) controlla se il chiamante ha la capacità
di modificare i valori piacevoli di altri processi. Per impostazione predefinita, il superutente
possiede tutte le capacità e il non root non ne possiede nessuna. Per
esempio, ecco la chiamata di sistema reboot(). Nota come il suo primo passaggio è
garantire che il processo chiamante abbia CAP_SYS_REBOOT . Se quella
istruzione condizionale fosse rimossa, qualsiasi processo potrebbe riavviare il
sistema.
Tuttavia, nel mio Debian Sid posso riavviare la mia macchina usando gnome o eseguendo /sbin/reboot senza sudo o su.
Come è possibile?
Forse con systemctl?
ls -l /sbin/reboot
lrwxrwxrwx 1 root root 14 Jun 28 04:23 /sbin/reboot -> /bin/systemctl
EDIT:I miei gruppi di utenti
[[email protected]:~]$ groups
damian sudo wireshark bumblebee
EDIT 2:autorizzazioni systemctl
[[email protected]:~]$ ls -l /bin/systemctl
-rwxr-xr-x 1 root root 626640 Jun 28 04:23 /bin/systemctl
Risposta accettata:
Questo viene fatto tramite un gestore delle autorizzazioni chiamato polkit
:
polkit fornisce un'API di autorizzazione destinata ad essere utilizzata da programmi
("MECCANISMI") privilegiati che offrono servizi a programmi non privilegiati
("SOGGETTI") spesso attraverso una qualche forma di meccanismo di comunicazione tra processi
.
Con systemd
e polkit
gli utenti con una sessione non remota possono emettere comandi relativi all'alimentazione. Puoi elencare tutti i polkit
azioni registrate e ottieni dettagli su ognuna di esse con pkaction
(richiamato senza argomenti elencherà tutti gli ID azione).
In questo caso particolare l'ID azione è org.freedesktop.login1.reboot
quindi se corri:
pkaction --action-id org.freedesktop.login1.reboot --verbose
l'output dovrebbe essere qualcosa del tipo:
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
Qui, active: yes
significa che l'utente nella sessione attiva è autorizzato a
riavviare il sistema (dettagli sulle autorizzazioni implicite su polkit
pagina). Puoi verificare se la tua sessione è attiva con:
loginctl show-session $XDG_SESSION_ID --property=Active
Active=yes