Estou enfrentando um comportamento estranho relacionado à preservação de variáveis de ambiente com sudo no macOS (15.2): sudo -E
não preserva a variável de ambiente PERL5LIB
.
Etapas de reprodução
Defina uma variável de ambiente no shell:
export PERL5LIB=foo
. O comandoenv | grep PERL5LIB
retorna como esperado:PERL5LIB=foo
.No entanto, o comando
sudo -E env | grep PERL5LIB
, não retorna nada. Em contraste, isto funciona:sudo --preserve-env=PERL5LIB env | grep PERL5LIB
. Ele preservaPERL5LIB
. com sucesso.
Isso é confuso porque eu esperava sudo -E
preservar todas as variáveis de ambiente do shell de chamada, incluindo PERL5LIB
. Mas, claramente, não está funcionando dessa forma para esta variável específica.
Pergunta
- Por que não é
PERL5LIB
preservadosudo -E
no macOS? - Esse comportamento é específico de
PERL5LIB
ou afeta outras variáveis também? - Qual é a maneira recomendada e confiável de garantir que isso
PERL5LIB
seja preservado ao usar o sudo?
Variáveis correspondentes à
env_delete
lista são removidas do ambiente comsudo -E
akasudo --preserve-env
. Passar a variável para--preserve-env=
adiciona-a novamente com seu valor original, o que efetivamente anula sua presença naenv_delete
lista. (Quando--preserve-env
não está em vigor, aenv_delete
lista não se aplica, mas as variáveis de ambiente são removidas, a menos que estejam naenv_keep
lista, com algumas condições adicionais.)A lista padrão de variáveis de ambiente “ruins” inclui
PATH
configurações do tipo - para várias linguagens de script, incluindoPERL5LIB
Perl,PYTHONPATH
Python,RUBYLIB
Ruby, etc. (Mas nãoPATH
ela mesma, que é tratada de forma especial.)Essa lista é específica do sistema operacional e pode ser obtida executando
sudo -V
como root. Citando a página de manual do sudoers(5) :Use
sudo --preserve-env=PERL5LIB
se quiser preservar especificamentePERL5LIB
. Você pode alterar aenv_delete
opção regra por regra nosudoers
arquivo. Se adicionar uma regra específica, lembre-se de que a última correspondência se aplica , então coloque-a após a regra genérica para "Eu-posso-me-tornar-root", se for relevante.