`/ 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).

simon
fonte
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.

Gilles 'SO- parar de ser mau'
fonte
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).

Arrowmaster
fonte
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.

Paweł Brodacki
fonte