¿Cómo el botón de encendido apaga la computadora sin permiso de root?

36

Cuando intento apagar la computadora desde una línea de comando o terminal, debo tener privilegios de root:

amy@amy:~$ shutdown now
shutdown: Need to be root

y

amy@amy:~$ halt
halt: Need to be root

pero cuando se apaga usando la interfaz gráfica de usuario, es decir, el botón de apagado o el botón de apagado del hardware, no se me solicita la contraseña para hacerlo. ¿Qué significa el apagado de la interfaz gráfica y por qué no necesita la contraseña o los privilegios de root?

Estoy usando Ubuntu 11.04 Natty.

amyassin
fuente
1
porque si un atacante tiene acceso físico a tu computadora, ya has perdido. Intentar evitar que alguien que esté al alcance de la mano de la caja haga casi cualquier cosa es, en el mejor de los casos, una táctica dilatoria y, sobre todo, causa más molestias para los usuarios cotidianos que para un atacante. La mayoría de las distribuciones de Linux le darán un mensaje raíz si se le habla severamente durante el arranque por exactamente este motivo.
Joseph Rogers

Respuestas:

33

El botón de encendido del hardware activa un evento ACPI que acpid(el demonio ACPI) nota y reacciona; en este caso apagando el sistema, aunque podría hacer que haga lo que quiera. El daemon ACPI se ejecuta como root, por lo que tiene permiso para apagar el sistema. Los entornos de escritorio (por ejemplo, gdmpara Gnome) generalmente también se ejecutan como root, por lo que sospecho que funcionan de la misma manera: no tiene permiso para apagar el sistema, pero puede decir gdmque quiere que se apague y puede hacerlo en su nombre

Michael Mrozek
fuente
¿es seguro? 'podrías hacer que haga lo que quieras'.
amyassin
77
Para poder acpidhacer algo diferente de lo que ya hace, tendría que ser root, por lo que ya tendría permiso para hacer cosas inseguras. También es posible usar sistemas MAC como SELinux para proteger acpid, restringiendo las cosas que se les permite hacer, incluso mientras se ejecutan como root.
Warren Young
55
@amyassin Bueno, para cambiar lo que necesitas necesitas privilegios de root; Un usuario normal no puede decirle qué hacer. Pero acpides configurable, puede ejecutar diferentes scripts dependiendo de los eventos de hardware que vea (por ejemplo, he acpidbloqueado mi computadora cuando presiono el botón de encendido)
Michael Mrozek
77
@amyassen Si alguien tiene acceso físico a su máquina, entonces es demasiado tarde para preocuparse por la seguridad: si el botón de encendido no activa un apagado elegante, simplemente puede tirar del cable de alimentación y provocar un apagado ingrato .
Shadur
3
Dicho 'software malicioso' tendría que obtener la propiedad de root y los permisos de SUID para decirle a init que lo haga con el apagado, y de nuevo, cuando llegue a ese punto, tendrá más problemas de los que preocuparse que un posible apagado.
Shadur
11

La respuesta de Michael discute correctamente la función del sistema cuando se usa el interruptor de encendido de hardware, pero la mayoría de los entornos de escritorio en realidad lo usan dbuspara este propósito en lugar de hacerlo ellos mismos. Por ejemplo, GNOME usa dbus's org.freedesktop.Hal.Device.SystemPowerManagement.Shutdowncuando se hace clic en el botón de apagado. Cuando se envía esto, dbusrealiza algunas comprobaciones para determinar si el usuario que envía el mensaje está autorizado para realizar un apagado y, si lo están, apaga el sistema.

Puedes emular esto usando dbus-send. Por ejemplo, para apagar su sistema usando dbus, use algo como esto:

dbus-send --system --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown
Chris Down
fuente