[gelöst] Raspi4 Bookworm - Fhem Rechteproblem?

Begonnen von Rewe2000, 29 November 2023, 18:45:58

Vorheriges Thema - Nächstes Thema

Rewe2000

Hallo,

ich habe eben meinen Raspi4 komplett neu, mit Debian Bookworm 64bit aufgesetzt und Fhem über Restore wieder installiert. Soweit läuft alles bestens, lediglich bei der Abfrage meines KIA über Bluelinky (npm, nodejs) stoße ich auf ein Problem was ich selbst nicht lösen kann.

Ich starte über ein notify die Ausführung eines Javascript in meinem Homeverzeichnis /home/reinhard/bluelinky, in welchen auch Blueliky selbst installiert wurde.
Bei der Ausführung des notify wird ein Fehler ins Fhem Log geschrieben, dass Fhem nicht in das Verzeichnis wechseln kann.
sh: 1: cd: can't cd to /home/reinhard/bluelinky
Starte ich das Javascript direkt als Benutzer reinhard unter Linux, so wird dieses ausgeführt.
cd /home/reinhard/bluelinky
node kia.js

Mein notify zum Aufruf des Javascripts als List:
Internals:
   DEF        du_KIA_lesen:on {system ("cd /home/reinhard/bluelinky && node kia.js > /dev/null 2>/dev/null &")}
   FUUID      63ff77ee-f33f-7df9-d038-326aaa46da16751f
   NAME       no_KIA_lesen
   NOTIFYDEV  du_KIA_lesen
   NR         556
   NTFY_ORDER 50-no_KIA_lesen
   REGEXP     du_KIA_lesen:on
   STATE      2023-11-29 17:47:00
   TRIGGERTIME 1701276420.0089
   TYPE       notify
   READINGS:
     2023-11-29 16:17:01   state           active
     2023-11-29 17:47:00   triggeredByDev  du_KIA_lesen
     2023-11-29 17:47:00   triggeredByEvent on
   hmccu:
Attributes:
   DbLogExclude .*
   comment    Mit diesem notify wird die Abfragedatei "kia.js" unter Linux auf dem Raspi, mit "node" ausgeführt. Damit die Ausgabe der Werte nicht im das Fhem Log geschrieben wird, wurde noch die Umleitung in den "Linux Mülleimer" angehängt "> /dev/null 2>/dev/null".
Hinweis:
Das "&" am Ende des Befehls bewirkt die Abarbeitung im Hintergrund, ohne Fhem zu blockieren.

Eine eimalige sichtbare Abfrage, lässt sich mit dem Befehl "{system ("cd /home/reinhard/bluelinky && node kia.js > &")}" auf der Fhem Komandozeile ausführen:
   event-on-change-reading .*
   group      KFZ
   icon       car
   room       Wallbox

Die aktuell vergebenen Rechte unter Linux haben sich gegenüber Bullseye nach meiner Einschätzung nicht geändert:
reinhard@Fhem-Bookworm-SSD:~ $ ls -lh
insgesamt 25M
drwxr-xr-x 3 reinhard reinhard 4,0K 29. Nov 13:52 bluelinky
drwxr-xr-x 2 reinhard reinhard 4,0K 29. Nov 15:38 downloads
-rw-r--r-- 1 root     root      25M 15. Jan 2023  fhem-6.2.deb

reinhard@Fhem-Bookworm-SSD:~/bluelinky $ ls -lh
insgesamt 76K
-rw-r--r--   1 reinhard reinhard 2,1K 29. Nov 13:52 kia.js
drwxr-xr-x 155 reinhard reinhard 4,0K 29. Nov 13:46 node_modules
-rw-r--r--   1 reinhard reinhard   82 29. Nov 13:46 package.json
-rw-r--r--   1 reinhard reinhard  61K 29. Nov 13:48 package-lock.json

Hat sich da bei den Rechten gegenüber Bullseye etwas geändert oder mache ich da irgendwo noch einen Fehler?

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

passibe

Zwei Dinge:

Erstens ist kia.js
-rw-r--r--Du brauchst zum Ausführen aber immer noch x, deshalb folgender Befehl:
chmod +x /home/reinhard/bluelinky/kia.js
Zweitens gib uns mal bitte ein
ls -l /homees kann nämlich sein, dass schon dein Benutzerverzeichnis nicht ausführ- oder lesbar für alle ist. Dann müsstest du die Rechte von /home/reinhard anpassen (und nur vom Verzeichnis, nicht von allen Dateien da drin! Also Achtung, dass du nicht mit chmod -r arbeitest).

Bevor du das aber machst, wäre es evtl. sinnvoll zu überlegen, ob das Skript wirklich in deinem Benutzerordner liegen muss. Sauberer und je nach dem sicherer ist es jedenfalls, dass das Skript in einem Ordner liegt auf den (nur) der ausführende Benutzer (also fhem) Zugriff hat und dann auch nur dieser Benutzer die Schreib-/Ausführberechtigung dafür hat (und ggfs. auch nur die Leseberechtigung je nach dem was da so drinsteht, z.B. bei API-Keys/Passwörtern).

