[ANNOUNCE] vdr-restfulapi 0.1.0

  • Moin!


    Da die Kommunikation über HTTP läuft, könnte man das Plugin nur auf localhost lauschen lassen und dann einen Web-Server/-Proxy davor schalten, der je nach Belieben authentifiziert und verschlüsselt.
    Überlegungen gibt es, aber noch keine konkrete Umsetzung. Sehr wahrscheinlich wird es aber kein Bestandteil des Plugins. Eine externe Lösung würde das gleich für alle Webdienste des vdr erschlagen, wäre also vorzuziehen.


    Lars.

  • Da die Kommunikation über HTTP läuft, könnte man das Plugin nur auf localhost lauschen lassen


    Wobei streng genommen hier auch wieder alle User (die nen Login haben) alle Rechte haben. svdrp hat das selbe Problem, dbus2vdr löst das elegent weil dbus hier von Haus aus schon ne Config vorsieht. Wobei man hier (dbus) AFAIK sogar den Zugriff auf bestimmte Aktionen feinregeln könnte.


    Ist ja jetzt nicht so das ich erwarte das alle Welt meinen VDR hacken will ;) Aber ich finde wenn man schon Linux mit seinem Nutzerkonzept nutzt, root nen Passwort gibt und den VDR als User laufen lässt, dann sollte man das Thema bei den Schnittstellen nicht ignorieren. Und ist halt doch irgendwie blöd wenn man weiss das jeder der sich mal mit seinen Notebook ins LAN einklingt theoretisch ohne Probleme alle Aufnahmen löschen könnte.


    und dann einen Web-Server/-Proxy davor schalten, der je nach Belieben authentifiziert und verschlüsselt.
    Überlegungen gibt es, aber noch keine konkrete Umsetzung. Sehr wahrscheinlich wird es aber kein Bestandteil des Plugins. Eine externe Lösung würde das gleich für alle Webdienste des vdr erschlagen, wäre also vorzuziehen.


    Wobei ich mit hier nicht vorstellen kann wie das praktisch umzusetzen wäre. Live hat ja z.B. ne Nutzerverwaltung, und ein Gastnutzer braucht dann ja ganz andere Proxyregeln wie nen Vollnutzer.


    Die beste Idee die mit vorschwebt wäre ein Clientprogramm (könnte z.B. bei Win PCs ins Autostart) was alle X Minuten UserID/Passwd an den VDR sendet, der Dienst (nen kleiner Python Daemon schwebt mir vor) der das dann am VDR empfängt schaltet dann die Firewallregeln entsprechend den Nutzerprivilegien für diese IP (von der das ID Packet kam) für die nächsten Y Minuten. Wobei das erstmal nur für sowas wie den vompserver Sinn machen würde, die restfulapi nur an- oder auszuschalten ist ja auch nicht Sinn der Sache.
    Wobei ich live und samba genrell von der Idee ausnehmen würde, beide besitzen ne Userverwaltung (inkl. Gastzugang) und es macht Sinn die einfach so im LAN nutzbar freizugeben.


    cu

  • Es gibt noch einiges das erledigt werden sollte, aber ich brauche mal ein paar Tage Pause nachdem ich so gut wie die ganze Freizeit der letzten Monate investiert hab.


    Werd mir da schon noch was überlegen :-). Vielleicht bekommt cxxtools auch in nicht all zu fernen Zukunft https-Support. Zumindest habe ich da etwas auf der Mailingliste gelesen.


    Schöne Grüße
    Michael

  • Ein paar Gedanken/Ideen:


    • Mehrere VDR-Plugins haben je einen HTTP-Server eingebacken (streamdev-server, live, restfulapi). Jedes muss auf einem eigenen HTTP-Port lauschen.
    • Wenn diese Plugins sich in einen CGI-Mode schalten ließen, wo der eingebaute Web-Server inaktiv ist, könnte man sie evtl. als CGI-Programme in einen unabhängigen Web-Server (Lighttpd, Nginx) auf dem gleichen Host einbinden (http://www.tntnet.org/cxxtools_cgi.cpp.html).
    • Der unabhängige Web-Server selbst würde dann bestimmen, auf welchem Port welches Plugin unter welchen URLs zur Verfügung steht und kann alles auf einem Port bündeln, ohne dass der Server als Reverse-Proxy konfiguriert werden müsste. Die Web-Server-Konfiguration entscheidet, wer wo und wie Zugriff erhält.
    • Hat streamdev-server eine Nutzerverwaltung, die festlegt, wer welche TV-Kanäle streamen darf?
    • Die Security endet da, wo jemand mit der Fernbedienung vor dem VDR sitzt und per Fernbedienung auf dem "localhost" Aufnahmen löschen darf, ohne ein Passwort eingeben zu müssen. Insofern hat ein Angreifer mit (physikalischem) Zugriff auf den Localhost immer alle Möglichkeiten, Schaden anzurichten.


    Gruß
    hepi

  • Die Security endet da, wo jemand mit der Fernbedienung vor dem VDR sitzt und per Fernbedienung auf dem "localhost" Aufnahmen löschen darf, ohne ein Passwort eingeben zu müssen. Insofern hat ein Angreifer mit (physikalischem) Zugriff auf den Localhost immer alle Möglichkeiten, Schaden anzurichten.


    Stimmt (gegen physikalischen Zugriff kann man nix machen, aber übers Netz sollte es wenigstens halbwegs sicher sein), wobei ich da schon teilweise meine Idee umgesetzt habe alle entsprechenden Aktionen (Aufnahmen löschen, Timer löschen usw.) bei aktiver Kindersucherung zu sperren. Sind nur einige wenige Zeilen Code pro Plugin und man hat nen gastsicheren VDR.


    Wobei es mir bei der ganzen Sache auch weniger um mutwillige Aktionen geht, mir gehts eher darum das einige Leute dazu tendieren einfach mal sinnlos rumzuprobieren wenn sie nicht wissen wie etwas geht und ich keine Lust habe deswegen am VDR irgendwas zu verlieren.
    Ist halt mehere so eine Prinzipsache als irgendwas mit hoher Priorität.


    Und mir gings hier auch nur darum das Thema wenigsten mal anzusprechen weills sonst keiner Erwähnt hat.


    [*]Hat streamdev-server eine Nutzerverwaltung, die festlegt, wer welche TV-Kanäle streamen darf?


    Gute Frage, ich nutze den vomserver und der gibt jeden einfach alle Rechte. Wobei es bei dieser Frage je erstmal um den Jugendschutz geht. Der wird übers LAN auch so gut wie nie bachtet.


    cu

  • Moin!


    Authentifizierung und Authorisierung ist für mich ein ganz wichtiges Thema.


    HTTPS ist nur ein Anfang, das hat damit ja eigentlich erst mal nichts zu tun, sondern sichert nur die Übertragung vor Abhören. Das sollte auf alle Fälle eingebaut werden, ist aber vom benutzten Web-Server abhängig. In diesem Fall von cxxtools bzw. es ließe sich, falls der Zugriff über einen anderen Web-Server "getunnelt" wird, eben auch dort aktivieren.


    Benutzername/Passwort-Kombinationen sind zwar schön und nett, aber wenn sowas nicht richtig umgesetzt wird (Passwörter dürfen nicht im Klartext gespeichert werden, wie sicher ist der verwendete Hash-Algorithmus beim Speichern der Passwörter usw.), taugt es auch nicht. Gerade bei HTTP müsste das Passwort bei jedem Zugriff übertragen werden bzw. eine Session-ID. Und wenn man dann über einen Zwangsproxy zugreifen muss (z.B. von der Firma aus), ist eine IP-gebundene Session-ID auch wieder doof.


    Mein persönlicher Favorit sind Client-Zertifikate. Da muss dann kein Passwort übertragen bzw. gespeichert werden. Aber wie das genau funktioniert, weiß ich noch nicht. Das ist halt etwas, das ich noch lernen muss. Ich stelle es mir im Prinzip wie ssh mit public-key vor, ich hoffe, ich liege da richtig. ;)


    Gehe ich richtig in der Annahme, dass lesende Operationen GET verwenden und schreibende PUT bzw. DELETE/INSERT? Dann müsste sich darüber im Web-Server eigentlich konfigurieren lassen, wer auf was zugreifen darf. Wenn wir jetzt mal ein wenig weiter spinnen und uns Live nicht als Plugin, sondern als Javascript-Anwendung im Browser vorstellen, dass auf das abgesicherte restfulapi zugreift, muss die "Live-App" noch nicht mal eine eigene Benutzerverwaltung besitzen. Einziger Nachteil ist, wenn man mal aus der Fremde (Internet-Cafe, Freunde usw.) mal eben so eine Aufnahme programmieren will. Aber wer einen vdr aus der Ferne bedienen will, muss sich dann eben ein eigenes Smartphone zulegen... :)


    Um deine Frage zu beantworten: ja, es gibt jemanden, der darüber nachdenkt und es irgendwann gerne umsetzen möchte...
    siehe auch Portnummer des WFE (Web-Front-End) bei yaVDR ändern


    Lars.

  • Mein persönlicher Favorit sind Client-Zertifikate. Da muss dann kein Passwort übertragen bzw. gespeichert werden. Aber wie das genau funktioniert, weiß ich noch nicht. Das ist halt etwas, das ich noch lernen muss. Ich stelle es mir im Prinzip wie ssh mit public-key vor, ich hoffe, ich liege da richtig. ;)


    Client-Zertifikate sind aus meiner Sicht nur dann sinnvoll, wenn sich die Anzahl der Clients nicht ändert. Jedem Client muss ein Zertifikat ausgestellt werden. Prinzipiell nicht schlecht, aber mit viel Aufwnad verbunden, da die Zertifikate Server- und Clientseitig verwaltet werden müssen.


    Medion Digitainer; AsRock B75 Pro3-M, Celeron G540; Kingston Value 4GB
    Samsung SpinPoint 250GB 2,5"; Samsung WriteMaster DVD-Brenner;
    TT-S2-6400, 2x TT-S2-1600, Ubuntu 12.04 mit YaVDR-Paketen. VDR 1.7.27, UPnP/DLNA-Plugin

  • Ich finde die Idee mit den Clientzertifikaten am Ende auch etwas unpraktisch. Jeder Browser bietet Support für http Authentifizierung (und mittlerweile auch für die Variante mit dem Web Formular), ferner wäre ein "eingeloggt bleiben" (per Cookies) auch OK. Und jede (also wirklich jede) Website arbeitet problemlos nach diesem Muster. Hier gehts ja nicht zum Hochsicherheitsbankanwendungen.


    https wäre als Option zusätzlich ganz nett, aber AFAIK nicht das wichtigste. Abgesehen davon wird wohl niemand nen Zertifikat spendieren (was AFAIK Jährlich Geld kostet), also bleibts beim selbsterstelleten was jeder Nutzer vom VDR Webinterface runterläd und akzeptiert (Das Root Zertifikat halt halt kein Browser wenn mans selbst erstellt) nachdem der VDR Admin den Fingerprint telefonisch bestätigt hat ;)



    Wobei das alles die restfulapi überhaupt nicht betrifft, der Enduser kommt mit der restfulapi ja überhaupt nicht in Berührung, die wird in ner Webanwendung per ajax oder von Clientsoftware genutzt (und diese Fragen dann Passwort/Nutzername ab oder nutzen Zertifikate), also muss da ne Authentifizierung inkl. Berchtigungsattributen irgendwie mit ins Protokoll.


    cu

  • Hallo,


    immer wenn ich das Plugin lade bekomme ich beim beenden des VDR ein 'killed by ...' im syslog:


    Den VDR beende ich mit
    #> stop vdr


    Code
    Aug 16 12:08:40 vdr vdr: [6014] GraphTFT plugin display thread ended (pid=5899)
    Aug 16 12:08:40 vdr vdr: [5899] deleting plugin: restfulapi
    Aug 16 12:08:40 vdr vdr: [5993] Netwatcher thread ended (pid=5899, tid=5993)
    Aug 16 12:08:41 vdr vdr: [5899] caught signal 15
    Aug 16 12:08:41 vdr vdr: [5899] exiting, exit code 0
    Aug 16 12:08:41 vdr init: vdr main process (5899) killed by ABRT signal


    System: yavdr 04.pre mit allen verfügbaren updates.


    Scheint auch ein SEGFAULT beim beenden zu geben. Deaktiviere ich restfulapi via der order.conf ist diese Meldung weg.


    Danke und Grüße,
    Jörg

  • hmm, gearde mal geschaut


    den

    Code
    Aug 16 12:08:41 vdr init: vdr main process (5899) killed by ABRT signal


    hab ich nicht aber in der Tat nen segfault:

    Code
    Aug 16 12:19:50 CKone kernel: [ 2205.672338] vdr[5328]:
    segfault at 7f506ced5910 ip 00007f506ced5910 sp 00007fffa9bee8f8
    error 14 in libXdmcp.so.6.0.0[7f506da91000+5000]


    welcher sich durch Deaktivieren des restfulapi beseitigen lässt.


    Ist das ein generelles Problem oder eine Wechselwirkung in einer spezifischen Konfiguration?


    Christian

    CKone: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G540, 2x 2GB Kingston DDR3, Zotac GT630 1GB, S2-1600, Ocz Agility 3 60GB, LG GH24NS DVD, 15.6" Selbstbau TFT, Harmony 665, CIR Selbstbau - das Ganze im Silverstone SST-SG03B
    CKtwo: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G1610, 2x 2GB Corsair DDR3, Zotac GT630 1GB, TT S2-1600, Ocz Vertex 2 50 GB, 92 Kanal Seduatmo, Harmony 665, atric USB
    CKthree: yavdr-ansible/22.04 LTS/2.6.1/kodi19.3 auf Intel NUC, Celeron J4005, UHD Graphics 600, 4GB Crucial DDR4, Ocz Vertex2 50 GB, Harmony 350

    PowerEdge: Ubuntu Server 16.04 LTS / VDR 2.4.1 auf Dell PowerEdge T20, Xeon E3-1225 v3, 16GB ECC DDR3, 2x Cine S2 V6 mit Duoflex, Samsung 840 EVO 120GB, 3x WD White WD80EZAZ 8TB in SW Raid5



  • Aug 16 12:19:50 CKone kernel: [ 2205.672338] vdr[5328]:
    segfault at 7f506ced5910 ip 00007f506ced5910 sp 00007fffa9bee8f8
    error 14 in libXdmcp.so.6.0.0[7f506da91000+5000]


    Hmm, aelo was machst du denn mit dem X Display Manager? Oder ist das nur ein Folgefehler?


    Gerald


    HP Proliant MicroServer Gen8, Xeon E3-1230, 12 GB RAM, 3xWD red 2TB im RAID 5, 2xSundtek MediaTV Home DVB-C/T, L4M TWIN-C/T, Ubuntu Server 14.04.1, Plex Media Server
    Samsung UE55H6470

  • Irgendwie fiel mir das auch schonmal auf. Aber Abstürze beim beenden nerven mich nicht so sehr. Und der Backtrace sagt mir nix ausser das das restfulapi Pluign da irgendwie mit drinhängt.



    Code
    Aug 16 17:33:46 localhost vdr: [14578] receiver on device 2 thread ended (pid=1649, tid=14578)
    Aug 16 17:33:46 localhost vdr: [1659] section handler thread ended (pid=1649, tid=1659)
    Aug 16 17:33:46 localhost vdr: [1658] tuner on device 2 thread ended (pid=1649, tid=1658)
    Aug 16 17:33:46 localhost vdr: [1649] Releasing DFB
    Aug 16 17:33:47 localhost vdr: [1649] [VideoOut]: Good bye
    Aug 16 17:33:47 localhost vdr: [1649] deleting plugin: streamdev-client
    Aug 16 17:33:47 localhost vdr: [1649] deleting plugin: restfulapi
    Aug 16 17:33:58 localhost vdr Init: Start VDR: Exiting with Signal (6)
    Aug 16 17:33:58 localhost vdr Init: Giving up


    cu


  • Hmm, aelo was machst du denn mit dem X Display Manager? Oder ist das nur ein Folgefehler?


    Gerald


    Das ist es ja, gar nix ;)


    edit:


    Main Log sieht so aus:


    Code
    Aug 16 19:05:40 Michael-PC vdr: [3916] stopping plugin: restfulapi
    Aug 16 19:05:40 Michael-PC vdr: [3916] restfulapi: will end server thread: /1313514340/
    Aug 16 19:05:40 Michael-PC vdr: [3925] restfulapi: server thread end: /1313514340/
    Aug 16 19:05:40 Michael-PC vdr: [3925] restfulapi: server thread ended (pid=3916)
    Aug 16 19:05:40 Michael-PC vdr: [3916] deleting plugin: restfulapi


    Habe auch in den letzen Tagen kein Segfault in meinem log (ok, 1 aber das war vdr-sxfe...).


    gerald: hast du den Fehler auch? Gibt es den vielleicht nur in yavdr 0.4? Müsste mir da wohl wieder mal eine aktuelle VM installieren.


    Schöne Grüße
    Michael


    edit2:
    Vielleicht könnte ja jemand einen Backtrace erstellen, damit sollte sich der Fehler dann finden lassen :).

  • Hallo,


    habe nun mal wieder den aktuellen Stand nach Testing gemerged. In den nächsten Stunden sollte ein Paket für die pre-User gebaut werden.
    Vielleicht könnt ihr ja mal testen ob damit das Problem immer noch auftritt. Es gab einige Änderungen seit dem letzten Merge.


    Mit der aktuellen Version konnte ich das Problem zumindest unter LinuxMint und auch unter unstable yavdr 0.4 nicht nachvollziehen.


    Falls dies den Fehler bei euch nicht beseitigt wäre ich um genauere Logs dankbar damit ich das behaben kann. Ein Backtrace wäre dann sehr hilfreich.


    Vielen Dank
    mfg
    Michael

  • Ich habe nen Absturz in Verbindung mit dem Burn Pluign. Backtrace ist dort.
    [Announce] Burn-Plugin 0.2.0-beta6


    cu

  • Ich habe nen Absturz in Verbindung mit dem Burn Pluign. Backtrace ist dort.
    [Announce] Burn-Plugin 0.2.0-beta6


    cu


    Vielen Dank 'Keine_Ahnung'! (Wie heißt du eigetnlich richtig? Dein Name ist ja nicht gerade passend :) )


    Ich habe nun ein paar NULL-Pointer überprüfungen eingebaut, da ich vermute dass es daran lag.
    Hochgeladen habe ich es, gebaut sollten die Pakete wieder in den nächsten Stunden.


    Ist es umständlich das Brun-Plugin zu installieren? Um ehrlich zu sein hab ich das noch nie verwendet, deshalb freu ich mich auf deinen Report ob es den Fehler behoben hat :D


    Schöne Grüße
    Michael

  • Hi Michael


    also mit der neuen Version ist der segfault hier weg.


    Gruß Christian

    CKone: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G540, 2x 2GB Kingston DDR3, Zotac GT630 1GB, S2-1600, Ocz Agility 3 60GB, LG GH24NS DVD, 15.6" Selbstbau TFT, Harmony 665, CIR Selbstbau - das Ganze im Silverstone SST-SG03B
    CKtwo: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G1610, 2x 2GB Corsair DDR3, Zotac GT630 1GB, TT S2-1600, Ocz Vertex 2 50 GB, 92 Kanal Seduatmo, Harmony 665, atric USB
    CKthree: yavdr-ansible/22.04 LTS/2.6.1/kodi19.3 auf Intel NUC, Celeron J4005, UHD Graphics 600, 4GB Crucial DDR4, Ocz Vertex2 50 GB, Harmony 350

    PowerEdge: Ubuntu Server 16.04 LTS / VDR 2.4.1 auf Dell PowerEdge T20, Xeon E3-1225 v3, 16GB ECC DDR3, 2x Cine S2 V6 mit Duoflex, Samsung 840 EVO 120GB, 3x WD White WD80EZAZ 8TB in SW Raid5



  • Hallo Michael,


    ne kleine Bitte: kannst du das Ding evtl n klein wenig weniger gespächig einstellen - ich brauch jetzt nicht gerade das Löschen jedes einzelnen epg image in einer linie des Syslog bestätigt haben wenn ich mal grad 20.000 Bildchen lösche?


    Danke,
    Christian

    CKone: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G540, 2x 2GB Kingston DDR3, Zotac GT630 1GB, S2-1600, Ocz Agility 3 60GB, LG GH24NS DVD, 15.6" Selbstbau TFT, Harmony 665, CIR Selbstbau - das Ganze im Silverstone SST-SG03B
    CKtwo: yavdr-ansible/18.04 LTS/2.4.1/kodi18 auf Intel DH67BL, Intel Celeron G1610, 2x 2GB Corsair DDR3, Zotac GT630 1GB, TT S2-1600, Ocz Vertex 2 50 GB, 92 Kanal Seduatmo, Harmony 665, atric USB
    CKthree: yavdr-ansible/22.04 LTS/2.6.1/kodi19.3 auf Intel NUC, Celeron J4005, UHD Graphics 600, 4GB Crucial DDR4, Ocz Vertex2 50 GB, Harmony 350

    PowerEdge: Ubuntu Server 16.04 LTS / VDR 2.4.1 auf Dell PowerEdge T20, Xeon E3-1225 v3, 16GB ECC DDR3, 2x Cine S2 V6 mit Duoflex, Samsung 840 EVO 120GB, 3x WD White WD80EZAZ 8TB in SW Raid5



  • Hi,


    Vielen Dank von CKone für den Hinweis, das sollte natürlich nicht in den log geschrieben werden, ist nur ein Überbleibsel von meinen Debuggingversuchen als das ganze noch in Entwicklung war :-).


    Ich lade die Änderung gleich hoch!


    Mfg
    Michael


    edit: Ist online auf github in master und testing.

  • Hallo Michael,


    epg.xml funktioniert mittlerweile auch mit Kika.
    Eine Kleinigkeit zu timers.xml. Wenn ein Timer z.B. um 00:04 Uhr endet, steht als stop der Wert 4. Wäre nicht 0004 korrekt?


    Danke für deine Mühen.


    Grüße
    Alex

    Server: CPU J1900 | 1x CineS2 | Debian Bullseye headless| VDR 2.6.3
    Client: 2x Himbeere mit vdr

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!