Linux Benutzer wechseln und Befehl sofort ausführen

8

Ich habe ein Szenario, in dem ich zu einem anderen Benutzer wechseln muss und danach den Linux-Befehl ausführen muss.

Mein Befehl ist so etwas

( echo myPassword | sudo -S su hduser ) && bash /usr/local/hadoop/sbin/start-dfs.sh

aber mit diesem Befehl wechsle ich zum Benutzer und der nächste Befehl wurde beim vorherigen Benutzer ausgelöst.

Gibt es welche, die ich mit einem Shell-Skript erreichen kann?

Akash Sethi
quelle
6
Beachten Sie, dass dieser Befehl Ihr Passwort im Klartext in Ihrer Bash-Verlaufsdatei speichert.
Spektren

Antworten:

18

Versuchen.

sudo -H -u TARGET_USER bash -c 'bash /usr/local/hadoop/sbin/start-dfs.sh' 

siehe man sudo :

-H

Die Option -H (HOME) fordert die Sicherheitsrichtlinie auf, die Umgebungsvariable HOME auf das Ausgangsverzeichnis des Zielbenutzers (standardmäßig root) festzulegen, wie in der Kennwortdatenbank angegeben. Abhängig von der Richtlinie kann dies das Standardverhalten sein.

-u Benutzer

Die Option -u (Benutzer) bewirkt, dass sudo den angegebenen Befehl als anderer Benutzer als root ausführt. Verwenden Sie #uid, um eine UID anstelle eines Benutzernamens anzugeben. Wenn Sie Befehle als UID ausführen, müssen Sie bei vielen Shells das '#' mit einem Backslash ('\') maskieren. Sicherheitsrichtlinien können UIDs auf die in der Kennwortdatenbank aufgeführten beschränken. Die sudoers-Richtlinie erlaubt Uids, die sich nicht in der Kennwortdatenbank befinden, solange die Option targetpw nicht festgelegt ist. Andere Sicherheitsrichtlinien unterstützen dies möglicherweise nicht.

αғsнιη
quelle
4
Warum ... bash -c 'bash file.sh'? Könntest du es nicht so schreiben ... bash file.sh?
user000001
4

Mit können su user -c "sh /path/command.sh"Sie einen Befehl als Benutzer ausführen .

Ich habe mit diesem Befehl getestet:

 echo myPassword | sudo -S su - foobar -c "/usr/bin/watch -n 1 cat /etc/resolv.conf"

Danach watch -nlief der als Foobar.

Ich denke, Ihr Befehl sollte so funktionieren:

echo myPassword | sudo -S su - hduser -c "bash /usr/local/hadoop/sbin/start-dfs.sh"
Chloeoe
quelle
2

Hier eine kürzere Version der Antwort von αғsнιη :

sudo -Hu user command
# example: sudo -Hu root fish
joseluisq
quelle
1

Sie könnten dieses versuchen:

pkexec - Führt einen Befehl als anderer Benutzer aus

pkexec [--Benutzername] PROGRAMM [ARGUMENTE ...]

Buyduck
quelle
auf meiner Seite getestet. Wenn jedoch kein Home-Verzeichnis vorhanden ist, liegt ein Fehler vor Error changing to home directory /home/foobar: No such file or directory. Ich habe es erstellt, aber vielleicht gibt es eine bessere Lösung ohne Home-Ordner
Chloeoe