Como eu executo comandos sudo específicos sem uma senha?

191

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

No entanto, existem três sudo comandos que quero executar 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 ?

    
por Z9iT 03.07.2012 / 10:31

1 resposta

256

Use a diretiva NOPASSWD

Você pode usar a diretiva NOPASSWD no seu /etc/sudoers arquivo .

Se seu usuário for chamado de user e seu host for chamado de host , você poderá adicionar essas linhas a /etc/sudoers :

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

Isso permitirá que o usuário user execute os comandos desejados em host sem inserir uma senha. Todos os outros sudo comandos ainda exigirão uma senha.

Os comandos especificados no arquivo sudoers devem ser totalmente qualificados (ou seja, usando o caminho absoluto para o comando a ser executado), conforme descrito nas sudoers . Fornecer um caminho relativo é considerado um erro de sintaxe.

Se o comando terminar com um caractere / final e apontar 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/

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

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

Como alternativa à edição do arquivo /etc/sudoers , você pode adicionar as duas linhas a um novo arquivo em /etc/sudoers.d , por exemplo, %código%. Essa é uma maneira elegante de separar diferentes alterações para os direitos /etc/sudoers.d/shutdown e também deixa o arquivo sudo original inalterado para facilitar as atualizações.

Nota: Novamente, você deve usar o comando sudoers 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.

Se visudo estiver confuso

Se você não usou sudoers para editar seus arquivos e acidentalmente errou visudo ou confundiu um arquivo em /etc/sudoers , então você será bloqueado de /etc/sudoers.d .

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

Para corrigir sudo :

pkexec visudo

Para corrigir /etc/sudoers :

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

Se a propriedade e / ou as permissões estiverem incorretas para qualquer arquivo /etc/sudoers.d/shutdown , o arquivo será ignorado por sudoers , para que você também fique bloqueado nessa situação. Novamente, você pode usar sudo para corrigir 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

Use pkexec desse modo para corrigir propriedade e permissões :

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown
    
por mgd 03.07.2012 / 10:43