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 deploy
grupo 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 -V
para 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 visudo
e comente as duas linhas mostradas abaixo. Comentar apenas env_reset
não funciona
#Defaults env_reset
Defaults mail_badpass
#Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$PATH"