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

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4101
  • Wer anderen eine Bratwurst brät...
Antw:Neues Modul: 98_serviced.pm - systemd und initd Dienste steuern
« Antwort #105 am: 16 November 2019, 19:46:26 »
Hallo @DeeSPe,

vielen Dank für Dein sehr praktisches Modul!
Ich habe aber einen kleinen Fehler gefunden:
In Zeile 152 lautet der Code: my $sudo = AttrNum($name,"serviceSudo",1) || $login !~ /^root@/ ? "sudo " : "";Damit funktioniert die Verwendung ohne sudo nicht, trotz gesetztem Attribut serviceSudo.
Nach minimaler Änderung der Zeile: my $sudo = AttrNum($name,"serviceSudo",1) || $login =~ /^root@/ ? "sudo " : "";funktioniert das Modul auch ohne sudo. Aus meiner Sicht schlüssig, da die Überprüfung im ternären Operator nur dann sudo ergeben müsste, wenn $login root enthält.

Vielen Dank schon mal!

Irgendwie war ich heute früh noch nicht ganz wach und habe mich irgendwie von Deinem Argument täuschen lassen.
Es war schon richtig so wie es vorher (ohne Deine Änderung) war. Wenn Du schon root bist, benötigst Du doch kein sudo. Es wird nur benötigt wenn man eben kein root ist.

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline dennisk

  • New Member
  • *
  • Beiträge: 5
Antw:Neues Modul: 98_serviced.pm - systemd und initd Dienste steuern
« Antwort #106 am: 17 November 2019, 09:46:05 »
OK, stimmt, wenn ich jetzt drüber nachdenke, hast Du natürlich Recht, sorry
Dennoch funktioniert bei mir die Nutzung ohne sudo wirklich nur mit der Änderung. Mein FHEM wird jedenfalls nicht unter root gestartet, sondern dem User fhem. Müsste dann nicht eigentlich, bei Setzen von serviceSudo = 0 kein sudo verwendet werden?

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4101
  • Wer anderen eine Bratwurst brät...
Antw:Neues Modul: 98_serviced.pm - systemd und initd Dienste steuern
« Antwort #107 am: 17 November 2019, 13:31:56 »
Mir ist zwar noch nicht ganz klar warum man als Nicht-root kein sudo benötigen sollte, aber ich denke wenn Du nach Zeile 152 die folgende Zeile einfügst sollte es mit "serviceSudo 0" klappen.
$sudo = "" if (AttrNum($name,"serviceSudo",1) == 0);
Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Offline dennisk

  • New Member
  • *
  • Beiträge: 5
Antw:Neues Modul: 98_serviced.pm - systemd und initd Dienste steuern
« Antwort #108 am: 18 November 2019, 19:51:23 »
Ich kann auf sudo verzichten, weil ich dem Benutzer fhem die Berechtigung erteilt habe, den systemd-Service zu steuern.
Das Ganze habe ich mit Polkit umgesetzt und verwende folgende Regel:
polkit.addRule(function(action, subject) {
    if (action.id == "org.freedesktop.systemd1.manage-units") {
        if (action.lookup("unit") == "fhem.service") {
            var verb = action.lookup("verb");
            if (verb == "start" || verb == "stop" || verb == "restart") {
                if (subject.user == "fhem") {
                    return polkit.Result.YES;
                }
            }
        }
    }
});

Wie wäre alternativ folgende Anpassung: my $sudo = AttrNum($name,"serviceSudo",1) && $login !~ /^root@/ ? "sudo " : "";Nun wird sudo nur dann verwendet, wenn der Parameter serviceSudo auf 1 steht UND der Benutzername nicht root ist. Jetzt müsste doch die ursprüngliche Funktionalität erhalten bleiben und serviceSudo = 0 funktioniert auch. Was denkst Du?

Offline DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4101
  • Wer anderen eine Bratwurst brät...
Antw:Neues Modul: 98_serviced.pm - systemd und initd Dienste steuern
« Antwort #109 am: 18 November 2019, 21:25:01 »
my $sudo = AttrNum($name,"serviceSudo",1) && $login !~ /^root@/ ? "sudo " : "";

Danke.
Ist so eingecheckt!

Gruß
Dan
FHEM 5.9, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

 

decade-submarginal