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

Author: florin, 2018-09-25

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.

 1
Author: Kamil Maciorowski,
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