Wie führe ich ein Skript als anderer Benutzer ohne Passwort aus?

145

Ich habe script.sh, das als user2 ausgeführt werden muss. Dieses Skript kann jedoch nur unter Benutzer1 in meiner Anwendung ausgeführt werden.

Ich möchte, dass der folgende Befehl ausgeführt wird:

su user2 -C script.sh

aber in der Lage sein, ohne Passwort zu laufen.

Ich möchte auch, dass dies sehr restriktiv ist, da in Benutzer1 nur script.sh unter Benutzer2 und sonst nichts ausgeführt werden kann.

Ich habe versucht, dies mit sudoers file zu tun, und war nach stundenlangem Versuch endlos verwirrt.

Wenn jemand ein explizites Beispiel dafür liefern kann, wie dies erreicht werden kann (anstelle von etwas Generischem wie Use Sudoers), wäre dies sehr dankbar.

user788171
quelle
15
Ich bin nicht besonders mit dem Schluss. Dies ist eine Frage, wie das System auf eine bestimmte Weise programmiert werden kann. Als solches geht es um Shell-Programmierung und liegt im Bereich von SO, was Fragen zur Programmierung betrifft. Es ist klar, dass einige Leute dies nicht als so unangebracht ansehen, dass es abgelehnt werden sollte; Die Frage und die Antworten haben alle eine beträchtliche Anzahl von Stimmen.
Jonathan Leffler

Antworten:

121

Rufen Sie an visudound fügen Sie Folgendes hinzu:

user1 ALL=(user2) NOPASSWD: /home/user2/bin/test.sh

Die Befehlspfade müssen absolut sein ! Dann rufen Sie sudo -u user2 /home/user2/bin/test.shaus einer user1Shell. Getan.

Pyroskop
quelle
3
Es gibt eine schöne Beschreibung des Sudoers- Formats in der Ubuntu-Hilfe. Manpage für Sudoer ist hässlich :(
Mifeet
Wie würde diese Skalierung für alle Benutzer als Benutzer2 statt nur als Benutzer1 ausgeführt?
Jiggunjer
193

versuche zu laufen:

su -c "Your command right here" -s /bin/sh username

Dadurch wird der Befehl als Benutzername ausgeführt, vorausgesetzt, Sie haben die Berechtigung, als dieser Benutzer sudo zu verwenden.

Jeronimo Robles
quelle
17
Es funktionierte als normaler Benutzer mit vollen Sudo-Rechten wie sudo su -c "Your command right here" -s /bin/sh otheruser
folgt
5
Nur ein Hinweis für jeden Mac-Benutzer, anscheinend ist die Syntax etwas anders : su username -c "command".
NHDaly
1
Wenn Sie versuchen, screenals anderer Benutzer zu starten, ist dies möglicherweise hilfreich - linuxquestions.org/questions/linux-software-2/…
Mint
2
Wenn username(oder in der Frage user2) selbst ein Passwort vorhanden ist, kann die Eingabeaufforderung nicht übersprungen werden. Die andere Antwort lautet: Kein Passwort erforderlich, sowohl Benutzer1 als auch Benutzer2.
Phil294
1
`su -c "Your command right here" -s /bin/sh username`

Der obige Befehl ist korrekt, aber unter Red Hat kann cron, wenn Selinux dies erzwingt, keine Skripte als anderer Benutzer ausführen. Beispiel; execl: couldn't exec /bin/sh execl: Permission denied

Ich musste setroubleshoot und setools installieren und Folgendes ausführen, um dies zu ermöglichen:

yum install setroubleshoot setools
sealert -a /var/log/audit/audit.log
grep crond /var/log/audit/audit.log | audit2allow -M mypol
semodule -i mypol.p
C Jaskoski
quelle