Executando algumas partes de um script como um usuário não privilegiado com ambiente shell

2

Estou criando um script de configuração de instâncias que configura uma máquina.

Estou executando o script via sudo, por exemplo, sudo run.sh . A maioria das etapas requer acesso root, mas algumas das etapas do script não exigem acesso root e eu prefiro executá-las como o usuário sem privilégios que executou o sudo.

Dentro do script que está sendo executado com o sudo, estou tentando fazer

sudo -i -u username sh -c 'echo $MY_ENV'

Como .bashrc contém export MY_ENV=something , espero que o comando acima imprima "algo"

Como posso alternar temporariamente o script para outro usuário para executar comandos que incluam o env de shell do usuário ?

    
por Michael 11.04.2015 / 09:42

1 resposta

2

.bashrc é executado apenas por shells interativos, não por scripts¹. É o lugar errado para definir variáveis de ambiente. Veja Existe um arquivo equivalente ".bashrc" lido por todos os shells? e o wiki do Ubuntu .

Você pode dizer ao bash para ler .bashrc explicitamente. É claro que você terá que executar bash , não sh , que pode ser um shell diferente:

sudo -i -u username bash -c '. '~/.bashrc; echo "$MY_ENV"'

Mas é uma má ideia porque os arquivos .bashrc provavelmente contêm coisas que assumem que são executadas em um terminal e que gastam tempo configurando associações de teclas, aliases, prompts, etc.

A solução sã é colocar as definições de variáveis de ambiente onde elas pertencem, em ~/.profile ou ~/.pam_environment .

¹ Exceto quando o bash é chamado por sshd por algum motivo estranho.

    
por 12.04.2015 / 03:32

Tags