Když instalujeme/odebíráme/aktualizujeme balíčky nebo provádíme změny, které vyžadují administrátorská oprávnění, jsme vyzváni k zadání hesla administrátora, který má sudo
privilegia – to se děje přes GUI i terminál.
Pokud se však pokusíme vypnout a restartovat přes terminál, stěžuje si, že musíme být root
:
$ reboot
reboot: Need to be root
$ shutdown now
shutdown: Need to be root
Ale když tyto akce provádíme pomocí ozubeného kolečka vpravo nahoře, nikdy nejsme požádáni o zadání hesla.
Proč je zde tento rozpor?
Nejlepší odpověď
Vypnutí na ozubeném kole kontroluje, zda máte povoleno vypnout stroj. To se provádí prostřednictvím PolicyKit. V případě vypnutí toto prohlášení v souboru /usr/share/polkit-1/actions/org.freedesktop.consolekit.policy
je zaškrtnuto:
<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>
PolicyKit spustí dbus-send
příkaz. V případě vypnutí by to bylo:
dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
Na pozadí běží démon s oprávněními root, který za vás vyvolá příkaz k vypnutí.
Když chcete mít možnost vypnout počítač „starým způsobem“ pomocí příkazového řádku (shutdown, reboot, halt, ...
), pak musíte k těmto příkazům přidat suid-Bit. Ale mějte na paměti, že každý ve vašem systému, který má přístup k shellu, by mohl váš počítač vypnout.