'/ etc / sudoers' - especifica 'env_keep' apenas para um comando?

22

Existe alguma maneira de especificar que sudo deve preservar determinadas variáveis de ambiente apenas para comandos especificados? Para alguns propósitos, gostaria que meu $HOME env. variável preservada quando eu executo certos comandos. Para outros propósitos e outros comandos, quero que seja redefinido. Isso pode ser feito com /etc/sudoers ?

Editar:

Obrigado pelas respostas. Eu me pergunto se eu poderia fazer uma pergunta de acompanhamento, que é "Por que, então, isso não funciona?"

No exemplo que estou tentando trabalhar, quero que sudo nano leia meu $HOME/.nanorc . Se eu usar isso:

Defaults:simon env_keep=HOME

funciona perfeitamente. Se eu usar isso:

Defaults!/bin/nano env_keep=HOME

ou isto:

Cmnd_Alias      NANO = /usr/bin/nano,/bin/nano,/bin/rnano
Defaults!NANO   env_keep=HOME

não está funcionando de jeito nenhum. Alguma sugestão quanto ao porquê? (Eu estou no teste Debian, btw.)

(Nota: eu não acho que é nano específico, btw - eu posso reproduzir o comportamento com um script bash de uma linha que simplesmente echo s $HOME ).

    
por simon 16.05.2011 / 08:45

3 respostas

20

Para substituir env_keep apenas para /path/to/command (quando invocado por qualquer regra, por qualquer usuário) e para o usuário joe (independentemente do comando que esteja executando):

Defaults!/path/to/command env_keep=HOME
Defaults:joe env_keep=HOME

Você pode usar -= ou += para remover ou adicionar uma entrada à lista env_keep .

    
por 16.05.2011 / 09:42
6
Cmnd_Alias      PBUILDER = /usr/sbin/pbuilder,/usr/sbin/cowbuilder
Defaults!PBUILDER       env_keep+=HOME

Essas linhas são do meu próprio /etc/sudoers para corrigir o problema que pbuilder procura em $HOME para seu arquivo de configuração do usuário, mas deve ser executado como raiz (movê-lo para /root meio que anula o propósito de ter um sistema e um arquivo de configuração do usuário).

    
por 16.05.2011 / 23:13
1

man sudoers:

   env_reset       If set, sudo will reset the environment to only contain
                   the LOGNAME, SHELL, USER, USERNAME and the SUDO_*
                   variables.  Any variables in the caller’s environment
                   that match the env_keep and env_check lists are then
                   added.  The default contents of the env_keep and
                   env_check lists are displayed when sudo is run by root
                   with the -V option.  If the secure_path option is set,
                   its value will be used for the PATH environment
                   variable.  This flag is on by default.

Portanto, sim, você pode fazer isso usando env_reset , env_keep e env_check em seu / etc / sudoers.

    
por 16.05.2011 / 09:26

Tags