Eu tenho acesso ao sudo no servidor dos meus amigos, executando o centos-6.3, mas quando tento executar alguns comandos, como sudo vim /var/www/html/index.html
recebo um erro sudo: vim: command not found
, posso, no entanto, executar sudo su
e depois vim /var/www/html/index.html
funcionar como esperado.
echo $PATH
e sudo echo $PATH
ambos produzem:
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/jared/bin
sudo which vim
no entanto produz:
which: no vim in (/sbin:/bin:/usr/sbin:/usr/bin)
Eu tentei adicionar
export PATH=$PATH:/usr/local/bin
ao /root/.bashrc
que corrigiu o problema ao usar, sudo su
mas não apenas sudo <command>
.
Como faço sudo <command>
para trabalhar?
Respostas:
Durante a execução
sudo
, muitos sistemas são configurados para limpar o ambiente de todos os valores não incluídos na lista de permissões e redefinir a variável PATH para um valor higienizado.Você vai encontrar a primeira como
Defaults env_reset
e váriosDefaults env_keep += "SOME_VARIABLE_NAME"
no/etc/sudoers
. A últimaPATH
substituição "segura" é especificada comoDefaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
- exclua esta linha para remover esse comportamento aosudo
ing.Como qual variável de ambiente é manipulada é impressa quando você executa
sudo -V
comoroot
.Se você não quiser se livrar desses padrões, sempre poderá especificar programas usando o caminho completo (
sudo /usr/local/bin/vim
).Como alternativa, você pode permitir sua conta
SETENV
nosudoers
arquivo, por exemplo:Isso permite que você substitua os padrões do ambiente como este
sudo PATH=$PATH which vim
:, como a variável é interpretada pelo seu shell antes da execução do comando, resultando em uma herançaPATH
(que provavelmente não incluirá/sbin
etc.).fonte
não faz o que você pensa.
$PATH
é substituído pelo (seu) shell antes de executar o comando.Para realizar o comportamento desejado, você pode usar
sudo -i
.Do man sudo :
fonte
Até você resolver o problema com os caminhos, use um nome de caminho completo
fonte