[gelöst] allowed: Einschränkung (lesender) Zugriff auf nicht möglich?

Begonnen von FhemPiUser, 25 August 2019, 14:02:35

Vorheriges Thema - Nächstes Thema

FhemPiUser

Ich habe einen Client, der ohne Passwort auf genau ein fhem device X lesend zugreifen soll. Mehr Geräte soll der Client aus Sicherheitsgründen auch nicht sehen. Dazu habe ich eine separate FHEMWEB Instanz angelegt und habe diese mit allowed abgesichert mit folgenden Attrributen:


attr allowed_WEBinstanz allowedCommands get
attr allowed_WEBinstanz  allowedDevices X


Ich hatte immer angenommen, dass ich mit der Konfiguration wenn ich die WEBinstanz aufrufe nur das eine Gerät X sehe. Ein Testaufruf bestätigt jedoch, dass dies nicht der Fall ist. Ich sehe trotzdem alle Geräte.

Nach Aufruf der Commandref ist mir das klar, denn dort steht:

ZitatallowedDevices
Komma getrennte Liste von Gerätenamen, die mit dem passenden Frontend (siehe validFor) geändert werden können.

Scheinbar kann ich also mit allowedDevices nur Änderungen bzw. Schreibrechte, nicht die Leserechte konfigurieren. Das wundert mich, da ich die Schreibrechte ja in Kombination mit allowedCommands ohnehin auf Leserechte bzw. get einschränken könnte.

Gibt es eine andere Möglichkeit, wie ich einem Client nur den lesenden Zugriff auf bestimmte Geräte erlauben kann und er andere Geräte garnicht zu sehen bekommt?

Falls nein, könnte man z.B. ein allowedDeviceAccess oder so einführen, so dass ein Client beim Zugriff auf diese WebInstanz nur die dort konfigurierten Geräte sieht?



betateilchen

Gute Frage. Beim Nachdenken darüber kommt mir noch eine weitergehende Frage in den Sinn:

Die kommagetrennte Liste bei allowedDevices ist zwar nett, aber warum wird an dieser Stelle nicht devspec unterstützt? Dann hätte man über FILTER sehr viel mehr Möglichkeiten, die entsprechenden Geräte zu definieren.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

LuckyDay

Das ist garnicht so einfach

alle Räume verbieten
alle links Input usw verbieten

attr extraRooms definieren

leider lassen sich die webCmd nicht ausblenden, daher noch ein cloneDummy auf das org.Device gesetzt (stateFormat dort dann entsprechend gesetzt)

defmod WEB8084 FHEMWEB 8084 global
attr WEB8084 defaultRoom dyn
attr WEB8084 extraRooms name=dyn:devspec=NAME=testMysens(1|2)
attr WEB8084 hiddenroom save,Everything,input,detail,Commandref,Remote doc,Logfile,Edit files,Event monitor,Select style
attr WEB8084 hiddenroomRegexp .*
attr WEB8084 iconPath default:fhemSVG:openautomation:
attr WEB8084 plotfork 1
attr WEB8084 reverseLogs 1
attr WEB8084 styleData {\
"f18": {\
  "Pinned.menu": "true",\
  "hidePin": "true",\
  "cols.bg": "F8F8F8",\
  "cols.fg": "366a70",\
  "cols.link": "5257ff",\
  "cols.evenrow": "E8E8E8",\
  "cols.oddrow": "F0F0F0",\
  "cols.header": "DDDDDD",\
  "cols.menu": "EEEEEE",\
  "cols.sel": "CAC8CF",\
  "cols.inpBack": "FFFFFF",\
  "savePinChanges": true,\
  "fixedInput": true,\
  "hideTextInput": true,\
  "hideInput": true\
}\
}
attr WEB8084 stylesheetPrefix f18
attr WEB8084 title HC1


