Cuando instalamos/eliminamos/actualizamos paquetes o hacemos cambios que requieren privilegios administrativos, se nos solicita la contraseña del usuario administrador que tiene el sudo
privilegios:esto sucede tanto a través de la GUI como del terminal.
Sin embargo, si intentamos apagar y reiniciar a través de la terminal, se queja de que debemos ser root
:
$ reboot
reboot: Need to be root
$ shutdown now
shutdown: Need to be root
Pero nunca se nos pide una contraseña cuando realizamos estas acciones a través de la rueda dentada en la parte superior derecha.
¿Por qué existe esta discrepancia?
Mejor respuesta
El apagado en la rueda dentada verifica si se le permite apagar la máquina. Esto se hace a través de PolicyKit. En caso de apagar esta declaración en el archivo /usr/share/polkit-1/actions/org.freedesktop.consolekit.policy
está marcado:
<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 activa un dbus-send
dominio. En caso de apagado sería:
dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
Hay un demonio ejecutándose en segundo plano con privilegios de raíz que invoca el comando de apagado por usted.
Cuando desee poder apagar la máquina "a la antigua" a través de la línea de comando (shutdown, reboot, halt, ...
), entonces necesita agregar el suid-Bit a esos comandos. Pero tenga en cuenta que todas las personas de su sistema que tengan acceso al shell podrían apagar su máquina.