Esta é a PATH
variável sem sudo:
$ echo 'echo $PATH' | sh
/opt/local/ruby/bin:/usr/bin:/bin
Esta é a PATH
variável com sudo:
$ echo 'echo $PATH' | sudo sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin
Tanto quanto eu posso dizer, sudo
deve deixar PATH
intocado. O que está acontecendo? Como eu mudo isso? (Isso é no Ubuntu 8.04).
ATUALIZAÇÃO: até onde posso ver, nenhum dos scripts foi iniciado como mudança de raiz de PATH
forma alguma.
De man sudo
:
Para impedir a falsificação de comandos, o sudo verifica ``. '' E `` '' (ambos indicando o diretório atual) por último ao procurar um comando no PATH do usuário (se um ou ambos estiverem no PATH). Observe, no entanto, que a variável de ambiente PATH real não é modificada e é passada inalterada para o programa que o sudo executa.
path
environment-variables
sudo
Michiel de Mare
fonte
fonte
Respostas:
Isto é
uma função irritanteuma característica do sudo em muitas distribuições.Para contornar esse "problema" no ubuntu, faça o seguinte no meu ~ / .bashrc
Observe que o acima funcionará para comandos que não redefinem o $ PATH. No entanto, `su 'redefine seu $ PATH; portanto, você deve usar -p para dizer que não. IE:
fonte
Caso outra pessoa atravesse isso e queira apenas desativar todas as variáveis de caminho alteradas para todos os usuários.
Acesse o arquivo sudoers usando o comando:
visudo
. Você deve ver a seguinte linha em algum lugar:que você deve adicionar o seguinte na próxima linha
secure_path está ativado por padrão. Esta opção especifica o que fazer $ PATH ao sudoar. O ponto de exclamação desativa o recurso.
fonte
Defaults env_keep = "PATH"
PATH
é uma variável de ambiente e, como tal, é redefinida por padrão pelo sudo.Você precisa de permissões especiais para poder fazer isso.
De
man sudo
Um exemplo de uso:
atualizar
Portanto, pode ser necessário verificar se isso é / não está compilado.
É por padrão no Gentoo
fonte
Parece que esse bug existe há algum tempo! Aqui estão algumas referências de erros que você pode achar úteis (e podem se inscrever em / votar, dica, dica ...):
Bug Debian # 85123 ("sudo: SECURE_PATH ainda não pode ser substituído") (a partir de 2001!)
Eles mencionam colocar algo assim no seu arquivo sudoers:
mas quando faço isso no Ubuntu 8.10, pelo menos, ele me dá este erro:
Bug no Ubuntu # 50797 ("o sudo construído com --with-secure-path é problemático")
Bug no Ubuntu # 192651 ("o caminho do sudo é sempre redefinido")
Bug no Ubuntu # 226595 ("impossível manter / especificar PATH")
fonte
Isso pareceu funcionar para mim
que assume o não-sudo
PATH
fonte
Na verdade, é desejável que o sudo redefina o PATH: caso contrário, um invasor que comprometa sua conta de usuário pode colocar versões backdoored de todos os tipos de ferramentas no PATH dos usuários, e elas serão executadas ao usar o sudo.
(é claro que o sudo redefiniu o PATH não é uma solução completa para esses tipos de problemas, mas ajuda)
É de fato o que acontece quando você usa
em / etc / sudoers sem usar
exempt_group
ouenv_keep
.Isso também é conveniente porque você pode adicionar diretórios que são úteis apenas para raiz (como
/sbin
e/usr/sbin
) ao caminho do sudo sem adicioná-los aos caminhos dos usuários. Para especificar o caminho a ser usado pelo sudo:fonte
Trabalha agora usando o sudo dos repositórios karmic. Detalhes da minha configuração:
É maravilhoso finalmente resolver isso sem usar um hack.
fonte
fonte
Apenas comente "Padrões env_reset" em / etc / sudoers
fonte
Editar apenas
env_keep
em/etc/sudoers
Parece algo como isto:
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE"
Basta acrescentar PATH no final, para que após a alteração fique assim:
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASURE MENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL L ANGUAGE LINGUAS XDG_SESSION_COOKIE PATH"
Feche o terminal e abra novamente.
fonte
Secure_path é seu amigo, mas se você deseja se eximir de secure_path, apenas
E acrescentar
Se você deseja isentar um monte de usuários, crie um grupo, adicione todos os usuários a ele e use-o como seu exempt_group. man 5 sudoers por mais.
fonte
a solução recomendada nos comentários da distribuição do OpenSUSE sugere mudar:
para:
e, em seguida, presumivelmente para comentar a seguinte linha que não é necessária:
fonte
comente "Env_reset padrão" e "caminho seguro seguro ..." no arquivo / etc / sudores funciona para mim
fonte
Você também pode mover seu arquivo em um diretório usado pelo sudoers:
fonte
Er, não é realmente um teste se você não adicionar algo ao seu caminho:
fonte
O PATH será redefinido ao usar su ou sudo pela definição de ENV_SUPATH e ENV_PATH definida em /etc/login.defs
fonte
$ PATH é uma variável de ambiente e significa que o valor de $ PATH pode ser diferente para outros usuários.
Quando você está fazendo login no seu sistema, a configuração do seu perfil decide o valor do $ PATH .
Agora, vamos dar uma olhada: -
Suponha que esses sejam os valores de $ PATH para diferentes usuários. Agora, quando você estiver executando qualquer comando com sudo, o usuário raiz, na realidade, executa esse comando.
Você pode confirmar executando estes comandos no terminal: -
Esta é a razão. Eu acho que está claro para você.
fonte