Was ist eine gute Möglichkeit, ein Shell-Skript als anderer Benutzer auszuführen? Ich verwende Debian Etch und weiß, welchen Benutzer ich nachahmen möchte.
Wenn ich es manuell machen würde, würde ich tun:
su postgres
./backup_db.sh /tmp/test
exit
Da ich den Prozess automatisieren möchte, brauche ich eine Möglichkeit, backup_db.sh als postgres auszuführen (die Umgebung zu erben usw.)
Vielen Dank!
-
(oder--login
) zusammen mit--command, -c
eigentlich keine Anmeldesitzung, da-c
immer eine Nicht-Anmeldeshell erzwungen wird.- postgress
sollte das am Ende des Befehls erscheinen. Von der Manpage:When - is used, it must be specified before any username. For portability it is recommended to use it as last option, before any username. The other forms (-l and --login) do not have this restriction.
Wenn für den auszuführenden Zielbenutzer die Shell nologin definiert ist, können Sie die Shell mit der Option -s angeben:
Siehe folgende Frage: Führen Sie das Skript als Benutzer mit einer Nologin-Shell aus
quelle
Um dies nach einem Zeitplan zu automatisieren, können Sie es in die Crontab des Benutzers einfügen. Cron-Jobs erhalten zwar nicht die vollständige Umgebung, aber es ist möglicherweise besser, alle benötigten env-Variablen im Skript selbst zu platzieren.
So bearbeiten Sie die Crontab des Benutzers:
quelle
Dies sollte eine informative Readsetuid für Shell-Skripte sein
Wenn Sie " " su mit einer
- username
Argumentsequenz ausführen , wird eine Anmeldeshell für den Benutzer erstellt, die dieselbe Umgebung wie der Benutzer angibt. Wird normalerweise verwendet, um Ihr Skript schnell über ein anderes Login in Ihrer häuslichen Umgebung auszuführen.quelle
Versuchen Sie die Manpage su:
su -c script_run_as_postgres.sh - postgres
Alternativ können Sie sudo verwenden, um nur dieses Kommando als postgres ohne Kennwort auszuführen. Es erfordert jedoch einige Einstellungen in Ihrer / etc / sudoers.
quelle
Die von anderen veröffentlichte Methode "su -c ..." ist eine gute. Zur Automatisierung können Sie das Skript zur Crontab des Benutzers hinzufügen, unter dem es ausgeführt werden soll.
quelle
Wenn der Benutzer bereits einen Eintrag in sudo hat und Sie das Kennwort des Superbenutzers nicht kennen, können Sie Folgendes versuchen: Dieser führt einen Neustart der unter /data/my-db/pgsql/9.6/data initialisierten Postgres durch
quelle
Sie können auch verwenden:
quelle