Retornar ao usuário ec2 de um usuário personalizado

0

Ao criar uma instância do ec2, eu uso um script de bootstrap. Na instância, eu instalo e configuro um servidor da Web nginx. Por motivos de segurança, preciso criar um novo usuário (www-data).

O usuário www-data é criado usando:

sudo groupadd www-data
sudo adduser www-data -g www-data
sudo passwd -d www-data

Adicional eu corro alguns scripts python nessa máquina. Para isso eu usei virtualenv. Eu corro o seguinte fluxo:

su www-data
pip install --user virtualenv 
python -m virtualenv $VIRTUALENV_NAME
cd /path/to/bin
source activate
pip install 'stuff'
deactivate

Meu problema ocorre após o fluxo acima quando eu quero retornar ao usuário ec2. No terminal, digitando exit faz o trabalho. Dentro do script de boot, ele sairá do script.

Eu tentei com su ec2-user , mas ele pede senha. Eu não tenho um.

Como retornar ao usuário ec2 de outro usuário? Ou como resolver isso

    
por florin 25.09.2018 / 15:48

1 resposta

1

Quando você digita esta

su www-data
whatever
something-else
exit

su inicia um shell adicional como www-data user. Então você digita comandos consecutivos, eles são executados neste shell, então exit traz de volta ao shell antigo.

Se esses comandos estiverem em um script, whatever não será executado no shell adicional. O shell original esperará que su saia antes de ir para whatever e mais. Se você executar um script desse tipo (um arquivo como script.sh com shebang adequado) do terminal, você será levado a um shell interativo . Digite exit à mão para continuar com o script.

Agora dentro de um script de bootstrap não há nenhum TTY anexado, su www-data não pode iniciar um shell interativo e sai imediatamente. O restante do script é executado (obviamente, não como www-data user); e se houver exit em algum lugar, sairá do script.

A maneira mais limpa de lidar com isso é inserir whatever e something-else em um script auxiliar separado, então você pode invocar em seu script principal

su www-data -c "/path/to/the/helper/script"

O script principal aguardará a saída de su . Quando isso acontece, qualquer linha a seguir é executada pelo usuário original.

Outra maneira é assim:

su www-data -c 'whatever; something-else'

ou equivalentemente

su www-data -c '
whatever
something-else
'

A última abordagem pode ser problemática se os comandos precisarem de cotação. Não existe esse problema com um script adicional.

    
por 25.09.2018 / 16:37