sudo: permite que um comando defina uma variável de ambiente

3

No meu sistema Debian Stretch, eu tenho

Defaults        env_reset

no meu /etc/sudoers . Desejo configurar meu sistema para que, ao executar sshuttle , não precise digitar minha senha para a chamada

sudo PYTHONPATH=/usr/lib/python3/dist-packages -- /usr/bin/python3 \
                                                  /usr/bin/sshuttle --method auto --firewall

Então criei um arquivo /etc/sudoers.d/sshuttle com o conteúdo

username    ALL=NOPASSWD: /usr/bin/python3 /usr/bin/sshuttle --method auto --firewall

No entanto, recebo a mensagem de erro

sudo: sorry, you are not allowed to set the following environment variables: PYTHONPATH

A solução ideal

  1. deve permitir que eu execute exatamente esse comando com a configuração de PYTHONPATH , mas não afetaria a segurança da minha configuração sudo , em geral, ou seja, essa restrição ainda deve se aplicar à outra entradas em meus arquivos sudoers .
  2. não exigiria que eu alterasse o código-fonte sshuttle , ou seja, ele deveria funcionar para o comando exato especificado acima sem modificação.

O que tentei até agora:

  1. modifique o arquivo /etc/sudoers.d/sshuttle para ler username ALL=NOPASSWD: PYTHONPATH=/usr/lib/python3/dist-packages /usr/bin/python3 /usr/bin/sshuttle --method auto --firewall , mas isso parece não ser uma sintaxe válida

Notas:

  1. Eu não quero rodar todo o comando sshuttle via sudo, como a) sshuttle não precisa de direitos de root exceto a parte do firewall (o comando esta questão sobre), eb) porque eu sempre preciso inserir a senha para minha chave SSH (que geralmente é desbloqueada via gpg-agent para meu próprio usuário, mas não para o usuário root).
por andreas-h 21.01.2017 / 18:35

1 resposta

3

Se o PYTHONPATH que você precisa for constante, você pode usar /usr/bin/env (a ferramenta unix mais subestimada de todos os tempos ...):

username    ALL=NOPASSWD: /usr/bin/env PYTHONPATH=/usr/lib/python3/dist-packages /usr/bin/python3 /usr/bin/sshuttle --method auto --firewall

Ou escreva um pequeno script que configure o ambiente antes de exec ing o script python.

Se o PYTHONPATH não for constante, você também pode usar username ALL=NOPASSWD: ALL , já que o usuário pode sobrescrever qualquer pacote python que é usado pelo sshuttle e colocar o código fazendo qualquer coisa imaginável lá.

    
por 21.01.2017 / 20:10