O que há de especial em 'PATH' em relação ao resto do ambiente e sudo?

0

De Comando não encontrado ao usar o sudo

it's in fact possible to have sudo use the current PATH (with the env command) and/or the rest of the environment (with the -E option) just by invoking it right:

sudo -E env "PATH=$PATH" <command> [arguments]

In fact, one can make an alias out of it:

alias mysudo='sudo -E env "PATH=$PATH"'

(It's also possible to name the alias itself sudo, replacing the original sudo.)

Por que é que sudo usa o atual PATH com o comando env , em vez da opção -E ?

Por que é que sudo usa o restante do ambiente com a opção -E , em vez do comando env ?

É correto que PATH faça parte do ambiente?

O que é especial sobre PATH em relação ao restante do ambiente?

Obrigado.

Em sudo manpage

sudo tries to be safe when executing external commands. To prevent command spoofing, sudo checks "." and "" (both denoting current directory) last when searching for a command in the user's PATH (if one or both are in the PATH). Note, however, that the actual PATH environment variable is not modified and is passed unchanged to the program that sudo executes.

Isso significa que o usuário PATH é passado inalterado para o comando que sudo executa, por "a variável de ambiente PATH real não é modificada e é passada inalterada para o programa que o sudo executa"?

    
por Tim 26.01.2018 / 14:38

1 resposta

2

Se env_reset estiver habilitado (o que é, por padrão), sudo limpará o ambiente e, em particular, fornecerá seu próprio PATH (consulte secure_path in /etc/sudoers ). Se env_reset estiver desabilitado, env_check e env_delete ainda serão aplicados, e PATH provavelmente será desabilitado. Você pode ver isso em ação, comparando a saída de

echo $PATH

e

sudo printenv PATH

Se você tiver um PATH personalizado, não será exibido na saída de sudo printenv .

O truque env funciona em torno da limpeza do ambiente:

sudo env "PATH=$PATH" command

solicita que sudo execute env "PATH=$PATH" command , com $PATH expandido pelo seu shell para conter seu% atualPATH; env , executando como root e, em seguida, armazena o valor fornecido de PATH em seu ambiente e executa command com esse ambiente.

Portanto, PATH não é especial, exceto no contexto de sudo , dependendo de sua configuração. Qualquer variável pode ser "especial" da mesma maneira, configurando sudo apropriadamente, e PATH pode ser "não-específico" também. Veja o sudo e sudoers manpages para detalhes.

    
por 26.01.2018 / 15:20