Como posso manter *todos* os vars de ambiente para um comando específico no sudo?

Como posso manter *todos* os vars de ambiente para um comando específico no sudo?

Eu tenho um script que define várias variáveis ​​de ambiente e finalmente chama outro script usando o sudo.

O script executado com sudo deve ser capaz de capturar essas variáveis, e nem sempre terei certeza de quais são essas variáveis.

Existe uma maneira de configurar esta entrada sudoers para permitir ao comando acesso completo aos env vars dos chamadores?

%deploy ALL=NOPASSWD: /bin/build.sh

Quando executo o comando sudo do meu script:

sudo -E build.sh "$@"

Eu recebo:

sudo: sorry, you are not allowed to preserve the environment

Pesquisando no Google, só encontrei maneiras de preservar variáveis ​​específicas e não apenas tudo.

Responder1

Depois de testar a primeira resposta e ainda obter sudo: sorry, you are not allowed to preserve the environment, decidi procurar uma solução melhor.

Depois de alguns testes, descobri que a opção que importa é setenv.

Defaults!/bin/build.sh setenv

Para torná-lo um pouco mais seguro, podemos adicionar algumas configurações:

Defaults    secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11/bin"
Defaults!/bin/build.sh setenv,env_reset,env_delete+=PATH,env_delete+=LD_PRELOAD,env_delete+=LD_LIBRARY_PATH,env_delete+=SSH_AUTH_SOCK,env_delete+=PYTHONPATH,env_delete+=PERL5LIB
%deploy  ALL=(ALL) NOPASSWD: /bin/build.sh *

Responder2

Se você quiser permitir que os usuários do deploygrupo executem qualquer comando com praticamente qualquer variável de ambiente:

Defaults:%deploy !env_reset,env_delete-=PYTHONPATH,env_delete-=PERL5LIB
%deploy ALL = (ALL) ALL

Execute sudo -Vpara ver quais variáveis ​​foram excluídas.

Não faz muito sentido restringir o comando se você permitir que o usuário preserve todas as variáveis ​​de ambiente, pois isso provavelmente permitirá que o usuário execute código arbitrário por meio de alguma variável.

Se você revisou cuidadosamente seu script e tem certeza de que possui uma lista completa de variáveis ​​de ambiente que precisam ser removidas, poderá especificar que essas variáveis ​​de ambiente devem ser excluídas e todas as outras devem ser mantidas.

Defaults!/bin/build.sh !env_reset,env_delete+=DANGEROUS_VAR
%deploy ALL = (ALL) /bin/build.sh

Responder3

Execute sudo visudoe comente as duas linhas mostradas abaixo. Comentar apenas env_resetnão funciona

#Defaults       env_reset
Defaults        mail_badpass
#Defaults       secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"

informação relacionada