EDIT:
attr WEB8084 defaultRoom dyn
funktioniert natürlich nicht  >:( für dynamische Räume

FhemPiUser

Im Prinzip geht das mit hiddenroom, aber der Blacklist-Ansatz ist sehr mühsam und ist fehleranfällig bzw. schlecht zu warten, da ich die Liste jedesmal neu anpassen muss, wenn ich einen neuen room erstelle. Schöner wäre ein Whitelist-Ansatz, bei dem ich festlegen kann, welche Devices oder rooms erlaubt sind.

Im Übrigen müsste man forbiddenroom nehmen, andernfalls kann man in das Verzeichnis wechseln.

Die andere Frage wäre, ob ein JSONList-Abfrage auch nur geräte aus gewhitelisteten räumen zeigen würde und direkte aufrufe über cmd=get/set... auch nur für geräte ginge, die in gewhitlisteten räumen sind. Hat das mal jemand getestet?

LuckyDay

Zitatda ich die Liste jedesmal neu anpassen muss, wenn ich einen neuen room erstelle.

ne siehe

attr WEB8084 hiddenroomRegexp .*

alle Räume !

attr WEB8084 extraRooms name=dyn:devspec=NAME=testMysens(1|2)

und das ist ein dynamischer Raum über devspec, den gibt es garnicht als Raum  ;)

du musst das mal ausprobieren.

FhemPiUser

ok, aber hiddenroom reicht mit nicht. da kommt man über den roomnamen in der url noch immer in alle räume und bei forbiddenroom gibt es keine regex.

LuckyDay

Nur mal ein Bild um deine Aussage zu widerlegen

Du hast es nicht ausprobiert ;)

FhemPiUser

ok, sorry, du hast recht. ich habe es nicht ausprobiert. es stand so in der commandref...

riker1

Zitat von: fhem-hm-knecht am 26 August 2019, 20:07:10
Nur mal ein Bild um deine Aussage zu widerlegen

Du hast es nicht ausprobiert ;)

Hallo, könnte ich mal dazu die allow und fhem instance als code sehen?

Danke

Bekomme es auch nicht hin.
VG T
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

LuckyDay

defmod allowed_WEB8084 allowed
attr allowed_WEB8084 allowedCommands ,
attr allowed_WEB8084 allowedDevices testIAD
attr allowed_WEB8084 validFor WEB8084

setstate allowed_WEB8084 validFor:WEB8084
setstate allowed_WEB8084 2019-08-25 15:11:41 state validFor:WEB8084


FHEMWEB habe ich im #2 Beitrag

riker1

Hallo Hary,

danke.

habe es jetzt - also ohne diesen dyn raum - hinbekommen.

War mir etwas unklar, was ich in der webinstanz und was in der allowed instanz machen kann/muss.

Danke
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

rudolfkoenig

ZitatIch hatte immer angenommen, dass ich mit der Konfiguration wenn ich die WEBinstanz aufrufe nur das eine Gerät X sehe. Ein Testaufruf bestätigt jedoch, dass dies nicht der Fall ist. Ich sehe trotzdem alle Geräte.
Ich habe das jetzt gefixt, indem ich FHEMWEB.pm von "keys %defs" auf devspec2array(".*", $FW_chash) umgestellt habe.
Das wird zwar langsamer sein, ich hoffe aber, dass die Performance-Unterschiede ertraeglich sind.

Damit das Log nicht mit Fehlermeldungen geflutet wird (wie bei list, falls man allowedDevices gesetzt hat), hat AllowedFn jetzt einen optionalen $silent Attribut.

Zusaetzlich hat f18.pm eine "Hide menu" Option bekommen.

riker1

Hallo,
mal eine andere Frage in dem Zusammenhang.

Wieviel Ressourcen kostet eine zusätzlich Webinstanz?

habe nun einige zum Testen, leider kann ich die nicht mit einem Attribut auf disabled oder inactive setzen.

Oder habe ich da etwas übersehen?

Danke Thomas
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

rudolfkoenig


FhemPiUser

Zitat von: rudolfkoenig am 27 August 2019, 10:41:35
Ich habe das jetzt gefixt, indem ich FHEMWEB.pm von "keys %defs" auf devspec2array(".*", $FW_chash) umgestellt habe.
Das wird zwar langsamer sein, ich hoffe aber, dass die Performance-Unterschiede ertraeglich sind.

Damit das Log nicht mit Fehlermeldungen geflutet wird (wie bei list, falls man allowedDevices gesetzt hat), hat AllowedFn jetzt einen optionalen $silent Attribut.

Zusaetzlich hat f18.pm eine "Hide menu" Option bekommen.

Vielen Dank Rudolf, das klappt jetzt, ich sehe jetzt auch wirklich nur dei allowedDevices.