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?


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


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

+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

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.


-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

4
Dies beantwortet die Frage von OP nicht.
Codeforester
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.