Su als root und run Befehl in einer Zeile

8

Ich muss als root su und einen Befehl als einzelne Zeile ausführen. Dies ist für die Verwendung in einem Python-Skript vorgesehen. Was ich suche ist:

$ su root [some-magic] sh /home/jay/script-that-needs-executing-as-root.sh
<script output>

Dies ist auf einem öffentlichen Ubuntu-Server. Das Konto, auf dem dies ausgeführt wird, hat kein Kennwort, wurde jedoch so eingerichtet, dass im Grunde nicht auf alles zugegriffen werden kann, abgesehen von einem Python-Skript, das schreibgeschützt ist und sich am Ende in ~ / .profile befindet

cd ~/py/main
python3 start.py
logout

Sie haben also keinen wirklichen Zugriff auf den Server. Innerhalb des Python-Skripts funktioniert su. Wenn dies erforderlich ist, kann der Benutzer shellasrootdas Python-Skript eingeben, das Root-Passwort eingeben und Befehle ausführen. Ich suche jedoch nach einer Möglichkeit, dies programmgesteuert zu tun.


TL; DR - Auf einem Konto ohne Sudo-Berechtigungen muss ich ein Shell-Skript als Root in einer Zeile ausführen.

Jay Williams
quelle
Wenn Sie ein funktionierendes Root-Konto haben und der Benutzer Zugriff auf das Root-Passwort hat, geben Sie ihm einfach sudoZugriff. Sie haben bereits die Macht, alles zu brechen, was sie möglicherweise brechen können. Sie können ihnen auch Sudo-Zugriff gewähren, um nur Ihr Skript auszuführen. Wäre das eine anständige Problemumgehung?
Terdon
Grundsätzlich verwenden mehrere Personen das Konto, aber nur einige benötigen Root-Zugriff im Python-Skript. Daher möchte ich keine Sicherheitslücke öffnen, in der das Skript Root-Zugriff hat, indem Sie das gemeinsame Kennwort eingeben (das jeder kennt), wenn dies sinnvoll ist . Mich zu kennen, tut es wahrscheinlich nicht
Jay Williams
thegeekdiary.com/what-is-suid-sgid-and-sticky-bit erwägen, das SUID-Bit in Ihrem Skript zu verwenden; Wenn nur ein Teil des Skripts Root-Rechte erfordert, sollten Sie diesen Teil in ein zweites Skript extrahieren. Erstellen Sie eine neue Gruppen-ID speziell für die Skriptausführung und lassen Sie nur diejenigen Benutzer, die sie ausführen können sollen, Teil der Gruppe sein. Das Skript, das Root-Rechte benötigt, ist das einzige, das root mit suid set gehört. Dies würde verhindern, dass jemals das Root-Passwort vergeben werden muss.
Ron

Antworten:

16

Sie können die -cOption verwenden su, einen einzelnen Befehl zu übergeben.

su root -c 'sh /home/jay/script-that-needs-executing-as-root.sh'
Munir
quelle
1
Perfekt! Vielen Dank. Würde upvote aber brauche mehr rep dafür :)
Jay Williams