Otto123

#2
Hallo Reinhard,

da hat sich nichts mit Bookworm geändert - aber sicher hattest Du früher was geändert. :)

Du hast Dir nicht alles angesehen (im Homedir ls -lha)
Beispiel:
drwxr-x--- 11 otto otto 4.0K Nov 29 11:33 .Wie Du siehst, darf normalerweise der User in sein Homedir wechseln, aber kein anderer, also auch nicht der user fhem.

Entweder legst Du den Kram ins fhem Dir /opt/fhem , oder besser machst Du was extra z.B.: /opt/Kram und vergibst passende Rechte
Aber Achtung, wie es mir scheint hast Du das Nodejs Zeugs exklusiv für Deinen User installiert!? Aus meiner Sicht ein Fehler ...

Wenn das so ist rate ich: unter Deinem User deinstallieren und "mit sudo" neu "für alle User" installieren. In dem Fall wird mW per default in /usr/lib/node_modules installiert.

Den Rest hat passibe schon gesagt ;)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Rewe2000

Hallo,

vielen Dank für eure Geduld, aber ich denke so alt kann ich gar nicht mehr werden, dass ich die Rechtevergabe unter Linux ausreichend verstehe.
Aber man wächst ja mit jedem Problem und ich gebe die Hoffnung so schnell nicht auf. :)

Anbei nochmals eine Gegenüberstellung der Rechte unter Bullseye:
reinhard@Fhem-Bullseye-SSD:~ $ ls -l /home
insgesamt 4
drwxr-xr-x 8 reinhard reinhard 4096 29. Jul 10:49 reinhard

Und jetzt aktuell unter Bookworm:
reinhard@Fhem-Bookworm-SSD:~ $ ls -l /home
insgesamt 4
drwx------ 6 reinhard reinhard 4096 29. Nov 16:15 reinhard

Ich denke aber das Problem bei mir liegt liegt bei den Rechten von meinem Verzeichnis /home/reinhard, denn nur da sehe ich einen Unterschied. Ich habe diese mal angepasst und siehe da, jetz klappt auch die Verbindung zu meinem KIA.
Ich werde versuchen Bluelinky für alle User zu installieren so wie von Otto vorgeschlagen, und dann die Rechte für den User reinhard wieder zurücksetzen, wenn es läuft. Da stehe ich aber schon wieder vor der nächsten Hürde, wie installiere ich Bluelinky sauber "für alle User" und welches Verzeichnis bietet sich hier an?

Bisher habe ich es wie folgt installiert (angemeldet als user reinhard):
mkdir /home/reinhard/bluelinky
cd /home/reinhard/bluelinky
npm install bluelinky
npm install async-mqtt

Ich frag lieber vorher als dass ich mein frisch aufgesetztes Linux total vermülle.
Habt ihr einen guten Link für mich wo die Rechtevergabe für Linux, einen Anfänger gut in Deutsch beschrieben ist?

Gruß Reinhard
Fhem 6.3 auf Raspberry Pi4 SSD mit Raspbian Bookworm, Homematic, Homematic IP, CCU3 mit RapberryMatic, WAGO 750-880, E3DC S10E Hauskraftwerk, E3DC Wallbox, my-PV AC ELWA-E Heizstab, Fritz!Box 7590, KIA Bluelinky

Otto123

Hallo Reinhard,

lies doch im ubuntu wiki https://wiki.ubuntuusers.de/chmod/

Ich bin mit nodejs auch nicht gut - aber ich meine wenn Du mit sudo npm ... und der Option -g installierst - wird es von selbst im richtigen Pfad ankommen. Aber ich würde die persönliche Installation vorher entfernen (npm uninstall ...), nichts ist schlimmer als unklare doppelte Installationen.
npm install bluelinkyVielleicht hilft das hier https://gridscale.io/community/tutorials/node-js-beginner-guide/

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

passibe

Eigentlich kannst du auch einfach mit sudo -u fhem <befehl> oder sudo -u fhem sh -c '<befehl>' arbeiten, wenn du Befehle als FHEM-Nutzer ausführen willst. So könntest du dann die npm-Pakete nur für den FHEM-Nutzer installieren.

Zu der -g Option siehe z.B. hier und hier.

fireball

Moinsen,

ich glaub ich muss mich her gleich mal dran hängen, ich finde den Fehler einfach nicht. Ich habe auch ne komplette Neuinstallation mit Bookworm gemacht und ein Backup von FHEM übernommen.
Jetzt muss ich ein paar Dinge nacharbeiten, unter anderem diesen Punkt:
Ich hab ein Python script, welches durch fhem mittels at ausgeführt wird.
Das Script habe ich unter /opt/fhem/FHEM liegen und es schreibt ein Log nach /opt/fhem/logs

