Rückkehr zu ec2-user von einem benutzerdefinierten Benutzer
Beim Erstellen einer ec2-Instanz verwende ich ein Bootstrap-Skript. Auf der Instanz installiere und konfiguriere ich einen Nginx-Webserver. Aus Sicherheitsgründen muss ich einen neuen Benutzer erstellen (www-data).
Der Benutzer www-data wird erstellt mit:
sudo groupadd www-data
sudo adduser www-data -g www-data
sudo passwd -d www-data
Zusätzlich führe ich einige Python-Skripte auf diesem Computer aus. Dafür habe ich virtualenv. Ich führe den folgenden Fluss aus:
su www-data
pip install --user virtualenv
python -m virtualenv $VIRTUALENV_NAME
cd /path/to/bin
source activate
pip install `stuff`
deactivate
Mein Problem tritt nach dem obigen Ablauf auf, wenn ich zu ec2-user zurückkehren möchte. Im Terminal Eingabe exit
die Arbeit macht. Innerhalb des Bootstrap-Skripts wird das Skript beendet.
Ich habe es mit su ec2-user
versucht, aber es wird nach dem Passwort gefragt. Ich habe keinen.
Wie kann ich von einem anderen Benutzer zu ec2-user zurückkehren? Oder wie man es umgeht
1 answers
Wenn Sie geben Sie dieses
su www-data
whatever
something-else
exit
su
startet eine zusätzliche Shell als www-data
user. Dann geben Sie aufeinanderfolgende Befehle ein, sie werden in dieser Shell ausgeführt, sodass exit
Sie zur alten Shell zurückbringt.
Wenn sich diese Befehle in einem Skript befinden, wird whatever
nicht in der zusätzlichen Shell ausgeführt. Die ursprüngliche Shell wartet darauf, dass su
beendet wird, bevor sie zu whatever
und weiter geht. Wenn Sie ein solches Skript (eine Datei wie script.sh
mit dem richtigen Shebang) vom Terminal aus ausführen, sie werden zu einer interaktiven Shell gebracht. Geben Sie exit
dort von Hand ein, um mit dem Skript fortzufahren.
Jetzt ist in einem Bootstrap-Skript kein TTY angehängt, su www-data
kann keine interaktive Shell starten und wird sofort beendet. Der Rest des Skripts wird ausgeführt (offensichtlich nicht als www-data
user); und wenn es irgendwo exit
gibt, wird das Skript beendet.
Der sauberste Weg, damit umzugehen, besteht darin, whatever
und something-else
in ein separates Hilfsskript einzufügen, dann können Sie in Ihrem Hauptskript
su www-data -c "/path/to/the/helper/script"
Das Hauptskript wartet auf das Beenden von su
. In diesem Fall wird jede folgende Zeile vom ursprünglichen Benutzer ausgeführt.
Ein Anderer Weg ist wie folgt:
su www-data -c 'whatever; something-else'
Oder gleichwertig
su www-data -c '
whatever
something-else
'
Der letztere Ansatz kann problematisch sein, wenn die Befehle zitiert werden müssen. Es gibt kein solches problem mit einem zusätzlichen script.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2018-09-25 15:08:14