Bookworm node-red exec reboot problem

Rund um die Software von Revolution Pi
Post Reply
EngelTom
Posts: 3
Joined: 13 Jan 2022, 00:17

Bookworm node-red exec reboot problem

Post by EngelTom »

Sehr geehrte Damen und Herren,

eines Vorweg:
Neues Bookworm Image + neues Cockpit ist sehr gelungen. - toll gemacht!

Auf meinem RevPi Core S läuft Bookworm + NodeRed Server, kein GUI.
Bei Node-Red - Dashboard 2.0 installiert.
Bei der Verwendung des "node-red exec" Node versuche ich ein reboot durchzuführen, das mit einer Fehlermeldung endet (siehe Anhang).

Mein Versuch, den Befehl in den sudoers einzugeben, scheiterte ebenfalls:
1.) Datei "010_nodered-restart" im Verzeichnis /etc/sudoers erstellt.

Code: Select all

root@RevPi03:/etc/sudoers.d# l
-r--r----- 1 root root   83 17. Nov 12:05 010_nodered-restart
2.) Eintrag erstellt, daß der User nodered die Berechtigung zum reboot ohne Kennworteingabe hat:

Code: Select all

nodered ALL=(root) NOPASSWD:/usr/bin/systemctl restart, /usr/bin/systemctl restart
3.) Reboot

Ich vermute, daß es etwas mit den "Privilegien" zu tun hat, wie es in der Fehlermeldung geschrieben steht.

Wo können diese Privilegien angepasst werden, so daß ein Reboot oder ein Shutdown via Nodered durchgeführt werden kann, ohne die Sicherheit zu stark zu öffnen?
Der User nodered ist in der Gruppe "sudo":

Code: Select all

root@RevPi03:/home/pi# cat /etc/group | grep sudo
sudo:x:27:pi,nodered

Ich wäre für jeden Hinweis sehr dankbar, auch wo ich nachlesen könnte...

Vielen Dank im Voraus,
mit freundlichen Grüßen,

EngelTom
Attachments
NoderRed exec restart error msg.
NoderRed exec restart error msg.
----
RevPi Core S, RevPi Core 3+, RevPi Core 3
User avatar
RevPiModIO
KUNBUS
Posts: 335
Joined: 20 Jan 2017, 08:44
Contact:

Re: Bookworm node-red exec reboot problem

Post by RevPiModIO »

Hallo EngelTom!

Der Node-RED Service wird bei uns in einer systemd-Sandbox ausgeführt, wo ein paar "Machenschaften" reduziert werden. Aber für deinen Fall können wir das auf deinem System ändern.

Zur sudoers-Datei: Wenn du das system neu starten möchtest brauchst du den Befehl "/usr/bin/systemctl reboot". Der "restart" bräuchte noch ein systemd unit Namen, und würde nur den neu starten. Da du Zwei Befehle in der sudoers hast und ich in deinem Node-RED sehe, planst du auch ein shutdown. Dafür in der Datei "sudo /usr/bin/systemctl poweroff" eintragen. Die Datei müsste dann so aussehen:

Code: Select all

pi@RevPi94373:~$ cat /etc/sudoers.d/010_nodered-restart 
nodered ALL=(root) NOPASSWD:/usr/bin/systemctl reboot, /usr/bin/systemctl poweroff
Du hast nodered bereits zur Gruppe sudo hinzugefügt, das ist absolut richtig.

Nun müssen wir noch die Restriktionen vom systemd file für nodered ändern. Auf meinem System habe ich die Parameter "ProtectKernelModules" und "ProtectKernelTunables" auf "no" gesetzt. Dann kann ich über die exec-Knoten mit dem Befehl "sudo /usr/bin/systemctl reboot" das System neu starten.

Die Parameter findest du in der Datei "/lib/systemd/system/nodered.service". Jedoch würde die Datei bei einem Update überschrieben werden. Wenn du diese Änderungen dauerhaft behalten möchtest, gehe bitte wie folg vor:

Code: Select all

sudo mkdir -p /etc/systemd/system/nodered.service.d

cat | sudo tee /etc/systemd/system/nodered.service.d/unprotect_kernel.conf <<__END__
[Service]
ProtectKernelModules=no
ProtectKernelTunables=no
__END__
Gruß
Sven
python3-RevPiModIO - https://revpimodio.org/ || Der RevPi ist das Beste, was passieren konnte!
EngelTom
Posts: 3
Joined: 13 Jan 2022, 00:17

Re: Bookworm node-red exec reboot problem

Post by EngelTom »

Hallo Sven,

vielen Dank für die rasche Antwort. Auf diese Lösung wäre ich nie gekommen. - Es hat funktioniert!

Ich hatte die Datei "/lib/systemd/system/nodered.service" bereits in der Hand. Habe mich aber nicht getraut etwas zu verändern, schon gar nicht bei den Parametern mit "...KernelModules" oder ähnliches.

Danke für die Richtigstellung mit "...reboot" und "...poweroff" in der 010_nodered_restart Datei. Du hast es richtig erkannt, ich hatte das eh so gemeint.

Nach der Übernahme aller deiner Änderungen und einem reboot, bekam ich im Nodered beim Ausführen meiner "exec nodes" folgende Fehlermeldung:

Code: Select all

Command failed: sudo /usr/bin/systemctl reboot
sudo: Zum Lesen des Passworts ist ein Terminal erforderlich; verwenden Sie entweder die Option -S, um aus der Standardeingabe zu lesen oder richten Sie das Askpass-Hilfsprogramm ein
sudo: Ein Passwort ist notwendig
Das bedeutete, daß der sudo-Befehl funktioniert hat, aber durch die Passwortabfrage abgebrochen wurde.

Da ich zuvor zum Testen dem User nodered ein Passwort vergeben habe, wurde mir dies nun zum Verhängnis.
Nach dem Löschen des Passwortes mit

Code: Select all

sudo passwd -d nodered
hat alles bestens funktioniert.

Ich bin mit der Lösung sehr zu Frieden, und freue mich, daß es jetzt funktioniert.

Danke für deine Expertiese, der Support ist grandiös.

Mit freundlichen Grüßen,

EngelTom
----
RevPi Core S, RevPi Core 3+, RevPi Core 3
Post Reply