Wenn wir Pakete installieren/entfernen/aktualisieren oder Änderungen vornehmen, die Administratorrechte erfordern, werden wir nach dem Passwort des Admin-Benutzers gefragt, der über den sudo
verfügt Privilegien – dies geschieht sowohl über die GUI als auch über das Terminal.
Wenn wir jedoch versuchen, über das Terminal herunterzufahren und neu zu starten, beschwert es sich, dass wir root
sein müssen :
$ reboot
reboot: Need to be root
$ shutdown now
shutdown: Need to be root
Aber wir werden nie nach einem Passwort gefragt, wenn wir diese Aktionen über das Zahnrad oben rechts ausführen.
Warum gibt es diese Diskrepanz?
Beste Antwort
Das Herunterfahren am Zahnrad prüft, ob Sie die Maschine herunterfahren dürfen. Dies geschieht über PolicyKit. Im Falle des Herunterfahrens diese Anweisung in der Datei /usr/share/polkit-1/actions/org.freedesktop.consolekit.policy
ist geprüft:
<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>
Das PolicyKit löst einen dbus-send
aus Befehl. Im Falle einer Abschaltung wäre es:
dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
Im Hintergrund läuft ein Daemon mit Root-Privilegien, der den Shutdown-Befehl für Sie aufruft.
Wenn Sie in der Lage sein möchten, den Computer „auf die alte Art“ über die Befehlszeile herunterzufahren (shutdown, reboot, halt, ...
), dann müssen Sie diesen Befehlen das suid-Bit hinzufügen. Aber seien Sie sich bewusst, dass jeder auf Ihrem System, der Zugriff auf die Shell hat, Ihren Computer herunterfahren könnte.