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


23

Existe alguma maneira de especificar que sudodeve preservar determinadas variáveis ​​de ambiente apenas para comandos especificados? Para alguns propósitos, eu gostaria do meu $HOMEenv. variável preservada quando executo certos comandos. Para outros propósitos e outros comandos, quero redefinir. Isso pode ser feito /etc/sudoers?

Editar:

Obrigado pelas respostas. Gostaria de saber se posso fazer uma pergunta de acompanhamento, que é "Por que, então, isso não funciona?"

No exemplo que estou tentando trabalhar, quero sudo nanoler o 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. Alguma sugestão sobre o porquê? (Estou no teste do Debian, aliás.)

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


1
Em vez de tentar fazer com que o nano execute o sudo para usar o mesmo arquivo de configuração, use-o sudoedit. sudoeditirá executar copie o conteúdo de um arquivo para um arquivo tmp e execute o editor de sua escolha como usuário, quando o editor sair, verificará se você mudou alguma coisa e, se for o caso, substitua o original pelo editado. Você pode selecionar qual editor deseja que seja executado configurando os $EDITORenv $ ou $ VISUAL`.
— Arrowmaster 17/05

@ Arrowmaster - obrigado, isso parece ser uma abordagem melhor do que a que eu estava brincando. Desde que eu já estou enrolando sudocom uma função do meu próprio, eu simplesmente adicionado um if [ "$1" == "$EDITOR" ]; thenbloco e agora estou chamando sudoeditem vez :)
— simon

Respostas:


21

Para substituir env_keepapenas por /path/to/command(quando chamado por qualquer regra, por qualquer usuário) e pelo usuário joe(não importa qual comando ele esteja executando):

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

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


brilhante, obrigado. Não consegui encontrar um exemplo adequado dessa sintaxe. Agora que você me explicou, posso ver como deveria ter resolvido isso a partir da manpágina e me sinto um pouco tolo. Sem dúvida, essa resposta também ajudará outras pessoas.
— simon

1
@ Simon: Não se sinta tolo, eu também acho difícil descobrir a descrição da sintaxe na sudoerspágina de manual da descrição formal e os exemplos mais fáceis de localizar se você já sabe como escrevê-las.
— Gilles 'SO- stop be evil'

hmm - talvez eu tenha conversado em breve. Agora que eu tento isso, não consigo fazê-lo funcionar. Posso incomodá-lo a dar uma olhada na minha revisão?
— 17166 simon

1
@ Simon: Meu palpite é que você também tem uma entrada que permite fazer tudo e não possui essa env_keepconfiguração ( simon ALL = ALL). Sudo usa a última entrada correspondente.
— Gilles 'SO- stop be evil'

Cuidado, se secure_path está definida, você também terá que adicionar padrões: joe secure_path
— Jistanidiot

6
Cmnd_Alias      PBUILDER = /usr/sbin/pbuilder,/usr/sbin/cowbuilder
Defaults!PBUILDER       env_keep+=HOME

Essas linhas são próprias /etc/sudoerspara corrigir o problema que pbuilderprocura $HOMEseu arquivo de configuração do usuário, mas deve ser executado como root (movê-lo para /rootmeio que derrota o propósito de ter um sistema e um arquivo de configuração do usuário).


Sim, esse é um caso de uso muito semelhante ao que eu tinha em mente, obrigado!
— 17166 simon

você tem alguma idéia de por que os exemplos na minha revisão não parecem funcionar?
— 17166 simon

O @simon sudo é muito exigente quanto à ordem das entradas em sua configuração; as entradas posteriores substituirão as anteriores. Pode haver algum conflito como esse na sua configuração.
— Arrowmaster 17/05

1

homens que sofrem:

   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_keepe env_checkno seu / etc / sudoers.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.