Como executo comandos sudo específicos sem uma senha?

211

Em uma máquina específica, muitas vezes preciso executar sudocomandos de vez em quando. Eu estou bem com a digitação da senha sudona maioria dos casos.

No entanto, existem três sudocomandos que desejo executar sem inserir a senha :

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

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

Bhavesh Diwan
fonte

Respostas:

283

Use a NOPASSWDdiretiva

Você pode usar a NOPASSWDdiretiva em seu /etc/sudoersarquivo .

Se seu usuário for chamado usere seu host for chamado, hostvocê poderá adicionar estas linhas a /etc/sudoers:

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

Isso permitirá que o usuário userexecute os comandos desejados hostsem inserir uma senha. Todos os outros sudocomandos ed ainda exigirão uma senha.

Os comandos especificados no sudoersarquivo devem ser totalmente qualificados (ou seja, usando o caminho absoluto para a execução do comando), conforme descrito na sudoerspágina de manual . Fornecer um caminho relativo é considerado um erro de sintaxe.

Se o comando terminar com um /caractere à direita 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 userpode executar qualquer comando no diretório /home/someuser/bin/:

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

Nota: Sempre use o comando visudopara editar o sudoersarquivo para garantir que você não fique bloqueado no sistema - caso você acidentalmente grave algo incorreto no sudoersarquivo. visudosalvará o arquivo modificado em um local temporário e somente substituirá o sudoersarquivo real se o arquivo modificado puder ser analisado sem erros.

Usando em /etc/sudoers.dvez de modificar/etc/sudoers

Como alternativa à edição do /etc/sudoersarquivo, você pode adicionar as duas linhas a um novo arquivo, por /etc/sudoers.dexemplo /etc/sudoers.d/shutdown. Essa é uma maneira elegante de separar diferentes alterações nos sudodireitos e também deixa o sudoersarquivo original intacto para atualizações mais fáceis.

Nota: Novamente, você deve usar o comando visudopara 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 sejam definidos corretamente.

Se sudoersestá bagunçado

Se você não usou visudopara editar seus arquivos e, em seguida, acidentalmente estragou /etc/sudoersou estragou um arquivo /etc/sudoers.d, será bloqueado sudo.

A solução pode ser corrigir os arquivos usando o pkexecque é uma alternativa sudo.

Para corrigir /etc/sudoers:

pkexec visudo

Para corrigir /etc/sudoers.d/shutdown:

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

Se a propriedade e / ou as permissões estiverem incorretas para qualquer sudoersarquivo, o arquivo será ignorado e, sudoportanto, você também poderá ficar bloqueado nessa situação. Novamente, você pode usar pkexecpara 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 pkexecassim para corrigir propriedade e permissões :

pkexec chown root:root /etc/sudoers.d/shutdown
pkexec chmod 0440 /etc/sudoers.d/shutdown
mgd
fonte
2
As duas linhas se referem especificamente a esses dois comandos. Se usernão sudohouver direitos de outras maneiras , nenhum outro comando poderá ser sudo por este usuário. Dê uma olhada man sudoe man sudoers.
MGD
4
@StanKurdziel Tentei com esta linha no Mac OS X Yosemite e funcionou muito bem: mgd ALL=(root) NOPASSWD: /var/root/test. Eu sou usuário mgde ALLsignifica "de todos os hosts" . /var/root/testé um script simples "Olá Mundo" shell com permissões: -rwx------ 1 root wheel 27 12 Jun 09:54 /var/root/test. Fiz outras alterações ao sistema.
mgd 12/06
2
O que há hostno arquivo sudoers?
user106563
1
Não é uma resposta, é um guia quase completo sobre a diretiva NOPASSWD. Obrigado.
Eray
1
@ Michael, leia a página de manual. 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 pode ser executado apenas sem argumentos de linha de comando.
mgd
3

Desculpe, mas há tanta confusão sobre isso e algumas respostas realmente complicadas, que sinto que devo pesar aqui antes que alguém entenda errado e faça algo louco.

Usando visudo !!

Adicione as seguintes linhas à configuração:

ALL ALL=NOPASSWD: /sbin/reboot,/sbin/shutdown

Isso permite que os comandos, reinicialize e desligue com quaisquer parâmetros a serem executados por qualquer usuário.

Empilhe a troca, apenas dê respostas sucintas simples.

Coruja
fonte