FHEM Forum

FHEM - Hardware => Server - Linux => Thema gestartet von: franky08 am 14 September 2023, 16:43:29

Titel: [gelöst] Frage zu shutdown mittels system Befehl
Beitrag von: franky08 am 14 September 2023, 16:43:29
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
Titel: Aw: Frage zu shutdown mittels system Befehl
Beitrag von: MadMax-FHEM am 14 September 2023, 17:04:45
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
Titel: Aw: Frage zu shutdown mittels system Befehl
Beitrag von: franky08 am 14 September 2023, 17:46:38
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
Titel: Aw: Frage zu shutdown mittels system Befehl
Beitrag von: Wernieman am 14 September 2023, 19:23:09
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
Titel: Aw: Frage zu shutdown mittels system Befehl
Beitrag von: MadMax-FHEM am 14 September 2023, 21:43:10
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
Titel: Aw: Frage zu shutdown mittels system Befehl
Beitrag von: franky08 am 14 September 2023, 22:15:14
@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
Titel: Aw: Frage zu shutdown mittels system Befehl
Beitrag von: MadMax-FHEM am 14 September 2023, 22:38:06
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
Titel: Aw: Frage zu shutdown mittels system Befehl
Beitrag von: CoolTux am 15 September 2023, 05:35:34
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"
Titel: Aw: [gelöst] Frage zu shutdown mittels system Befehl
Beitrag von: Wernieman am 15 September 2023, 08:29:39
Du erzählst mir gerade etwas neue ... muß man auf systemd seite etwas konfigurieren?
Titel: Aw: [gelöst] Frage zu shutdown mittels system Befehl
Beitrag von: CoolTux am 15 September 2023, 11:54:59
Nein musst Du nicht. Einfach den Befehl ausführen. Und der User muss natürlich das Recht haben für den systemctl Befehl
Titel: Aw: [gelöst] Frage zu shutdown mittels system Befehl
Beitrag von: Wernieman am 15 September 2023, 14:20:17
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 ...
Titel: Aw: [gelöst] Frage zu shutdown mittels system Befehl
Beitrag von: CoolTux am 15 September 2023, 14:37:53
https://www.tecmint.com/control-systemd-services-on-remote-linux-server/

https://www.freedesktop.org/software/systemd/man/systemctl.html#
Titel: Aw: [gelöst] Frage zu shutdown mittels system Befehl
Beitrag von: Wernieman am 15 September 2023, 14:39:53
Mea Culpa .. auf ein einfaches "man" bin ich nicht gekommen .... Danke!