[gelöst] Frage zu shutdown mittels system Befehl

Begonnen von franky08, 14 September 2023, 16:43:29

Vorheriges Thema - Nächstes Thema

franky08

Wie der Titel schon sagt: ist es möglich über:
{
my $U1 = Value("Leistungsmesser_FritzBox_SenU");
if ($U1 < 180) {
system("shutdown -h now")
}

den Host sicher runterzufahren? $U repräsentiert die anliegende Spannung an einem Homematic Leistungsmesser. Die Host Rechner hängen an einer USV und sollen bei Netzausfall sicher runter fahren. fhem hat dafür auf dem System root Rechte.
Würde das so funktionieren? Testen möchte ich es iMo nicht, da auf den Rechnern wichtige Programme (z.B. auch fhem) laufen.

VG
franky08
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

MadMax-FHEM

#1
Zitat von: franky08 am 14 September 2023, 16:43:29Die Host Rechner hängen an einer USV und sollen bei Netzausfall sicher runter fahren. fhem hat dafür auf dem System root Rechte.

Ist etwas ungenau...

Deine Befehlsfolge mag LOKAL funktionieren aber nicht remote (lese ich so: RechneR -> mehrere, also auch "remote"?)
Und auch nur, wenn fhem bereits als ROOT läuft (sollte man nicht machen), ansonsten ist mindestens ein "sudo" vorne weg nötig (zumindest auf allen Systemen die ich so kenne/habe / außer man hat am "Standard" rumgedingst)

Remote funktioniert sie so nicht, da fehlt ssh vorneweg usw.
Und für remote (ssh) brauchst du auch remote-Login OHNE Passwort...

Wäre also gut, genau(er) zu beschreiben wie deine "Infrastruktur" so aussieht:

- wie viele Rechner
- tatsächlich remote oder "nur" lokal
- welche User wo (mit welchen Rechten bzw. "Gruppen" / und ob sudo oder nicht)

Zitat von: franky08 am 14 September 2023, 16:43:29fhem hat dafür auf dem System root Rechte.
wie ist das zu verstehen?
Wenn "remote", dann: eieiei!
Normalerweise ist Root-Login per ssh "verboten" (und sollte es auch bleiben: dazu gibt es sudo). Somit kann fhem dort nicht root sein bzw. erst nach erfolgreichem passwortlosen Login (als User X @remoteSystem, der dann sudo darf)... Lokaler User und Remote-User müssen (bzw. sind es ja auch nicht) nicht der selbe User sein (selbst wenn sie gleich heißen <- ist daher unnötig ;) )
Wenn lokal: läuft fhem als Root? Wenn ja: warum? -> es gibt sudo (oder meinst du das?)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

franky08

Es sind zwei über F2F verbundene fhem Rechner und mit sudo funktioniert das so nicht, ssh für root Zugang über Konsole ist bei mir IMMER eingerichtet da ich diesen sudo Zirkus für viele Aufgaben nicht brauchen kann. Die Rechner sind nicht übers Internet erreichbar, nur im Heimnetz. Wenn man weis was macht kann man fhem schon root Rechte einräumen, fhem läuft auf beiden Systemen als user fhem (fhem:dialout) und ich würde dann auf beiden Systemen mit shutdown die Rechner runter fahren. Rechner sind jeweils Zotac nano mit Debian Bookworm (12.1). Fhem hab ich nun schon seit 2012 laufen, ohne irgendwelche Sicherheitsprobleme :-)

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

Wernieman

Es gibt schon einen Grund warum
a) FHEM keine root Rechte hat
b) Pauschale root-Rechte (ohne sudo) nicht zu empfehlen sind
aber "diesen sudo Zirkus" sagt schon alles (Stichwort Beratungsresidenz)

"ohne irgendwelche Sicherheitsprobleme"
Sicherheit ist wie beim Backup, man merkt erst im Schadensfall, das man es Braucht.

Abgesehen davon:
Du wirst in Deiner Umgebung ein  Problem haben:
Der Sensor ist bestimmt nur an EINEM Fhem angeschlossen. Wenn der runterfährt, kriegt eventuell F2F es nicht mit .... also der 2. Fährt dann nicht runter.

P.S.
Und ja, ssh für root ist ... gruselig. Sehe es als minimale 2 Faktor Authentifizierung. Normalerweise muß der Angreifer User/Passwort erraten, bei Dir nur Passwort.) Habe hier eine Art "ssh-Port-Honneypot" ... rat mal, welcher User zu70% angegriffen wird
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

