Autor Thema: Neues Modul: 98_serviced.pm - systemd und initd Dienste steuern  (Gelesen 35956 mal)

Offline Wernieman

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8469
Antw:Neues Modul: 98_serviced.pm - systemd und initd Dienste steuern
« Antwort #180 am: 01 Mai 2022, 17:45:46 »
Du kannst Rechte über sodu und/oder polkit vergeben. Steige mitlerweile bei Dir nicht mehr durch. Wo ist jetzt der sudo-Befehl eingetragen, auf welcher Maschiene und von wo rufst Du es auf?
- 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

Offline Elektrolurch

  • Hero Member
  • *****
  • Beiträge: 1640
Antw:Neues Modul: 98_serviced.pm - systemd und initd Dienste steuern
« Antwort #181 am: 02 Mai 2022, 13:43:41 »
Hallo,

also ich verwende von  fhem aus serviced für zwei Maschinen:
a) lokal für den dnsmasq - service (da treten die Probleme nach dem Update auf bullseye auf:
2022.05.02 13:21:02 3: dnsmasq: Error: 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
Wenn ich den status oder einen restart von diesem Dienst über das serviced - Ojekt abfragen / machen
 möchte.
Auf dieser Maschine läuft polkit,  offensichtlich mit dem Update auf bullseye.

b) Remote über serviced und ssh.
Hier läuft polkit nicht und alles funktioniert wie bisher.

Gibt man in die fhem - Zeile folgendes ein
{qx(sudo /usr/bin/systemctl status dnsmasq)}
{qx(sudo /usr/bin/systemctl restart dnsmasq)}
{qx(sudo /bin/systemctl status dnsmasq)}
{qx(sudo /bin/systemctl restart dnsmasq)}
Wird mir 2 x mal der status von dnsmasq und 2 x mal ein restart durchgeführt.
Über das serviced - Modul geht es nicht mehr und die obige Fehlermeldung, mit der Auffforderung das Passwort interaktiv über ein Terminal  wird ausgegeben.

Da alles über eine ssh-Shell oder über die Kommandozeile von fhem (s.o.) funktioniert, kann es an dem Eintrag in der sudoers - Datei nicht liegen.

Es muss also an polkit liegen, dass ist das einzige, was offensichtlich seit dem update auf bullseye neu ist.
(siehe auch den Post oben mit den beiden Links zu den Aufgaben des policy kits, mit dem wohl das serviced - Modul irgendwie nicht mehr zurecht kommt)

ich habe in meinem fhem die Anweisung:
DoSet("dnsmasq","restart"); # serviced - Ojekt dnsmasq
durch

qx(sudo /bin/systemctl restart dnsmasq);
ersetzt und jetzt funktioniert der code - Teil wieder.

whereis dnsmasq zeigt /user/bin an
Aber dnsmasq ist sowohl unter /bin, als auch unter /usr/bin vorhanden.

Elektrolurch
configDB und Windows befreite Zone!

Offline Wernieman

  • Developer
  • Hero Member
  • ****
  • Beiträge: 8469
Antw:Neues Modul: 98_serviced.pm - systemd und initd Dienste steuern
« Antwort #182 am: 02 Mai 2022, 14:57:36 »
Dann würde ich eher auf ein Problem im Modul Tippen.
- 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

Offline Elektrolurch

  • Hero Member
  • *****
  • Beiträge: 1640
Antw:Neues Modul: 98_serviced.pm - systemd und initd Dienste steuern
« Antwort #183 am: 03 Mai 2022, 11:15:38 »
Ja, sehe ich auch so:
  if ($hash->{LOCKFILE})
  {
    $hash->{helper}{RUNNING_PID} = BlockingCall("serviced_ExecCmd","$name|$cmd|$com|$line","serviced_ExecFinished");
  }
  else
  {
    $hash->{helper}{RUNNING_PID} = BlockingCall("serviced_ExecCmd","$name|$cmd|$com|$line","serviced_ExecFinished",301,"serviced_ExecAborted",$hash);
  }

Für das polkit ist dieser Aufruf mit sudo quasi "ohne Mensch am Terminal" und wird deshalb blockiert.
Ein Aufruf mit qx(sudo /bin/systemctl restart dnsmasq) aus fhem heraus funktioniert dagegen.
Ich verstehe die Logik im Modul sowieso nicht: Hier wird ja wohl blocking aufgerufen, warum dann auch noch den Aufwand mit einem callback? Dann hätte man das ja auch non-blocking machen können.
Oder wenn blocking, dann gleich mit einem System-Call wie oben.

Elektrolurch
configDB und Windows befreite Zone!