Ich versuche ein Skript wie dieses zu erstellen:
#!/bin/bash
sudo -s
something...
Wenn ich es ausführe, erhalte ich eine neue Shell, die jedoch something
nur ausgeführt wird, wenn ich die von erstellte Shell verlasse sudo -s
und nicht darin.
Irgendeine Hilfe?
shell-script
sudo
Matteo
quelle
quelle
sudo -s
nur für den Fall, dass derroot
Benutzer die (eher schlechte) Idee hatte, seine Shell zu ändern. Dies sollte wirklich sein,sudo sh
was explizit angibt, welche Shell verwendet werden soll.Eine andere Möglichkeit wäre, einen vollständigen Bash-Befehl an Folgendes zu übergeben
sudo
:Ein besserer Weg wäre jedoch, stattdessen das Skript mit zu starten
sudo
. Es ist keine sehr gute Idee,sudo
das Skript zu verwenden. Es ist weitaus besser, das gesamte Skript mit Root-Rechten auszuführen (sudo script.sh
). Bei Bedarf können Siesudo
Berechtigungen für bestimmte Befehle löschen. Beispielsweise:Das Ausführen des obigen Skripts gibt Folgendes zurück:
quelle
Die Bourne-Shell verfügt über ein
-c
Flag, mit dem Sie ein beliebiges Skript an die Shell übergeben können, damit Sie so etwas schreiben könnenDies ist jedoch nur für die einfachsten Befehle nützlich, da es sehr umständlich ist, das Skript korrekt zu zitieren, und die Unannehmlichkeiten noch größer sind, wenn Sie den Befehl über ssh an einen Remote-Server senden, da das Argument-Skript zweimal nebeneinander analysiert wird Senden des Skripts und einmal auf der Seite, auf der das Skript ausgeführt wird.
Wenn
something
es sich um ein komplexes Skript handelt oder über eine SSH- Zeile übergeben werden muss, ist es üblich, eine Funktion zu schreiben,prepare_something_script
deren Aufgabe es ist, das Skript 'etwas' auf stdout zu schreiben . In ihrer einfachsten Form kann diese Funktion ein Here-Dokument verwenden, um ihre Ausgabe zu generieren:Das von erstellte Skript
prepare_something_script
kann dann lokal mit den von sudo gewährten Berechtigungen wie folgt ausgeführt werden:In dem Szenario, in dem das Skript mit von sudo gewährten Berechtigungen remote ausgeführt werden muss, ist es üblich, das Skript in Base 64 zu codieren, um eine Umleitung der Standardeingabe von ssh wie folgt zu vermeiden :
Wenn Sie diesen Code in einer Funktion verwenden, vergessen Sie nicht , die markieren something64 Variable als lokal . Einige Implementierungen von base64 bieten ein
-d
Flag zum Dekodieren, das weniger gut unterstützt wird als die ausführliche--decode
Variante. Bei einigen Implementierungen muss-w 0
dem Codierungsbefehl ein hinzugefügt werden , um falsche Zeilenumbrüche zu vermeiden.quelle
Sie müssen den Befehl vor sudo -s anstatt in der nächsten Zeile hinzufügen.
quelle