Come dare i privilegi di spegnimento a un utente?


9

Sto usando Ubuntu 11.04. Voglio eseguire uno script che verifica la presenza di un processo in esecuzione e arresta il sistema al termine del processo. Per fare ciò, l'utente richiede l'accesso allo spegnimento in modo che lo script possa essere eseguito senza richiedere una password.

Ho fatto riferimento a questa pagina e ho aggiunto il testo nel mio file sudoers. Tuttavia, mi chiede ancora la password ogni volta che eseguo sudo shutdown -h now. Inoltre, viene visualizzato un errore che indica che sono richiesti i privilegi di root quando eseguo l'arresto senza sudo.

Il mio file sudoers è simile a questo.

# Cmnd alias specification
Cmnd_Alias      SHUTDOWN = /sbin/shutdown

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

Come posso autorizzare un utente ad eseguire il comando di spegnimento senza dover inserire manualmente la password?

Grazie.


1
Potresti pubblicare il tuo sudoersfile intero e reale , per favore?
enzotib,

Risposte:


6

È possibile chiudere o riavviare utilizzando HAL o ConsoleKit che non richiede l'inserimento di un nome utente / password:

HAL (versioni precedenti di Ubuntu):

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

ConsoleKit (versioni più recenti di Ubuntu, testate su Ubuntu 11.04):

dbus-send --system --print-reply --dest=org.freedesktop.ConsoleKit /org/freedesktop/ConsoleKit/Manager org.freedesktop.ConsoleKit.Manager.Stop

7

L'ho fatto come in questa risposta, funziona perfettamente per me. Forse il tuo approccio manca la visudoparte?

Apri una riga di comando e digita:

sudo visudo 

Nel file che si apre aggiungere la seguente riga alla fine:

yourusername ALL=NOPASSWD: /sbin/halt

Quindi chiudere l'editor e salvarlo (CTRL + x).

Ora puoi spegnere il computer dalla riga di comando, ad esempio dopo aver scaricato qualcosa:

wget UrlOfTheFileYouWantToDownload ; sudo halt

1

Qualche tempo fa l'ho fatto impostando il suid (Imposta ID utente). Ciò fa eseguire il programma come proprietario del file, non l'utente che lo esegue. Poiché l'arresto è di proprietà di root, ciò dovrebbe consentire l'arresto senza sudo.

chmod u+s /sbin/shutdown

Ci sono implicazioni per la sicurezza, dato che chiunque può quindi eseguire l'arresto. http://en.wikipedia.org/wiki/Setuid


In generale, non è consigliabile modificare file o metadati di file, installati da pacchetti diversi dai file di configurazione in /etc.
enzotib,

Hmm ... vero! Ma qual è il modo ufficiale allora? Giocare con Polkit? Neanche così bello ...
turbo,

sudoè il modo giusto, secondo me, ma sfortunatamente l'utente non dà la possibilità di vedere il suo sudoersfile, e cosa c'è che non va.
enzotib

Questa è l'unica cosa che ha funzionato per me.
Mark Stewart,

0

Sembra che tu voglia eseguire lo script stesso come root. Se vuoi eseguire uno script che aspetta che finisca qualcosa e poi spenga il tuo computer, allora eseguiresti semplicemente lo script con sudo. Ciò richiederà la password quando si esegue lo script, ma lo script stesso è libero di arrestare il sistema senza ulteriori interventi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.