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

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

Vorheriges Thema - Nächstes Thema

RaspiLED

*Bedankt*

Ich wollte nur mal schnell Danke sagen! Dein Modul ist super!
Hier mal als Idee für andere meine use cases:
- HomeBridge und FHEM neustarten  (stop gemappt auf restart) um Homekit Room neu in HomeBridge einzulesen
- VPNC über HomeBridge starten und somit von außen jederzeit eine Verbindung von Innen aufbauen können
Wie gesagt: Danke läuft super!
Gruß Arnd

Gesendet von meinem SM-G800F mit Tapatalk

Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

Elektrolurch

Hallo,
habe mit dem passwortlosen ssh noch ein Problem. Habe folgendes gemacht:
Auf beiden Maschinen gibt es user fhem in der Gruppe dialout. Erst einmal können sich auf beiden Maschinen der Nutzer fhem einloggen.
Das home-Verzeichnis für fhem habe ich auf  /home/fhem gesetzt.
Jeweils darunter ein .ssh - Verzeichnis erzeugt.

Dann auf server 1 einen rsa - key generiert
ssh-keygen -t rsa -P ''
und den auf die Zielmaschine kopiert:
ssh-copy-id -i ~/.ssh/id_rsa.pub fhem@server2
Das alles unter dem user fhem.
Vorsichtshalber auf der Zielmaschine im .ssh - Verzeichnis
cp authorized_keys authorized_keys2
kopiert. Scheint wohl von der ssh - Version abhängen.
Trotzdem kommt die Passwortabrage bei
ssh fhem@server2

Habt ihr abweichend davon, noch etwas anderes gemacht? Bei mir im .ssh - Verzeichnis sind die beiden Dateien:
id_rsa.key und id_rsa.pub vorhanden.

Elektrolurch
configDB und Windows befreite Zone!

Elektrolurch

Hallo,

jetzt wollte ich mit dem Befehl visudo bei den Benutzer-Priviligien hinter root die aus Beitrag 49 gepostete Zeile einfügen:
fhem ALL=(ALL) NOPASSWD:/bin/systemctl * homebridge


bekomme aber einen syntax Error, wobei ich den Grund nicht nachvollziehn kann oder stimmt die Position der Zeile nach root nicht?

P.S: ohne die neue Zeile kommt auch kein Syntaxfehler
Elektrolurch

configDB und Windows befreite Zone!

MadMax-FHEM

Welches System hast du?

Bei Stretch z.B. werden andere User (u.a. pi) per include eingebunden.

Das heisst in /etc/sudoers.d sind zusätzliche Dateien (eine pro User, d.h. für pi sollte schon eine da sein, die kann kopiert und angepsst werden).

Das gilt bzgl. pi usw. natürlich erst mal nur auf einem Raspberry PI ;)

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)

RaspiLED

Fyi:

fhem@fhem:~$ sudo cat /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL
fhem    ALL=(ALL:ALL) NOPASSWD:/bin/systemctl

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) NOPASSWD:ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d
fhem@fhem:~$ uname -a
Linux fhem 4.9.0-4-686-pae #1 SMP Debian 4.9.65-3+deb9u1 (2017-12-23) i686 GNU/Linux




Raspi2 mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, Bravia, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

Elektrolurch

Ok. Danke. So gehts:
fhem ALL=(ALL:ALL) NOPASSWD:/bin/systemctl

