Questão Como executo comandos sudo específicos sem uma senha?


Em uma máquina em particular, eu geralmente preciso executar sudo comandos de vez em quando. Eu estou bem com a digitação de senha sudo na maioria dos casos.

No entanto, existem três sudo comandos Eu quero correr sem digitar a senha:

  • sudo reboot
  • sudo shutdown -r now
  • sudo shutdown -P now

Como posso excluir esses comandos da proteção por senha para sudo?


188
2017-07-03 08:31


origem


Igual a Como permitir a execução sem usar o sudo? - fouric


Respostas:


Use o NOPASSWD diretiva

Você pode usar o NOPASSWD directiva no seu /etc/sudoers Arquivo.

Se o seu usuário é chamado user e seu host é chamado host você pode adicionar essas linhas para /etc/sudoers:

user host = (root) NOPASSWD: /sbin/shutdown
user host = (root) NOPASSWD: /sbin/reboot

Isso permitirá que o usuário user para executar os comandos desejados host sem digitar uma senha. Todos os outros sudoOs comandos ed ainda exigirão uma senha.

Os comandos especificados no sudoers Arquivo devo ser totalmente qualificado (ou seja, usando o caminho absoluto para o comando a ser executado), conforme descrito no sudoers página man. Fornecer um caminho relativo é considerado um erro de sintaxe.

Se o comando terminar com um trailing / caractere e aponta para um diretório, o usuário poderá executar qualquer comando nesse diretório (mas não em nenhum subdiretório). No exemplo a seguir, o usuário user pode executar qualquer comando no diretório /home/someuser/bin/:

user host = (root) NOPASSWD: /home/someuser/bin/

Nota: Sempre use o comando visudo para editar o sudoers arquivo para garantir que você não se bloqueie fora do sistema - apenas para o caso de você acidentalmente escrever algo incorreto sudoers Arquivo. visudo salvará seu arquivo modificado em um local temporário e  sobrescrever o real sudoers arquivo se o arquivo modificado puder ser analisado sem erros.

Usando /etc/sudoers.d em vez de modificar /etc/sudoers

Como alternativa à edição do /etc/sudoers arquivo, você pode adicionar as duas linhas a um novo arquivo em /etc/sudoers.d por exemplo. /etc/sudoers.d/shutdown. Esta é uma maneira elegante de separar diferentes mudanças para o sudo direitos e também deixa o original sudoers arquivo intocado para atualizações mais fáceis.

Nota: Mais uma vez, você deve usar o comando visudo para editar o arquivo para garantir que você não se bloqueie fora do sistema:

sudo visudo -f /etc/sudoers.d/shutdown 

Isso também garante automaticamente que o proprietário e as permissões do novo arquivo estejam definidos corretamente.

E se sudoers está confuso

Se você não usou visudo para editar seus arquivos e, em seguida, acidentalmente desarrumada /etc/sudoers ou bagunçou um arquivo em /etc/sudoers.d então você será bloqueado sudo.

A solução poderia ser corrigir os arquivos usando pkexec que é uma alternativa para sudo.

Consertar /etc/sudoers:

pkexec visudo

Consertar /etc/sudoers.d/shutdown:

pkexec visudo -f /etc/sudoers.d/shutdown

Se a propriedade e / ou permissões estiverem incorretas para qualquer sudoers arquivo, o arquivo será ignorado por sudo então você também pode se ver bloqueado nessa situação. Mais uma vez, você pode usar pkexec para consertar isso.

As permissões corretas devem ser assim:

$ ls -l /etc/sudoers.d/shutdown 
-r--r----- 1 root root 86 Jul 16 15:37 /etc/sudoers.d/shutdown

Usar pkexec assim para consertar propriedade e permissões:

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown

253
2017-07-03 08:43



Eu espero que isso só se aplique a estes dois comandos, e eu não vou estar bagunçando o resto do sistema ou qualquer outro comando? - Z9iT
As duas linhas referem-se especificamente a esses dois comandos. E se user não é de outras maneiras dadas sudo direitos nenhum outro comando pode ser sudoed por este usuário. Dê uma olhada em man sudo e man sudoers. - mgd
Inicialmente eu enfrentei um problema chmod .. acrescentou um treino para isso na resposta .. thanx @mgd - Z9iT
@StanKurdziel Eu tentei com esta linha no Mac OS X Yosemite e funcionou bem: mgd ALL=(root) NOPASSWD: /var/root/test. Eu sou usuário mgd e ALL significa "de todos os hosts". /var/root/test é um simples shell script "Hello World" com permissões: -rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test. Eu fiz não outras alterações no sistema. - mgd
@Michael por favor leia a man page. Está tudo escrito lá. Para citar: No entanto, você também pode especificar argumentos de linha de comando (incluindo curingas). Como alternativa, você pode especificar "" para indicar que o comando só pode ser executado sem argumentos de linha de comando. - mgd