Como conceder privilégios de desligamento a um usuário?

9

Estou usando o Ubuntu 11.04. Quero executar um script que verifique se há um processo em execução e encerra o sistema quando esse processo termina. Para fazer isso, o usuário requer acesso de desligamento para que o script possa ser executado sem exigir uma senha.

Referi-me a esta página e acrescentou o texto no meu arquivo sudoers. No entanto, ele ainda está me pedindo a senha sempre que executo sudo shutdown -h now. Além disso, recebo um erro dizendo que privilégios de root são necessários quando executo o desligamento sem o sudo.

Meu arquivo sudoers se parece com isso.

# Cmnd alias specification
Cmnd_Alias      SHUTDOWN = /sbin/shutdown

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

Como posso dar permissão a um usuário para executar o comando shutdown sem ter que inserir manualmente a senha?

Obrigado.

Amey Jah
fonte
1
Você poderia postar seu sudoersarquivo real e inteiro , por favor?
enzotib

Respostas:

6

Você pode desligar ou reiniciar usando o HAL ou o ConsoleKit, o que não exigirá a inserção de um nome de usuário / senha:

HAL (versões mais antigas do Ubuntu):

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

ConsoleKit (versões mais recentes do Ubuntu, testadas no Ubuntu 11.04):

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

Eu fiz isso como esta resposta, funciona perfeitamente para mim. Talvez sua abordagem perca a visudoparte?

Abra uma linha de comando e digite:

sudo visudo 

No arquivo que abre, adicione a seguinte linha no final:

yourusername ALL=NOPASSWD: /sbin/halt

Então saia do editor e proteja-o (CTRL + x).

Agora você pode desligar o computador na linha de comando, por exemplo, depois de baixar algo:

wget UrlOfTheFileYouWantToDownload ; sudo halt
Christoph
fonte
1

Algum tempo atrás, eu fiz isso definindo o suid (Definir ID do usuário). Isso faz com que o programa seja executado como o proprietário do arquivo, não o usuário que o executa. Como o shutdown pertence ao root, isso deve permitir o desligamento sem o sudo.

chmod u+s /sbin/shutdown

Existem implicações de segurança, já que qualquer um pode executar o desligamento. http://en.wikipedia.org/wiki/Setuid

turbo
fonte
Em geral, não é aconselhável modificar arquivos ou metadados de arquivos instalados a partir de pacotes, exceto os arquivos de configuração do /etc.
enzotib
Hmm ... verdade! Mas qual é o caminho oficial então? Brincando com o polkit? Não tão bom ou ...
turbo
sudoé o caminho certo, na minha opinião, mas infelizmente o usuário não dá a chance de ver seu sudoersarquivo e o que há de errado com ele.
enzotib
Esta é a única coisa que funcionou para mim.
Mark Stewart
0

Parece que você deseja executar o próprio script como root. Se você deseja executar um script que aguarde que algo termine e depois desligue o computador, basta executar o script com o sudo. Isso pedirá sua senha quando você executar o script, mas o script em si estará livre para desligar o sistema sem nenhuma intervenção adicional.

Jo-Erlend Schinstad
fonte