Lorsque nous installons/supprimons/mettons à jour des packages ou apportons des modifications nécessitant des privilèges administratifs, nous sommes invités à entrer le mot de passe de l'utilisateur administrateur qui possède le sudo
privilèges - cela se produit à la fois via l'interface graphique et le terminal.
Cependant, si nous essayons d'arrêter et de redémarrer via le terminal, il se plaint que nous devons être root
:
$ reboot
reboot: Need to be root
$ shutdown now
shutdown: Need to be root
Mais on ne nous demande jamais de mot de passe lorsque nous effectuons ces actions via la roue dentée en haut à droite.
Pourquoi y a-t-il cet écart ?
Meilleure réponse
L'arrêt sur la roue dentée vérifie si vous êtes autorisé à arrêter la machine. Cela se fait via PolicyKit. En cas d'arrêt cette déclaration dans le fichier /usr/share/polkit-1/actions/org.freedesktop.consolekit.policy
est cochée :
<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>
Le PolicyKit déclenche un dbus-send
commande. En cas d'arrêt, ce serait :
dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
Un démon s'exécute en arrière-plan avec des privilèges root qui appelle la commande shutdown pour vous.
Lorsque vous souhaitez pouvoir éteindre la machine "à l'ancienne" via la ligne de commande (shutdown, reboot, halt, ...
), alors vous devez ajouter le suid-Bit à ces commandes. Mais sachez que toute personne sur votre système ayant accès au shell pourrait alors arrêter votre machine.