Permiso de apagado de Linux

8

Supongamos que instala un entorno de escritorio, por ejemplo ubuntu o debian. Puede apagar el sistema haciendo clic en un botón en algún lugar del menú de su sistema como usuario normal. No necesita cambiar a superusuario para lograr eso.

Sin embargo, en el mismo entorno de escritorio, si abro un terminal (digamos gnome-terminal) como usuario normal y escribo

shutdown -h now

Sería impulsado por

shutdown: need to be root

La única forma de apagar es anteponer el comando con un sudo.

¿Alguien puede explicar por qué esto es así?

Gracias kc

K.Chen
fuente

Respuestas:

8

La pregunta que hace K.Chen es: ¿por qué necesito privilegios de sudo cuando lo hago desde CLI? Aunque no necesito esos privilegios cuando lo hago desde la GUI.

La primera parte de la respuesta es que las personas que diseñan entornos de escritorio, como Gnome, KDE, Xfce, Mate, Cinnamon, ... intentan simplificar el trabajo de sus usuarios, y configuran el apagado y el reinicio sin requerir credenciales de sudo. Esto, por cierto, implica que debe haber una secuencia de apagado que no implique el apagado del programa, que sí requiere privilegios de sudo (no hay forma de evitarlo).

No sé en detalle cómo lo hace cada DE, pero sé que hay una manera suave de desactivar, reiniciar / apagar / hibernar su sistema, que no requiere privilegios de root. Puede encontrar la publicación original en una publicación del Foro Arch Linux . En esencia, equivale a emitir estos comandos:

detener

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"/org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

reiniciar

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.ConsoleKit"  /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Restart

dbus-suspend

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

hibernar

 #!/bin/bash
 dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Hibernate 

Supongo que los botones de la GUI usan aproximadamente estos comandos. Para estar seguro, uno debe mirar el código, pero creo que esta es una apuesta segura.

MariusMatutiae
fuente
1
Si alguien inicia sesión remotamente en una máquina que también tiene un entorno de escritorio en ejecución, ¿puede emitir estos comandos y apagar / reiniciar / suspender / hibernar con éxito?
gerrit
Hay un lado malicioso en esta pregunta, creo que se debe ejercer cierta discreción.
MariusMatutiae
1
¿Por qué malicioso? Si se puede abusar, los sysops deben saber y luego protegerse contra él.
gerrit
No digo que esté siendo malicioso, sino que se podría hacer un uso malicioso de esta información. Ya me arrepiento de haberlo compartido ... Quizás debería haberlo hecho como @Matteo
MariusMatutiae
5

La razón detrás de esta decisión de diseño no es técnica (podría tener un shutdowncomando no privilegiado o requerir una contraseña en la GUI).

  • Cuando se utiliza un entorno de escritorio, se supone que el usuario tiene acceso físico a la máquina. Entonces es mejor permitir un apagado limpio que dejar que el usuario presione el botón de encendido o desenchufe el cable de alimentación.

  • Cuando se usa un shell, el usuario puede ser un usuario remoto y para evitar un apagado remoto se requieren más privilegios.

Estas no son reglas, sino solo valores predeterminados basados ​​en suposiciones: puede tener un usuario local en un shell y un usuario remoto con un entorno de escritorio. Si desea elegir el comportamiento predeterminado, puede configurar su sistema en consecuencia.

Matteo
fuente
Ya veo tu punto, @Matteo. Pero, como dijo MariusMatutiae, DEB debe haber llamado a algún programa que no sea "apagado" para cerrar sin privilegio de superusuario. ¿Tienes alguna idea de qué es eso?
K.Chen
1

Sudo (superuser do) le permite al administrador del sistema dar a ciertos usuarios (o grupos de usuarios) la capacidad de ejecutar algunos (o todos) comandos como root mientras registra todos los comandos y argumentos. Se puede usar el comando shutdown -h o el comando init 0 para apagar la máquina. Pero ambos comandos requieren privilegios de root para ejecutarse.

El comando que localiza en / sbin debe tener privilegios de root para ejecutarlo. Para encontrar la ubicación del comando de apagado,

escriba qué apagado en la terminal.

Espero que ahora tu duda sea clara :)

Unnikrishnan
fuente