NEWS
JavaScript Exec Befehle auf Client (NAS) ausführen
-
Kurzer Zwischenstand: Ich konnte den Fehler soweit eingrenzen und eine Umgehungslösung schaffen. Hintergrund: Die ssh-Befehle werden vom User iobroker ausgeführt. Dieser verfügt bei neuen Installationen nicht mehr über die entsprechenden Rechte. Gleiches gilt auch, wenn das Fixer-Skript ausgeführt wurde.
Als Umgehungslösungen habe ich jetzt in der /etc/suders.d den Schutz des Users iobroker vollständig aufgehoben (iobroker ALL=(ALL:ALL) NOPASSWD: ALL), was dem eigentlichen Anliegen widerspricht.
Besser wäre, dem iobroker nur die Ausführung der ssh-Befehle zu erlauben. Leider waren alle Versuche bisher erfolglos.Welches iobroker-Modul ist für die Ausführung verantwortlich?
-
@Pandia
zum besseren testen, ob die Befehle mit den Berechtigungen funktionieren,
kannst du die auf der Kommandozeile auch als iobroker ausführenMit dem folgenden Befehl startest du ein neues bash mit iobroker als user
sudo -u iobroker /bin/bash
unter welchem user liegen den deine ssh-keys auf deinem iobroker-rechner?
du musst ssh genau mit dem user ausführen, sonst findet er die keys nicht.
deinem post nach bist du der user pidemnach müsste in sudoers so etwas drin stehen
iobroker ALL = (pi) NOPASSWD: hier der ssh befehl
und ausführen dann mit
sudo -u pi hier dein ssh befehl
-
Auf dem iobroker-Rechner stehen für die User pi und iobroker ssh-keys zur Verfügung.
Folgendes ssh-Kommando soll auf dem Client ausgeführt werden: ssh pegasus -l admin sudo /etc/init.d/CloudLink.sh start
Habe unter /etc/suders.d/ die Datei iobroker_cumstom mit folgendem Inhalt angelegt:
iobroker ALL = (pi) NOPASSWD: ssh pegasus -l admin sudo /etc/init.d/CloudLink.sh start
Anschließend auf der Konsole versucht bash mit use iobroker zu starten:
pi@ioBroker0:~ $ sudo -u iobroker /bin/bash
/etc/sudoers.d/iobroker_custom: Syntax-Fehler near line 1 <<<
sudo: Syntax-Fehler in /etc/sudoers.d/iobroker_custom bei der Zeile 1
sudo: Keine gültige sudoers-Quelle gefunden, Programmende
sudo: Regelwerks-Plugin konnte nicht initialisiert werden
pi@ioBroker0:~ $Hast du noch eine Idee?
-
und was ist das Ergebnis deines Versuchs?
- kommst du auf die shell als user iobroker? Dann müsste im prompt iobroker@ioBroker1 stehen
- wenn du auf der shell mit dem user iobroker angekommen bist, was ist das Ergebnis/Fehlermeldung deines ssh befehls?
Also ssh pegasus -l admin sudo /etc/init.d/CloudLink.sh start
-
Ich komme nicht auf die shell als iobroker. Syntax-Fehler:
/etc/sudoers.d/iobroker_custom: Syntax-Fehler near line 1 <<<
sudo: Syntax-Fehler in /etc/sudoers.d/iobroker_custom bei der Zeile 1
sudo: Keine gültige sudoers-Quelle gefunden, Programmende
sudo: Regelwerks-Plugin konnte nicht initialisiert werden
pi@ioBroker0:~ $ -
Habe den fehlerhaften Eintrag in der /etc/sudoers.d/iobroker_custom gelöscht. Shell wurde initialisiert. Die ssh-Kommandos werden korrekt auf dem Client ausgeführt.
Die Ausführung durch das Java-Skript geht nicht durch.
Hier der Auszug aus dem iobroker-Log:
-
@Pandia Hast du nach dem Löschen den Skript-Adapter oder gar den Host mal neu gestartet?
-
bose böse, diese datei mit einem normalen editor zu bearbeiten
https://wiki.ubuntuusers.de/sudo/Konfiguration/
lese insbesondere den roten kasten
da steht dann auch genau drin wie die datei sudoers aufgebaut ist.
ich habe das oben auch nur adaptiert, evtl. ist mir auch ein fehler passiert, wegen was der syntax fehler kommt -
@Pandia
dann musst du um diese uhrzeit mal in der syslog nachschauen, ob da Fehler auftauchen
oder es scheint noch einen unterschied zu geben, wie iobroker shell komandos ausführt. -
@Pandia
noch eine frage, da du ja sudo auf dem anderen rechner ausführst.
da wird kein passwort benötigt?
Ich weiß im LAN ist das mit der Sicherheit nicht ganz so dramatisch.
ideal wäre, wenn auf dem anderer Rechner ein eigener (technischer) user existiert,
der genau die Kommandos ausführen darf die du möchtest und das ohne passwort.
also auf dem anderen Rechner ebenfalls die sudoers pflegen
mit ssh meldest du dich dann direkt als dieser user an.in deinem beispiel meldest du dich als user admin auf dem anderen rechner an und machst sudo um höhere rechte zu bekommen. ist das notwendig?
-
Habe nach dem Löschen den Skript-Adapter und Host neu gestartet. Befehle gehen nicht durch.
-
@OliverIO
Das Syslog des Host enthält zum Zeitpunkt der Ausführung keine Fehlermeldung. Was mich wundert. Es wird überhaupt nichts aufgezeichnet. Der Prozess muss schon vorher abbrechen. -
@OliverIO
Das sudo auf dem Host ist nicht zwingend notwendig, da der User admin über die entsprechenden Rechte verfügt. Der Prozess lässt sich im Nachgang noch sicherer gestalten. Der Aufruf vom Host muss erst mal richtig ankommen.