GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Führen Sie ein Shell-Skript als ein anderer Benutzer aus

Lösung 1:

Um Ihr Skript als ein anderer Benutzer als einen Befehl auszuführen, führen Sie Folgendes aus:

/bin/su -c "/path/to/backup_db.sh /tmp/test" - postgres

Breaking it down:
 /bin/su : switch user
 -c "/path/to..." : command to run
 - : option to su, make it a login session (source profile for the user)
 postgres : user to become

Ich empfehle, in Skripten wie diesem immer vollständige Pfade zu verwenden - Sie können nicht immer garantieren, dass Sie sich im richtigen Verzeichnis befinden, wenn Sie su (vielleicht hat jemand das Homedir bei Ihnen geändert, wer weiß). Ich verwende auch immer den vollständigen Pfad zu su (/bin/su), weil ich paranoid bin. Es ist möglich, dass jemand Ihren Pfad bearbeitet und Sie veranlasst, eine kompromittierte Version von su zu verwenden.

Lösung 2:

Wenn für den auszuführenden Zielbenutzer nologin shelll definiert ist, können Sie die Option -s verwenden, um die Shell anzugeben:

/bin/su -s /bin/bash -c '/path/to/your/script' testuser

Siehe folgende Frage:Skript als Benutzer ausführen, der keine Login-Shell hat

Lösung 3:

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 Umgebungsvariablen sowieso in das Skript selbst einzufügen.

So bearbeiten Sie die Crontab des Benutzers:

sudo crontab -u postgres -e

Lösung 4:

Dies sollte eine informative Lektüre sein – setuid auf Shell-Skripten

Wenn Sie su ausführen mit einem "- username "-Argumentsequenz wird eine Login-Shell für den Benutzer erstellt, um dieselbe Umgebung wie der Benutzer bereitzustellen. Wird normalerweise verwendet, um Ihr Skript schnell mit Ihrer Heimumgebung von einem anderen Login aus auszuführen.

Lösung 5:

Probieren Sie die su-Manpage aus:

su -c script_run_as_postgres.sh - postgres

Alternativ können Sie sudo verwenden, um nur diesen Befehl als Postgres ohne Passwort auszuführen. Es erfordert jedoch einige Einstellungen in /etc/sudoers.


Linux
  1. UNIX / Linux:Was ist eine Shell? Was sind verschiedene Muscheln?

  2. Wie führen Sie ein Skript beim Anmelden in * nix aus?

  3. Shell-Skript parallel ausführen

  4. So führen Sie ein Shell-Skript beim Start aus

  5. Führen Sie ein Shell-Skript im neuen Terminal vom aktuellen Terminal aus

So führen Sie einen Linux-Shell-Befehl / ein Skript im Hintergrund aus

So führen Sie Shell-Skript als SystemD-Dienst in Linux aus

Skript mit Argumenten als Benutzer ausführen?

Wo wird ein Shell-Skript ausgeführt?

So führen Sie Python-Skripte von der Shell aus

So erstellen und führen Sie ein Shell-Skript in Ubuntu 22.04 aus