Verwenden Sie sudo mit Passwort als Parameter [geschlossen]

83

Ich möchte sudo mit meinem Passwort als Parameter ausführen, damit ich es für ein Skript verwenden kann. Ich habe es versucht

sudo -S mypassword execute_command

aber ohne Erfolg. Irgendwelche Vorschläge?

ccman
quelle
2
Sie sollten nur überprüfen, ob Ihr Skript von "root" ausgeführt wird. Es ist schlecht, das Passwort zu wiederholen, es wird in der Geschichte gefunden ...
kbdjockey
4
Es ist viel besser, sudorichtig zu konfigurieren , dass für bestimmte Programme / Benutzer / Gruppen kein Kennwort abgefragt wird, um solche schmutzigen Hacks zu vermeiden.
Eile

Antworten:

183

Mit dem -S-Schalter liest sudo das Passwort von STDIN. Das heißt, Sie können tun

echo mypassword | sudo -S command

um das passwort an sudo weiterzugeben

Die Vorschläge anderer, bei denen das Kennwort nicht als Teil eines Befehls übergeben wird, z. B. die Überprüfung, ob der Benutzer root ist, sind aus Sicherheitsgründen wahrscheinlich viel bessere Ideen

stoneam92
quelle
das hat funktioniert, vielen vielen danke !!
normalUser
hat meinen Tag gerettet, vielen Dank !!!
Adrianes
Wie sei es in einem speziellen Ordner setzt sowohl sich als auch den Ordner Nur - Ausführen-Berechtigungen geben: sudo chmod -R 0100 myScriptFolder? Würde dies nicht die Sicherheitsprobleme lösen (vorausgesetzt, niemand außer Ihnen verwendet Ihren Computer als Root)?
Brōtsyorfuzthrāx
Oder können Hacker von außerhalb meines lokalen Netzwerks den Skripttext unter bestimmten Umständen so sehen, wie er ausgeführt wird?
Brōtsyorfuzthrāx
Das hat für mich auf meiner OSX-Box wie ein Champion funktioniert! Vielen Dank für das Teilen der Lösung!
Wulf
51

Sie können das sBit für Ihr Skript so festlegen , dass es nicht sudoals Root benötigt und ausgeführt wird (und Sie müssen Ihr Root-Passwort nicht in das Skript schreiben):

sudo chmod +s myscript
perreal
quelle
+1. Dies ist viel besser (und sicherer) als die anderen Methoden.
Burkhard
1
klebriges bisschen ist schlechte Praxis nein?
Kbdjockey
@kbdjockey - +sist das Setuid-Bit. +tist das klebrige Stück.
Robᵩ
@ Rob - danke für die Klarstellung
kbdjockey
4
Beachten Sie, dass die meisten Betriebssysteme dieses Flag für interpretierte Skriptdateien ignorieren. Dies funktioniert gut auf Binärdateien tho.
Magnar
26
echo -e "YOURPASSWORD\n" | sudo -S yourcommand
matteomattei
quelle
Dies funktioniert nicht, wenn ich ein Argument für meinen Befehl habe. zum Beispiel. echo -e "YOURPASSWORD\n" | sudo -S "run -x". Es heißt sudo: run -x: command not found. Irgendeine Idee, wie man das umgehen kann?
Biene
1
@Bhathiya verwendet einfach keine "Anführungszeichen", zum Beispiel: echo -e "YOURPASSWORD \ n" | sudo -S ls -l / root
matteomattei
Großartig, danke ...
Bee
3

Eine Möglichkeit besteht darin, das -A-Flag für sudo zu verwenden. Dies führt ein Programm aus, um nach dem Passwort zu fragen. Anstatt zu fragen, könnten Sie ein Skript haben, das nur das Passwort ausspuckt, damit das Programm fortgesetzt werden kann.

Lucas Holt
quelle
-3
# Make sure only root can run our script
if [ "$(id -u)" != "0" ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi
kbdjockey
quelle
4
Dies beantwortet die Frage von OP nicht.
Codeforester