Preciso executar um programa instalado em / opt / godi / sbin (um diretório personalizado). Se eu adicionar esse diretório ao meu PATH, adicionando a seguinte linha ao meu arquivo .bashrc
export PATH=$PATH:/opt/godi/bin:/opt/godi/sbin
então eu posso tentar executar o comando sem problemas (exceto que ele falha porque precisa do sudo). No entanto, quando tento usar o sudo:
sudo godi_console
Estou tendo o erro a seguir
sudo: godi_console: command not found
A inspeção da variável PATH após o uso do sudo revela que não está incluindo o mesmo PATH que eu tenho como usuário normal:
$ sudo sh
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
Por que o PATH não é o mesmo? Estou fazendo algo errado? Estou no Debian Jessie e, infelizmente, não consigo contornar o problema, passando sudo o link absoluto para godi_console, porque o próprio godi_console também depende do PATH ser configurado corretamente.
sudo -E godi_console
.-E
significa "preservar o meio ambiente".secure_path
e / ou env_reset estiverem configurados como é o caso em muitassudo
implantações como no Debian.su
nãosudo
, é unix.stackexchange.com/questions/460478 .Respostas:
Você sempre pode fazer:
Como medida de segurança no Debian,
/etc/sudoers
tem asecure_path
opção definida como um valor seguro.Observe que:
Onde
sudo
trata os argumentos principais que contêm=
caracteres como atribuições de variáveis de ambiente por si só, também funcionariagodi_console
com o seu$PATH
(em oposição aosecure_path
) em seu ambiente, mas não afetariasudo
o caminho de pesquisa do executável, por isso não ajudaria asudo
encontrá-logodi_console
.fonte
sudo "PATH=$PATH" godi_console
a propósito, não funcionou no CentOs7. Necessário o env #sudo "PATH=$PATH" godi_console
vez realmente funciona?sudo
aceitaVAR=value
argumentos, afetando o ambiente do comando que ele executa, mas diferente deenv
oubash
,sudo
não parece deixar isso afetar a maneira como ele pesquisa o comando. Eu só testei isso (recentemente) no Ubuntu 16.04. Mas tentei adicionar aexempt_group
opçãosudoers
(apenas para teste - não considero isso uma solução!) E os resultados foram esclarecedores. Os comandos do formulárioPATH="$PATH" sudo some-command
começaram a funcionar, mas os do formuláriosudo PATH="$PATH" some-command
ainda não.Você também pode definir o PATH padrão em
/etc/sudoers
edite o arquivo usando
visudo
e atualize a linha para o que você desejar:
Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin
fonte
SUDO está redefinindo as variáveis env por padrão.
Confira seu manual e opção chamada env_reset.
Você só precisa desativá-lo em / etc / sudoers.
fonte
env_reset
parece não afetarsudo
o comportamento de w / r / t PATH.Isso funciona :
Exemplo de chamada do meu
gps
script que lista os processos da Nvidia GPU:Explicação:
fonte
isso ultrapassa secure_path do meu lado
fonte
Isso funcionou:
Não altere $ PATH com o valor do caminho, basta escrever desta maneira
exemplo:
$ sudo env "PATH=$PATH" ant -f webAppConfig.xml regenWebAppConf....
fonte
Talvez não seja exatamente o que o OP pede, mas isso pode ajudar:
Isso altera o PATH dentro do comando sudoed.
Edit: Eu não tenho certeza do que eu quis dizer com isso, como o acima é praticamente um absurdo. Use o seguinte:
fonte