Quando installiamo/rimuoviamo/aggiorniamo pacchetti o apportiamo modifiche che richiedono privilegi di amministratore, ci viene richiesta la password dell'utente amministratore che ha il sudo
privilegi – questo avviene sia tramite GUI che terminale.
Tuttavia, se proviamo a spegnere e riavviare tramite terminale, si lamenta che dobbiamo essere root
:
$ reboot
reboot: Need to be root
$ shutdown now
shutdown: Need to be root
Ma non ci viene mai chiesta una password quando eseguiamo queste azioni tramite la ruota dentata in alto a destra.
Perché c'è questa discrepanza?
Migliore risposta
L'arresto sulla ruota dentata controlla se è consentito spegnere la macchina. Questo viene fatto tramite PolicyKit. In caso di spegnimento questa istruzione nel file /usr/share/polkit-1/actions/org.freedesktop.consolekit.policy
è selezionato:
<action id="org.freedesktop.consolekit.system.stop">
<description>Stop the system</description>
<message>System policy prevents stopping the system</message>
<defaults>
<allow_inactive>no</allow_inactive>
<allow_active>yes</allow_active>
</defaults>
</action>
Il PolicyKit attiva un dbus-send
comando. In caso di spegnimento sarebbe:
dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
C'è un demone in esecuzione in background con privilegi di root che invoca il comando di spegnimento per te.
Quando vuoi essere in grado di spegnere la macchina "alla vecchia maniera" tramite riga di comando (shutdown, reboot, halt, ...
), quindi è necessario aggiungere il suid-Bit a quei comandi. Ma tieni presente che chiunque sul tuo sistema abbia accesso alla shell potrebbe quindi spegnere la tua macchina.