kein allowedCommands Attribut für telnet ?

Begonnen von hasselh, 23 August 2023, 12:22:21

Vorheriges Thema - Nächstes Thema

hasselh

Hallo zusammen,

ich verwende meine existierende FHEM Instanz unter auch dafür, mir von allen möglichen LAN-Devices per Telegram Nachrichten zu schicken. Das funktioniert soweit auch super... Allerdings möchte ich dass die Devices nur Zugriff auf bestimmte Befehle z.B. "set\ telegram\ (message|silentmsg) .*|list\ mydevice\ state" etc. haben und sonst (sicherheitshalber) nichts.

Unter den Device Attributen für telnet wird mir allowedCommands angeboten. Allerdings scheint allowedCommands nur für die Frontends zu gelten und nicht für telnet. Ist das so richtig ?

Eine andere Möglichkeit die mir einfiele, wäre mir selber einen kleines "Proxy" Shellskript zu schreiben, das die Befehle über telnet/ssh annimmt und erst nach Validierung weiterreicht. Aber vielleicht gibt es ja noch eine bessere/einfachere Lösung mit FHEM ?  :)

Gruß & Danke

betateilchen

Bisschen wenig Informationen zu Deiner Konfiguration, um wirklich helfen zu können.
Trotzdem ein paar Hinweise:


Interessant für eine Hilfestellnug wäre eine genauere Information, wie Du das mit dem telnet Zugriff für Deine LAN-Devices umgesetzt hast.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

allowed funktioniert fuer telnet (siehe https://fhem.de/commandref_modular.html#allowed).
Allerdings prueft es mit dem allowedCommands Attribut nur den ersten "Wort" der Befehlszeile, also set, get, attr, etc.
Weitere Werte sind shell fuer Shell-Befehle oder perl, um Perl-Ausdruecke auszufuehren.

hasselh

#3
@betateilchen, ich hatte ein FHEM telnet Device definiert als:
define telnet telnet 7072 global
attr telnet allowfrom 127.0.0.1|192.168.0.*
Und den Port 7072 habe ich von meinen Devices im LAN aus mit netcat angesprochen. Das ist sauschnell und funktioniert schon seit Jahren stabil. Aber um die Sicherheit mal ein bisschen zu verbessern, wollte ich die Konfiguration dahingehend ändern, dass ich zwei telnet Ports im FHEM betreibe:
define telnet telnet 7072
attr telnet allowfrom 127.0.0.1

define telnet2 telnet 7073
attr telnet2 allowfrom 127.0.0.1|192.168.0.*
Der Gedanke war, in einem zweiten Schritt den Zugriff bei telnet2 nur auf wenige Befehle zu beschränke... z.B. mit:
define allowedTelnet allowed
attr allowedTelnet allowedCommands get,set
attr allowedTelnet validFor telnet2

Aber leider sieht es so aus, als ob allowedCommands für telnet ignoriert wird:  :o
root@fhem:~# echo "save" | nc -N localhost 7073
Wrote configuration to fhem.cfg

@rudolfkoenig, ich gehe mal davon aus, allowedCommands (analog zu den allowedDevicesRegexp) in allowedCommandsRegexp zu erweitern ist keine Option, oder ?

rudolfkoenig

ZitatAber leider sieht es so aus, als ob allowedCommands für telnet ignoriert wird:  :o
https://fhem.de/commandref_modular.html#allowedIfAuthenticatedByMe:
By default (value is 1), the rules only apply, if the connection was authenticated (via username/password) by this allowed instance.
Set the value to 0 to apply the rules anyway, e.g. if this instance has no username or password set.

Die Voreinstellung ist sinnvoll, wenn man mit unterschiedlichen allowed Instanzen unterschiedliche Rechte vergeben will.

Zitat@rudolfkoenig, ich gehe mal davon aus, allowedCommands (analog zu den allowedDevicesRegexp) in allowedCommandsRegexp zu erweitern ist keine Option, oder ?
Der Aufwand ist dafuer jedenfalls groesser, da der Funktion z.Zt. nur der Befehl ohne Parameter uebergeben wird.
Falls so ein Attribut noch zwei weitere Benutzer wuenschen (und sie das hier kundtun), werde ich den Einbau versuchen.

Wernieman

Wie ist es eigentlich, wenn per Telnet mehrere Befehle" gesendet werden? Ala:
"set xxx on; get xxx"
(Abgesehen von der Sinnhaftigkeit obiges sehr vereinfachtes Beispiel), würde da eine "sperre" funktionieren?
- 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

rudolfkoenig

Sollte funktionieren.
Was spricht gegen ausprobieren ? :)

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