Como posso manter o * all * environment vars para um comando específico no sudo?

6

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

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

Existe uma maneira de configurar essa entrada sudoers para permitir que o comando complete o acesso aos chamadores env vars?

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

Quando eu executo o comando sudo no meu script:

sudo -E build.sh "$@"

Eu recebo:

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

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

    
por John Hunt 30.09.2013 / 16:18

3 respostas

4

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

Após 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 *
    
por 02.02.2014 / 08:04
1

Se você quiser permitir que os usuários no grupo deploy 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 são excluídas.

Não há muito sentido em restringir o comando se você permitir que o usuário preserve todas as variáveis de ambiente, já que isso provavelmente permitirá que o usuário execute código arbitrário através de alguma variável.

Se você revisou cuidadosamente seu script e tem certeza de que possui uma lista exaustiva de variáveis de ambiente que precisam ser removidas, é possível 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
    
por 02.10.2013 / 03:09
0

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"
    
por 06.10.2014 / 22:54