Das Script ließt im Großen und Ganzen den Status der USV aus und schreibt das in eine Datei, hier die Kurzform:

# INA219 measure bus voltage on the load side. So PSU voltage = bus_voltage + shunt_voltage
    #print("PSU Voltage:  {:6.3f} V".format(bus_voltage + shunt_voltage))
    #print("Shunt Voltage: {:9.6f} V".format(shunt_voltage))
    print("Load Voltage:  {:6.3f} V".format(bus_voltage))
    print("Current:      {:9.6f} A".format(current/1000))
    print("Power:        {:6.3f} W".format(power))
    print("Percent:      {:3.1f}%".format(p))
    logfile = open("/tmp/ups.log","w")
    #logfile.write("\r\nPSU Voltage:  {:6.3f} V".format(bus_voltage + shunt_voltage))
    #logfile.write("\r\nShunt Voltage: {:9.6f} V".format(shunt_voltage))
    logfile.write("\r\nLoad Voltage:  {:6.3f} V".format(bus_voltage))
    logfile.write("\r\nCurrent:      {:9.6f} A".format(current/1000))
    logfile.write("\r\nPower:        {:6.3f} W".format(power))
    logfile.write("\r\nPercent:      {:3.1f} %".format(p))
    logfile.close()

Unter buster lief das Script jede Minute im at und hat eine neue Datei geschrieben mit den Werten.
Jetzt sagt mit fhem: PermissionError: [Errno 13] Permission denied
Wenn ich das Script als pi ausführe, dann gehts. Mit oder ohne bestehendes Logfile, egal es wird eins erzeugt.
Wenn ich es als fhem ausführe, gehts auf die Bretter... Den Pfad wo das Log geschrieben wird habe ich nochmal gecheckt, aber es ist das FHEM interne logs Verzeichnis, das muss ja der User fhem schreiben können...

Viell. habt ihr ja noch einen Idee... steh grad auf dem Schlauch...

pi@raspberrypi:/opt/fhem/FHEM $ sudo -u fhem  ./ups_auslesen.py
Traceback (most recent call last):
  File "/opt/fhem/FHEM/./ups_auslesen.py", line 196, in <module>
    ina219 = INA219(addr=0x42)
            ^^^^^^^^^^^^^^^^^
  File "/opt/fhem/FHEM/./ups_auslesen.py", line 63, in __init__
    self.bus = smbus.SMBus(i2c_bus);
              ^^^^^^^^^^^^^^^^^^^^
PermissionError: [Errno 13] Permission denied
pi@raspberrypi:/opt/fhem/FHEM $ ./ups_auslesen.py
Load Voltage:  8.156 V
Current:      -0.034100 A
Power:          0.278 W
Percent:      89.8%
pi@raspberrypi:/opt/fhem/FHEM $ ll /tmp/
insgesamt 28
-rw-r--r-- 1 pi  pi    101 29. Dez 09:48 ups.log


VG
René

Otto123

Hallo René,

klingt nach Rechten für den I2C Bus? Ev. auch gpio?
sudo usermod -aG i2c fhem
Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

fireball

#8
Hi Otto, ja die Idee war gut, das hatte ich (auch) noch nicht gemacht und hab den User fhem in ic2 und gpio Gruppe geworfen. Aber leider hackelts doch noch irgendwo.

Ich habe jetzt das Script ohne "schreibenden" Zugriff in eine Datei abgewandelt und die Ausgabe nach Stdout gemacht mit dem User fhem:
pi@raspberrypi:~ $ sudo -u fhem /opt/fhem/FHEM/ups_auslesen.py
Load Voltage:  8.156 V
Current:      -0.021500 A
Power:          0.220 W
Percent:      89.8%

Das läuft. Das Problem liegt also beim Schreiben in die Datei.

PS: Ich habe mal nur das Erzeugen der Datei wieder eingebaut und die alte LogDatei gelöscht, da die Option "w" ja ein neues File anlegen sollte.

pi@raspberrypi:~ $ sudo -u fhem /opt/fhem/FHEM/ups_auslesen.py
Load Voltage:   8.160 V
Current:       -0.029000 A
Power:          0.236 W
Percent:       90.0%
Traceback (most recent call last):
  File "/opt/fhem/FHEM/ups_auslesen.py", line 214, in <module>
    logfile = open("/opt/fhem/logs/ups.log","w")
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: '/opt/fhem/logs/ups.log'

Dann siehts so aus... das solllte ja gar nicht erscheinen...




fireball

BOAAAHHHH Wie war das mit dem Wald und den Augen....

/opt/fhem/logs/ups.log  <= DAS WAR DER FEHLER!!!

Es gibt so ein Verzeichnis gar nicht...

VG+Danke Es hat trotzdem geholfen nochmal alles durchzugehen...

René