Ritorna all'utente ec2 da un utente personalizzato


0

Quando creo un'istanza ec2 uso uno script bootstrap. Nell'istanza installo e configuro un server web nginx. Per motivi di sicurezza, devo creare un nuovo utente (dati www).

L'utente www-data viene creato usando:

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

Inoltre, eseguo alcuni script Python su quella macchina. Per questo ho usato virtualenv. Eseguo il seguente flusso:

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

Il mio problema si verifica dopo il flusso precedente quando voglio tornare all'utente ec2. Nel terminale digitando exitfa il lavoro. All'interno dello script bootstrap uscirà dallo script.

Ho provato con su ec2-userma richiede la password. Non ne ho uno.

Come tornare all'utente ec2 da un altro utente? O come aggirare il problema

Risposte:


1

Quando si digita questo

su www-data
whatever
something-else
exit

suavvia una shell aggiuntiva come www-datautente. Quindi digiti comandi consecutivi, vengono eseguiti in questa shell, quindi exitti riporta alla vecchia shell.

Se questi comandi si trovano in uno script, whatevernon verranno eseguiti nella shell aggiuntiva. La shell originale attenderà sul'uscita prima di andare whateveravanti e oltre. Se esegui un tale script (un file simile script.sha shebang corretto) dal terminale, verrai indirizzato a una shell interattiva . Digita exitlì a mano per continuare con lo script.

Ora all'interno di uno script bootstrap non è collegato TTY, su www-datanon è possibile avviare una shell interattiva ed uscire immediatamente. Il resto dello script viene eseguito (ovviamente non come www-datautente); e se c'è exitda qualche parte, uscirà dallo script.

Il modo più pulito per gestirlo è inserire whatevere something-elsein uno script helper separato, quindi puoi invocare il tuo script principale

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

Lo script principale attenderà sul'uscita. Quando accade, qualsiasi riga seguente viene eseguita dall'utente originale.

Un altro modo è come questo:

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

o equivalentemente

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

Quest'ultimo approccio può essere problematico se i comandi devono essere quotati. Non esiste un problema del genere con uno script aggiuntivo.


Un'altra opzione potrebbe essere una eredità - su www-data <<EOF...EOF
Attie
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.