aber so gehts leider nicht (Beitrag #49)
fhem ALL=(ALL:ALL) NOPASSWD:/bin/systemctl * homebridge,openvpn

Dann bekomme ich den Syntaxfehler.
Muss das hinter dem NOPASSWD ev. dann in "" oder '' gesetzt werden?

Elektrolurch
configDB und Windows befreite Zone!

no_Legend

#66
Zitat von: Elektrolurch am 22 Januar 2018, 11:14:47
Ok. Danke. So gehts:
fhem ALL=(ALL:ALL) NOPASSWD:/bin/systemctl

aber so gehts leider nicht (Beitrag #49)
fhem ALL=(ALL:ALL) NOPASSWD:/bin/systemctl * homebridge,openvpn

Dann bekomme ich den Syntaxfehler.
Muss das hinter dem NOPASSWD ev. dann in "" oder '' gesetzt werden?

Elektrolurch

Edit:
Warum gibst du FHEM nicht die kompletten systemctl frei?
IntelNUC mit Ubuntu mit FHEM immer aktuell,2x HMLAN, CUL443, CUL868 -homekit/siri -tablet ui -homebridge
Device, diverse:
HM-SEC-KEY,HM-LC-BL1-FM,HM-SEC-SD,HM-Sen-DB-PCB,HM-Sec-RHS,HM-Sec-SC-2,HM-WDS10-TH-O,Harmony,Netamo, 433MHz Steckdosen uvm.

binford6000

Hi Dan,
ich habe dein Modul seit Beginn im Einsatz. Läuft prächtig!
Beim shutdown restart taucht immer folgende Meldung im Log auf:
2018.01.30 14:17:18 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/98_serviced.pm line 373.

Wie lange das schon so ist kann ich nicht sagen - hebe meine Logs nur 7 Tage auf.
VG Sebatsian

DeeSPe

Zitat von: Elektrolurch am 22 Januar 2018, 11:14:47
Ok. Danke. So gehts:
fhem ALL=(ALL:ALL) NOPASSWD:/bin/systemctl

aber so gehts leider nicht (Beitrag #49)
fhem ALL=(ALL:ALL) NOPASSWD:/bin/systemctl * homebridge,openvpn

Dann bekomme ich den Syntaxfehler.
Muss das hinter dem NOPASSWD ev. dann in "" oder '' gesetzt werden?

Elektrolurch

Du musst leider immer den kompletten Pfad angeben, zumindest habe ich noch keine andere Lösung gefunden.
fhem ALL=(ALL:ALL) NOPASSWD:/bin/systemctl * homebridge,/bin/systemctl * openvpn


Zitat von: binford6000 am 05 Februar 2018, 13:09:00
Hi Dan,
ich habe dein Modul seit Beginn im Einsatz. Läuft prächtig!
Beim shutdown restart taucht immer folgende Meldung im Log auf:
2018.01.30 14:17:18 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/98_serviced.pm line 373.

Wie lange das schon so ist kann ich nicht sagen - hebe meine Logs nur 7 Tage auf.
VG Sebatsian

Das ist schon gefixt (bei mir).
Da es kein schwerwiegender Fehler ist habe ich die Version hier noch nicht aktualisiert.

Wenn ich die Tage Zeit dafür finde, checke ich das aktuelle Modul in SVN ein.

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Wernieman

Das Du den genauen Pfad angeben mußt ist ein Sicherheitsfeature. Stell Dir mal vor, Du hast ein "Tolles-Programm" und gibst dieses per sudo ohne Pfad frei. Jetzt kommt ein "Böser" (der sich einloggen kann) und nett sein "böses-Script" einfach  "Tolles-Programm". Wenn der Pfad nicht angegeben würde, könnte er damit sein Programm per sudo als root starten ...

Vergiss nicht, das Linux als Unix-System ein echtes  Multiuserbetriebsystem ist ...
- 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

simonTS

Hallo,

ich habe mich gerade am modul versucht. Leider scheints bei mir zu hängen:

define SD_doorpi serviced doorpi pi@192.168.1.6
attr SD_doorpi serviceInitd 1


der manuelle login via ssh funktioniert, ebenso service doorpi status.
Die Statusabfrage via fhem/serviced führt leider zu einer ewig andauernden Abfrage. Dabei wird das statereading permanent mit "status" beschrieben. Zumindest aktualisiert sich der Timestamp permanent ...

Mein Log untenstehend. Dabei habe ich den schalter für initd zu zuerst nicht gesetzt gehabt, wovon die erste zeile zeugt. Allerdings zeigt es ebenso, dass der login schonmal funktioniert.

sudo: systemctl: command not found
2018.11.13 22:34:16 1: Timeout for serviced_ExecCmd reached, terminated process 27006
2018.11.13 22:34:16 1: PERL WARNING: Use of uninitialized value in concatenation (.) or string at ./FHEM/98_serviced.pm line 373.
2018.11.13 22:35:18 1: Timeout for serviced_ExecCmd reached, terminated process 27122
2018.11.13 22:41:41 1: PERL WARNING: Subroutine serviced_Initialize redefined at ./FHEM/98_serviced.pm line 32.
2018.11.13 22:41:41 1: PERL WARNING: Subroutine serviced_Define redefined at ./FHEM/98_serviced.pm line 57.
2018.11.13 22:41:42 1: PERL WARNING: Subroutine serviced_Undef redefined at ./FHEM/98_serviced.pm line 93.
2018.11.13 22:41:42 1: PERL WARNING: Subroutine serviced_Shutdown redefined at ./FHEM/98_serviced.pm line 103.
2018.11.13 22:41:42 1: PERL WARNING: Subroutine serviced_shutdownwait redefined at ./FHEM/98_serviced.pm line 126.
2018.11.13 22:41:42 1: PERL WARNING: Subroutine serviced_Notify redefined at ./FHEM/98_serviced.pm line 154.
2018.11.13 22:41:42 1: PERL WARNING: Subroutine serviced_Get redefined at ./FHEM/98_serviced.pm line 192.
2018.11.13 22:41:42 1: PERL WARNING: Prototype after '@' for main::serviced_Set : $@;$ at ./FHEM/98_serviced.pm line 208.
2018.11.13 22:41:42 1: PERL WARNING: Prototype mismatch: sub main::serviced_Set ($@) vs ($@;$) at ./FHEM/98_serviced.pm line 256.
2018.11.13 22:41:42 1: PERL WARNING: Subroutine serviced_Set redefined at ./FHEM/98_serviced.pm line 209.
2018.11.13 22:41:42 1: PERL WARNING: Subroutine serviced_Attr redefined at ./FHEM/98_serviced.pm line 259.
2018.11.13 22:41:42 1: PERL WARNING: Subroutine serviced_ExecCmd redefined at ./FHEM/98_serviced.pm line 330.
2018.11.13 22:41:42 1: PERL WARNING: Subroutine serviced_ExecFinished redefined at ./FHEM/98_serviced.pm line 385.
2018.11.13 22:41:42 1: PERL WARNING: Subroutine serviced_GetUpdate redefined at ./FHEM/98_serviced.pm line 446.
2018.11.13 22:42:51 1: Timeout for serviced_ExecCmd reached, terminated process 27319
2018.11.13 22:42:51 1: PERL WARNING: Use of uninitialized value $string in split at ./FHEM/98_serviced.pm line 387.
2018.11.13 22:42:51 1: PERL WARNING: Use of uninitialized value $name in hash element at ./FHEM/98_serviced.pm line 391.
2018.11.13 22:42:51 1: PERL WARNING: Use of uninitialized value $d in hash element at fhem.pl line 4365.
2018.11.13 22:42:51 1: PERL WARNING: Use of uninitialized value $name in concatenation (.) or string at ./FHEM/98_serviced.pm line 439.
2018.11.13 22:50:18 1: Timeout for serviced_ExecCmd reached, terminated process 27749


Vllt. ne idee, wo mein Fehler liegt?
FHEM auf wheezy@RPI-->
KNX: MDT STV-0320.01|SCN-IP000.01|AMI-1216.01|JAL-0810.01|AKD-0401.01|AKH-0800.01|BE-GTT4W.01|SCN-P360D1.01|SCN-G360K3.01|ABB-MRS/W Magnet-Reedkontakt|Zisterne:SRF06|LED:XCSOURCE WIFI Controller|

Wernieman

- 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

simonTS

#72
Einen Schönen Guten Abend!

Leider nicht ... Die Zeile stammt noch von meinem ersten Versuch, bevor ich den switch auf initd gesetzt habe. Allerdings hat sich dennoch die Fehlermeldung geändert:

2018.11.16 23:39:03 5: Cmd: >get SD_doorpi status<
2018.11.16 23:39:03 4: SD_doorpi: executed shell command: sudo service doorpi status
2018.11.16 23:39:03 4: BlockingCall (serviced_ExecCmd): created child (1828), uses telnetPort to connect back
2018.11.16 23:39:03 5: Starting notify loop for SD_doorpi, 1 event(s), first is status
2018.11.16 23:39:03 5: createNotifyHash
sudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben
2018.11.16 23:39:03 5: End notify loop for SD_doorpi
2018.11.16 23:39:03 4: WEB: /fhem?detail=SD_doorpi&dev.getSD_doorpi=SD_doorpi&cmd.getSD_doorpi=get&arg.getSD_doorpi=status&val.getSD_doorpi=&XHR=1&addLinks=1&fwcsrf=csrf_278740654645988&fw_id=5178 / RL:20 / text/plain; charset=UTF-8 / Content-Encoding: gzip
/
2018.11.16 23:39:03 4: Connection accepted from telnetPort_127.0.0.1_50770
2018.11.16 23:39:03 5: Cmd: >{BlockingStart('2474')}<
2018.11.16 23:39:03 5: Cmd: >{serviced_ExecFinished('SD_doorpi|sudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben|1')}<
2018.11.16 23:39:03 5: Starting notify loop for SD_doorpi, 2 event(s), first is error
vorhanden und kein »askpass«-Programm angegeben
2018.11.16 23:39:04 5: End notify loop for SD_doorpi
2018.11.16 23:39:04 3: SD_doorpi: Error: sudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben


macht mich aber auch nicht schlauer. Eigentlich kann ich mich mit dem Nutzer Problemlos in beiden Systemen bewegen, bzw. mit pi auf dem remote system. Vllt suche ich aber auch an der falschen stelle.

EDIT:
Das lag jetzt schonmal am falschen eintrag in sudoers. Das Anpassen auf service hatte ich wohl auch vergessen. Leider dennoch kein erfolg. der manuelle weg via ssh geht inkl. sudo service ... ohne password problemlos.

Unit doorpi.service could not be found.
2018.11.16 23:50:29 3: SD_doorpi: Error: Unit doorpi.service could not be found.

FHEM auf wheezy@RPI-->
KNX: MDT STV-0320.01|SCN-IP000.01|AMI-1216.01|JAL-0810.01|AKD-0401.01|AKH-0800.01|BE-GTT4W.01|SCN-P360D1.01|SCN-G360K3.01|ABB-MRS/W Magnet-Reedkontakt|Zisterne:SRF06|LED:XCSOURCE WIFI Controller|

MadMax-FHEM

#73
Hast du PASSWORTLOSEN Zugang für den User FHEM (nicht pi!) auf dem (Remote)system!?

Bzw. für User FHEM (nicht pi) sudo OHNE PASSWORT zumindest für den "service-Aufruf"!?

(bin grad nicht so sicher, ob du lokal oder remote ausführst/ausführen willst, weil du etwas von ssh schreibst)

Denn so wie es geschrieben steht: es wird nach einem Passwort bei ssh bzw. bei dem sudo "gefragt"...
...da fhem da automatisch nichts eingeben kann (eine Möglichkeit wäre das angemerkte "askpass" [Programm dass das automatisch tut] aber davon halte ich nichts!) schlägt der Aufruf fehl bzw. wird abgebrochen.

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)

simonTS

#74
Da war ich wohl zu langsam ;-)

Ok. Das bedeutet ich muss auf dem remote system den nutzer fhem anlegen. das habe ich nicht gemacht.

lediglich der ssh pi@ip funktioniert ohne password, der sudo service ... wird dann logischerweise als pi ausgeführt, wenn ich es "von hand" versuche nachzustellen.
FHEM auf wheezy@RPI-->
KNX: MDT STV-0320.01|SCN-IP000.01|AMI-1216.01|JAL-0810.01|AKD-0401.01|AKH-0800.01|BE-GTT4W.01|SCN-P360D1.01|SCN-G360K3.01|ABB-MRS/W Magnet-Reedkontakt|Zisterne:SRF06|LED:XCSOURCE WIFI Controller|