Como definir o caminho para os comandos sudo

23

Se eu emitir

sudo my-command

como o Linux procura por my-command ?

O my-command está no meu PATH. Eu posso invocá-lo sem nenhum problema. No entanto, quando invoco-o com sudo , recebo command not found . Interessante, nunca experimente isso antes. Como superar?

EDIT: Essa resposta duplicada "Possível duplicada" está errada, bem, pelo menos não ao ponto. Esta resposta, de terdon, é a correta.

    
por xpt 13.06.2015 / 18:43

2 respostas

28

Normalmente, isso é definido pela opção secure_path em /etc/sudoers . De man sudoers :

 secure_path   Path used for every command run from sudo.  If you don't
               trust the people running sudo to have a sane PATH environ‐
               ment variable you may want to use this.  Another use is if
               you want to have the “root path” be separate from the “user
               path”.  Users in the group specified by the exempt_group
               option are not affected by secure_path.  This option is not
               set by default.

Para executar comandos que não estão no padrão $PATH , você pode

  1. Use o caminho completo: sudo ~/bin/my-command ; ou

  2. Adicione o diretório contendo o comando para secure_path . Execute sudo visudo e edite a linha do caminho seguro:

    Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/youruser/bin/"
    

    Salve o arquivo e, da próxima vez que você executar sudo , o diretório ~/bin estará em $PATH .

por 14.06.2015 / 00:25
1

Isso é o que eu usei para uma solução alternativa:

sudo cp $(which my-command) /usr/bin
...

O comando which é executado em um subshell que não é root, portanto, ele pode localizar my-command , então, sudo copia o executável para um caminho que o usuário root pode acessar. Não é bom para a segurança, mas foi ok para mim executar uma imagem do docker que estava sendo destruída logo após o comando ser executado.

    
por 18.09.2018 / 03:05