¿Cómo otorgar privilegios de apagado a un usuario?

9

Estoy usando Ubuntu 11.04. Quiero ejecutar un script que verifique si hay un proceso en ejecución y apaga el sistema cuando finaliza ese proceso. Para hacer esto, el usuario requiere acceso de apagado para que el script pueda ejecutarse sin requerir una contraseña.

Me referí a esta página y agregué el texto en mi archivo sudoers. Sin embargo, todavía me pide la contraseña cada vez que ejecuto sudo shutdown -h now. Además, aparece un error que dice que se requieren privilegios de root cuando ejecuto el apagado sin sudo.

Mi archivo de sudoers se parece a esto.

# Cmnd alias specification
Cmnd_Alias      SHUTDOWN = /sbin/shutdown

# User privilege specification
root    ALL=(ALL:ALL) ALL
myusername    ALL = NOPASSWD: SHUTDOWN

¿Cómo puedo dar permiso a un usuario para ejecutar el comando de apagado sin tener que ingresar la contraseña manualmente?

Gracias.

Amey Jah
fuente
1
¿Podría publicar su sudoersarchivo real y completo , por favor?
enzotib

Respuestas:

6

Puede apagar o reiniciar usando HAL o ConsoleKit, que no requerirá que ingrese un nombre de usuario / contraseña:

HAL (versiones anteriores de Ubuntu):

dbus-send --system --print-reply --dest=org.freedesktop.Hal /org/freedesktop/Hal/devices/computer org.freedesktop.Hal.Device.SystemPowerManagement.Shutdown

ConsoleKit (versiones más recientes de Ubuntu, probadas en Ubuntu 11.04):

dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop
Alin Andrei
fuente
7

Lo hice como en esta respuesta, funciona perfectamente para mí. Tal vez su enfoque pierde la visudoparte?

Abra una línea de comando y escriba:

sudo visudo 

En el archivo que se abre, agregue la siguiente línea al final:

yourusername ALL=NOPASSWD: /sbin/halt

Luego salga del editor y protéjalo (CTRL + x).

Ahora puede apagar su computadora desde la línea de comandos, por ejemplo, después de descargar algo:

wget UrlOfTheFileYouWantToDownload ; sudo halt
Christoph
fuente
1

Hace algún tiempo hice esto configurando el suid (Establecer ID de usuario). Esto hace que el programa se ejecute como el propietario del archivo, no como el usuario que lo ejecuta. Dado que el apagado es propiedad de root, esto debería permitirle apagar sin sudo.

chmod u+s /sbin/shutdown

Sin embargo, existen implicaciones de seguridad ya que cualquiera puede ejecutar el apagado. http://en.wikipedia.org/wiki/Setuid

turbo
fuente
En general, no es recomendable modificar archivos o metadatos de archivos, instalados desde paquetes, que no sean archivos de configuración /etc.
enzotib
Hmm ... cierto! ¿Pero cuál es la forma oficial entonces? Jugando con polkit? No es tan agradable tampoco ...
turbo
sudoes la forma correcta, en mi opinión, pero desafortunadamente el usuario no le da la oportunidad de ver su sudoersarchivo, y qué tiene de malo.
enzotib
Esto es lo único que funcionó para mí.
Mark Stewart
0

Parece que le gustaría ejecutar el script en sí mismo como root. Si desea ejecutar un script que espere a que algo termine y luego apague su computadora, simplemente ejecute el script con sudo. Eso le pedirá su contraseña cuando ejecute el script, pero luego el script en sí es libre de apagar el sistema sin ninguna otra intervención.

Jo-Erlend Schinstad
fuente