Como exportar variáveis para uso com o sudo?

19

No Slackware, usar sbopkg permite criar um pacote a partir do código-fonte. Repos não é grande como o Debian, mas é legal.

Algum software pode usar variáveis de ambiente, por exemplo, no emulador VICE c64, se a variável FFMPEG está definido como yes , ele habilitará ffmpeg gravando o emulador.

Eu tentei usar

$ export FFMPEG=yes; sudo sbopkg -B -i vice

mas ffmpeg está desativado.

Em vez disso, tive que usar

$ su -
$ export FFMPEG=yes
$ sbopkg -B -i vice

que funciona.

Como usar variáveis de ambiente com sudo ?

    
por elbarna 16.01.2017 / 18:19

3 respostas

34

Você pode usar a opção -E do sudo:

FMPEG=yes sudo -E sbopkg -B -i vice

Do manual:

-E, --preserve-env

Indicates to the security policy that the user wishes to preserve their existing environment variables. The security policy may return an error if the user does not have permission to preserve the environment.

Observe que isso exporta all suas variáveis de ambiente existentes. É mais seguro exportar apenas as variáveis de ambiente necessárias com a seguinte sintaxe :

sudo FMPEG=yes sbopkg -B -i vice

    
por 16.01.2017 / 18:22
9

sudo higieniza as variáveis no ambiente antes de chamar o comando especificado. Você terá que pedir para preservar as variáveis no ambiente para que seu comando funcione.

Além disso, você terá que export a variável FMPEG antes de usar sudo ( export FMPEG=yes; sudo ), atribuí-la da mesma maneira que invocar sudo ( FMPEG=yes sudo ) ou usar env ( env FMPEG=yes sudo ).

Para preservar as variáveis de ambiente, use -E (ou --preserve-env ):

$ env FMPEG=yes sudo -E sbopkg -B -i vice

Também é possível definir variáveis de ambiente específicas como esta:

$ sudo FMPEG=yes sbopkg -B -i vice

Se isso falhar devido à política de segurança em vigor, abra um shell de root e defina a variável lá:

$ sudo -s
# env FMPEG=yes sbopkg -B -i vice
# exit
    
por 16.01.2017 / 18:33
6

observe que: (export a=b; command) é equivalente a a=b command . Observe os colchetes.

Então, se aplicarmos a variável não a sudo , mas direcionar para sbopkg , então, em vez de FFMPEG=yes sudo sbopkg -B -i vice nós podemos fazer sudo FFMPEG=yes sbopkg -B -i vice

Se uma polícia de segurança evitar isso, então: sudo bash -c "FFMPEG=yes sbopkg -B -i vice"

(Não use -E , é inseguro, pois vazará todos os tipos de variáveis inesperadas.)

    
por 16.01.2017 / 18:57