NEWS
exec mit sudo
-
Ich möchte ein bash script via exec ausführen. Einer der Befehle in dem Script braucht sudo Rechte.
Wie bekomme ich exec "überredet" ein Script als root auszuführen? Ich bekomme im Log die Fehlermeldungstdout: Error: Command failed: echo -e "MyPassword " | sudo -S MyBashScript We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things: #1) Respect the privacy of others. #2) Think before you type. #3) With great power comes great responsibility. [sudo] password for iobroker: Sorry, try again. [sudo] password for iobroker: Sorry, try again. [sudo] password for iobroker: sudo: no password was provided sudo: 2 incorrect password attempts
Das Passwort ist korrekt. Mein JavaScript command lautet:
exec('echo -e "MyPassword\n" | sudo -S MyBashScript', function (error, stdout, stderr) { console.log('stdout: ' + stdout); console.log('stdout: ' + error); });
Ich habe es schon mit und ohne '\n' probiert. Mein root user auf dem Raspberry heißt pi. Daher habe ich auch
exec('echo -e "MyPassword\n" | sudo -S -u pi MyBashScript', function (error, stdout, stderr) {
versucht. Leider auch vergeblich. Die Fehlermeldung bleibt dieselbe
Habe leider in der Suche nichts gefunden. Hat jemand einen Tipp?PS: Bitte keine Diskussion darüber ob sudo hier Sinn macht oder ob man das tun sollte.
-
Nach diesem Befehl
sudo cat /etc/sudoers.d/iobroker
versteht man diese Zeile besser
iobroker ALL=(ALL) NOPASSWD: /path/to/script
Ist aber möglich, das der fixer oder ein Update das rauswirft also besser in eine andere Datei.
Noch eine kleine Anmerkung:
Du solltest das Skript so mit Rechten versehen das User iobroker es nur ausführen kann, niemals schreiben und am besten auch nicht lesen. Beim Verzeichnis muss schreiben auch verboten sein, weiß abe rnicht mehr was öffnen und lesen genau macht. -
Bitte diesen Artikel sorgfältig lesen.
Die erwähnten Dateien nur mit vissudo bearbeoten
Am besten aber eine neue erzeugen die werden dann zusammengefasst.
Wennannan dieser Stelle ohne vissudo bearbeitet kann man das komplette system sperren.
Vissudo prüft das. -
Ein link damit es auch nen beleg hat.
-
@ticaki
stimmt,
den hatte ich schon kopiert, aber vergessen einzufügen
https://wiki.ubuntuusers.de/sudo/Konfiguration/ -
Today I learned a thing - or 2. Danke schonmal für eure Antworten.
Dokumentation / Minimum Working Example für die Nachwelt:
Ich habe ein test script "reboot" gebaut, das einfach nur einen Reboot durchführen soll.
#!/bin/bash echo "sudo shutdown -r now" sudo shutdown -r now
Das Script liegt in /opt/iobroker/. Mein JavaScript lautet:
exec('sudo /opt/iobroker/reboot', function (error, stdout, stderr) { console.log('stdout: ' + stdout); console.log('stdout: ' + error); });
Über das Kommando
sudo visudo -f /etc/sudoers.d/iobroker
habe ich in /etc/sudoers.d/iobroker folgende neue Zeile ergänzt
iobroker ALL=(ALL) NOPASSWD: /opt/iobroker/reboot
Auf Basis von @ticaki Hinweis, habe ich dem Script noch die Lese-Rechte entfernt (schreiben konnte es schon vorher nicht) mit dem command sudo chmod 751 reboot
pi@iobroker-pi: $ ls -l /opt/iobroker -rwxr-xr-x+ 1 pi pi 388 Jul 30 10:36 reboot pi@iobroker-pi: $ sudo chmod 751 /opt/iobroker/reboot pi@iobroker-pi: $ ls -l /opt/iobroker -rwxr-x--x+ 1 pi pi 388 Jul 30 10:36 reboot
Ich habe sicherheitshalber iobroker neu gestartet, damit die neuen Einträge auch wirklich neu eingelesen werden.
Nun wird das Skript ausgeführt.Danke euch!