Neues Modul: 98_serviced.pm - systemd und initd Dienste steuern

Begonnen von DeeSPe, 22 November 2017, 01:03:15

Vorheriges Thema - Nächstes Thema

Wernieman

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

Elektrolurch

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!

Wernieman

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

Elektrolurch

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!