MadMax-FHEM

#4
Unabhängig von den ganzen (ignorierten) Sicherheitsaspekten/-hinweisen, folgendes:

fhem läuft (auch bei dir) unter dem User fhem.
Dieser mag root-Rechte haben, verm. per Eintrag in sudoers ohne Passwort (für "alles").
ABER: der Befehl shutdown (wie reboot) braucht (mWn) root-Rechte, daher:

entweder läuft fhem unter einem User der Gruppe root -> tut es laut dir nicht
oder du musst (auch lokal) sudo vor den shutdown setzen.

So ganz ist mir noch nicht klar welcher User (gut verm. fhem) auf welchem Rechner (verm. dort wo fhem läuft) runterfahren soll.

Wenn es NICHT derselbe "Rechner" ist, dann kommt neben oben gesagtem noch der remote-Login ohne Passwort (Stichwort: Zertifikat) ins Spiel.
Angenommen der User fhem auf dem "fhem-Rechner" will Rechner A runterfahren, dann folgendes:

der User fhem muss sich per ssh als "irgendein User" (nennen wir ihn mal a) auf dem Rechner A einloggen und zwar OHNE Passwortabfrage, weil das kann der User fhem ja nicht, sitzt ja keiner davor ;)

Der User a muss nat. "root-Rechte" auf Rechner A haben. Entweder weil der User a schon in der Gruppe root ist (schlecht, siehe Ausführungen von Wernieman und mir) oder eben auch per sudo ohne Passwort...

Dann sieht der Befehl so aus: ssh a@RechnerA "sudo shutdown -h now" (bzw. -hP now)

EDIT: ein Aufruf mittels system() ist blockierend, außer man "schiebt ihn in den Hintergrund" -> Anfügen eines '&'... In fhem sind "Systemaufrufe" nicht blockierend, wenn man sie einfach in Anführungszeichen setzt, also: "sudo shutdown -h now" (inkl. Anführungszeichen): https://heinz-otto.blogspot.com/2018/02/in-fhem-externe-programme-aufrufen.html

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

franky08

@MadMax-fhem
Genau darauf zielte meine Frage ab," Anführungszeichen setzt, also: "sudo shutdown -h now" " in Anführungszeichen, dass war mir schon klar, nur ob vor dem shutdown ein sudo muss, war mir nicht ganz klar.
Der zweite Rechner fährt übrigends runter wenn der erste (der auswertende Rechner) nicht mehr erreichbar ist, also schon runtergefahren ist. Ist der erste Rechner down dann fährt der zweite auch runter.
Die USV liefert ungefähr für 8 Minuten noch Spannung also lange genug um Rechner zwei auch in den shutdown zu schicken.
Ich danke dir für den "sudo" Aufschluss :-)
Thema kann dann auch zu.

VG
Frank
Debian Wheezy auf ZBOX nano/ Debian Bullseye auf 2.ter ZBOX nano F2F an 2x RaspiB
22Zoll ViewSonic als Infodislay (WVC)
3xHMLAN mit vccu ,fhem5.8, CCU2,
ECMD an AVR-NET-IO mit DAC u. ADC an Junkers Stetigregelung, Siemens LOGO!8, JeeLink uvm...

MadMax-FHEM

Zitat von: franky08 am 14 September 2023, 22:15:14Thema kann dann auch zu.

Gerne.

Dann setze doch ein [gelöst] o.ä. vor den ersten Post, danke :)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

CoolTux

Ein weiterer gangbarer Weg wäre systemd für das runterfahren der Rechner zu nehmen. Systemd kann nämlich auch Remote.

Für Lokal einfach "systemctl poweroff"
Für Remote "systemctl -H user@remotehost poweroff"
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Wernieman

Du erzählst mir gerade etwas neue ... muß man auf systemd seite etwas konfigurieren?
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

CoolTux

Nein musst Du nicht. Einfach den Befehl ausführen. Und der User muss natürlich das Recht haben für den systemctl Befehl
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Wernieman

ZitatUnd der User muss natürlich das Recht haben für den systemctl Befehl
Hättest DU eventuell einen Link zum einlesen?
Habe gerade versucht zu googeln ...
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

CoolTux

Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Wernieman

Mea Culpa .. auf ein einfaches "man" bin ich nicht gekommen .... Danke!
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html