Kehren Sie von einem benutzerdefinierten Benutzer zu ec2-user zurück

342
florin

Beim Erstellen einer ec2-Instanz verwende ich ein Bootstrap-Skript. In der Instanz installiere und konfiguriere ich einen Nginx-Webserver. Aus Sicherheitsgründen muss ich einen neuen Benutzer erstellen (www-data).

Der www-data-Benutzer wird erstellt mit:

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

Zusätzlich führe ich auf diesem Rechner einige Python-Skripte aus. Dafür habe ich virtualenv verwendet. Ich führe den folgenden Ablauf 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 exiterledigt die Eingabe die Arbeit. Innerhalb des Bootstrap-Skripts wird das Skript beendet.

Ich habe es mit versucht, su ec2-useraber es fragt nach dem Passwort. Ich habe keine

Wie kehrt man von einem anderen Benutzer zu ec2-user zurück? Oder wie Sie es umgehen können

0

1 Antwort auf die Frage

1
Kamil Maciorowski

Wenn Sie geben diese

su www-data whatever something-else exit 

suStartet eine zusätzliche Shell als www-dataBenutzer. Dann tippen Sie fortlaufende Befehle, die in dieser Shell ausgeführt werden, sodass exitSie zur alten Shell zurückkehren.

Wenn sich diese Befehle in einem Skript befinden, whateverwerden sie nicht in der zusätzlichen Shell ausgeführt. Die ursprüngliche Shell wartet, subis sie beendet wird, bevor sie whateverweitergeht. Wenn Sie ein solches Skript (eine Datei wie script.shmit korrektem Shebang) vom Terminal aus ausführen, werden Sie zu einer interaktiven Shell geleitet. Geben Sie exitdort von Hand ein, um mit dem Skript fortzufahren.

In einem Bootstrap-Skript ist jetzt kein TTY angehängt, es su www-datakann keine interaktive Shell gestartet werden und wird sofort beendet. Der Rest des Skripts wird ausgeführt (offensichtlich nicht als www-dataBenutzer). und wenn es exitirgendwo ist, wird das Skript beendet.

Der sauberste Weg, um damit umzugehen, ist das Einfügen von whateverund something-elsein ein separates Hilfsskript, das Sie dann in Ihrem Hauptskript aufrufen können

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

Das Hauptskript wartet, subis es beendet wird. 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 mühsam sein, wenn die Befehle zitiert werden müssen. Es gibt kein solches Problem mit einem zusätzlichen Skript.

Eine andere Option könnte ein [heredoc] (https://en.wikipedia.org/wiki/Here_document#Unix_shells) sein - `su www-data < Attie vor 5 Jahren 0