vdr als non-root - Probleme beim runterfahren mit dem Wakeup(Extensionboard)

  • Hallo Jungs,


    ich bin am ENde mit meinem Latein und brauche eure Hilfe. Habe am Wochenende von 1.3.x auf 1.4.0 umgestellt. Es läuft soweit alles ganz gut, nur durch die Tatsache, dass der VDR nicht als root läuft habe ich ein Problem.


    Ich nutze debian und das Extensionboard. DIes nur als Hinweis, denn das Problem ist aber allgemeiner Natur.


    Mein Shutdownscript testet ne Menge (laeuft noad, vdrconvert? ist noch ein user eingeloggt per ssh?) und fährt nur runter wenn nichts von dem zutrifft. Beim runterfahren programmiert das Script den Wakeup Timer vom ExtBoard und die Kiste legt sich schlafen.


    So war es zumindest bei der 1.3.x als der VDR noch als root lief.


    Wenn ich mein shutdown Script manuell von der Shell als root aufrufe, dann läuft alles paletti, der Timer wird programmiert.


    Wenn ich es als vdr user (unter dem läuft der VDR) starte, dann erhalte ich folgende Fehlermeldung und der Wakeup Timer wird nicht programmiert.


    Hier der log. Einmal als root gestartet und einmal als vdr.

    Code
    vdr@medio2:~$ su vdr; whoami
    vdr
    vdr@medio2:~$ /usr/lib/vdr/vdr-shutdown.wrapper 1150192440 12177 5 "Serien~Avenzio~2006-06-13" 0
    Insecure dependency in system while running setuid at /usr/lib/vdr-plugin-extb/extb-poweroff.pl line 87, <CONFIG> line 96.
    vdr@medio2:~$
    medio2:~# exit; whoami
    root
    medio2:~# /usr/lib/vdr/vdr-shutdown.wrapper 1150192440 12177 5 "Serien~Avenzio~2006-06-13" 0
    medio2:~#


    Über syslog und ein paar Debug Messeges kann man sehen, dass als root alles glatt läuft und als vdr eben nicht.


    Hier die entsprechenden Zeilen aus dem /usr/lib/vdr-plugin-extb/extb-poweroff.pl. Ist das was beim vdr-plugin-extb dabei ist, erweiter um ein paar debugging Ausgaben.

    Code
    ################################################################################
    # Execute external command
    sub ExecCmd {
      my $cmd = shift;
      dprint("Exec: ".$cmd);
      system( $cmd ) if(!$DEBUG);
      dprint("Exec done: ".$cmd);
    }


    Was er mit $cmd ausführt ist folgendes

    Code
    Jun 13 09:05:19 medio2 poweroff.pl: Exec: /usr/bin/irsend send_once EXTB_TX 0 0 4 8 F 1


    Die Rechte der beteiligten Scripte und Binaries. Der wrapper ruft das S91.extb Script auf und darin wird laut obigen Source Auszug irsend gestartet.


    Code
    medio2:~# ll /usr/lib/vdr/vdr-shutdown.wrapper
    -rwsr-s---  1 root vdr 2652 2006-06-12 08:33 /usr/lib/vdr/vdr-shutdown.wrapper
    medio2:~# ll /usr/share/vdr/shutdown-hooks/S91.extb
    -rwxr-xr-x  1 root root 138 2006-06-13 07:15 /usr/share/vdr/shutdown-hooks/S91.extb
    medio2:~# ll /usr/bin/irsend
    -rwxr-xr-x  1 vdr vdr 7364 2005-03-12 00:03 /usr/bin/irsend


    Hat jemand nen hint für mich? Das dürfte nicht nur mich betreffen, sondern ne Vielzahl von Usern die das Extb nutzen. Mich wundert nur, warum ich der erste bin der hier dazu was schreibt. Oder ich bin zu blöd zum suchen oder hab einfach Null AHnung ;).


    Anyway. Any hints?

  • Ein wenig weiter bin ich gekommen. Die Perl Fehlermeldung habe ich wegbekommen. Es geht um den "Tainted" Mode von Perl.


    mit

    Code
    $cmd =~ /(.*)/;
    $cmd = $1;

    bekommt man die Meldung (auf die nicht feine englische Art ;) weg.


    Nur führt der VDR den irsend Befehl immernoch nicht aus. Als root den wrapper angeworfen klappt alles. Als vdr auf der command line manuell angeworfen führt er den irsend Befehl nicht aus.


    Ich hab mittlerweile auch alle beteiligten Scripte&Binaries auf suid und als owner root.vdr eingetragen. Keine Änderung!


    Code
    -rwsr-s---  1 root vdr 2652 2006-06-12 08:33 /usr/lib/vdr/vdr-shutdown.wrapper
    -rwsr-sr-x  1 root vdr 138 2006-06-13 07:15 /usr/share/vdr/shutdown-hooks/S91.extb
    -rwsr-sr-x  1 root vdr 7364 2005-03-12 00:03 /usr/bin/irsend


    Bitte helft mir. Der VDR ist ohne laufenden Wakeup fast ;) nutzlos.

  • Zitat

    Original von randy
    "sudo" koennte auch gehen. am besten mit NOPASSWD: fuer die befehle :)


    -- randy


    Ist ja, wie mit Kanonen auf Spatzen schießen :D


    Also ein grundsätzliches Problem kann ich ausschließen, da die von RaK beschriebene Konstellation hier seit Ewigkeiten funktioniert.



    Ich würde mal auf ein Berechtigungsproblem tippen.


    # ls -Al /dev/lirc*
    crw-rw-r-- 1 root video 61, 0 2003-10-16 19:18 /dev/lirc
    srw-rw-r-- 1 root video 0 2006-06-13 16:03 /dev/lircd
    prw-rw-r-- 1 root video 0 2003-10-16 19:18 /dev/lircm


    # groups vdr
    vdr : video tty disk lp vdrdaem audio



    Im Zweifel hilft es per "su" in den Account vdr wechseln, und irsend starten. Um die Fehlermeldung zu erhalten. Sollte die nicht weiterhelfen, hilft es mit strace einen Systemprotokoll zu erstellen. Um zusehen was schief geht.


    Andreas

  • Hulk du bist ein Schatz!


    Genau das war das Problem. So sehen jetzt die Rechte aus wenn es funktioniert.


    Code
    -rwxr-x---  1 root vdr 2652 2006-06-12 08:33 /usr/lib/vdr/vdr-shutdown.wrapper
    -rwxr-xr-x  1 root vdr 184 2006-06-13 17:56 /usr/share/vdr/shutdown-hooks/S91.extb
    -rwxr-xr-x  1 root vdr 9064 2006-06-13 18:14 /usr/lib/vdr-plugin-extb/extb-poweroff.pl
    crw-rw-r--  1 root vdr 61, 0 2005-01-13 19:21 /dev/lirc
    srw-rw-r--  1 root vdr     0 2006-06-13 18:27 /dev/lircd
    prw-rw-r--  1 root vdr     0 2005-01-13 19:21 /dev/lircm
  • So, die Wakeup Zeit wird jetzt gesetzt. Dafuer faehrt der VDR nicht mehr runter. Woran lag es? /sbin/shutdown darf nicht von non-root usern ausgefuehrt werden. Da ist Linux halt hart.


    Gelöst habe ich es auf die brutale Tour. Ich hab mit

    Code
    # chmod ug+s /sbin/shutdown


    das s-bit für das shutdown binary gesetzt.


    Warum lese ich dazu nichts hier im Board? Bin ich der einzige, der VDR als non-vdr User laufen lässt?

  • Hi!


    Ich bin mittlerweile auf genau die gleichen Probleme gestossen. Nach einigem Googlen nach perl und Insecure Fehlermeldungen hatte ich dann die Umgebungsvariable PATH vor dem Aufruf des Perlskriptes angepasst und ein untaint im Perlskript auf der Variable cmd vor dem Aufruf mit system eingebaut. Wie ich das genau gemacht habe, konnte ich leider nicht nachvollziehen, nachdem jetzt bei einem Update auf 1.6.0 mal wieder alles kaputt war. Da hat mir die hier beschriebene Methode geholfen. Das "untainten" der Variable cmd ging irgendwie nicht mehr.


    Mal schauen, ob ich den Paketbauer zu dem Thema interviewen kann. Ich kann mir auch vorstellen, dass irgendwelche Rechte an Dateien bei mir nicht passen, weil ich schon Jahrzehnte das gleiche System mit dem VDR drauf habe.

    VDR-User #985


    SW: Debian Sid, e-Tobi's VDR 1.6.0, vdr-sxfe mit VDPAU :strike1
    Plugins: devstatus, director, dvd, extb, femon, graphlcd, lastfm, mp3, mplayer, osdpip, osdteletext, premiereepg, skinenigmang, streamdev-server, sysinfo, text2skin, tvonscreen, vcd, vdrrip, webvideo, xineliboutput
    HW: Silverstone LC17, P5Q SE, C2D E7300, 1GB RAM, 500GB Platte, Hauppauge DVB-S rev1.6, TT 3200

  • Hier nochmal die Fehlermeldungen bei mir:


    Code
    May 17 11:23:36 video extb: PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
    May 17 11:23:36 video extb: Insecure $ENV{PATH} while running setuid at /usr/lib/vdr-plugin-extb/extb-poweroff.pl line 80, <CONFIG> line 96.


    Und nachdem ich in S91.extb den Pfad dann folgendermaßen eingestellt hatte


    Code
    PATH="/bin:/sbin"


    kam dann diese Fehlermeldung


    Code
    May 17 11:51:39 video extb: Command "/usr/bin/irsend send_once EXTB_TX 0 0 1 8 5 E  " at /usr/lib/vdr-plugin-extb/extb-poweroff.pl line 84, <CONFIG> line 96.
    May 17 11:51:39 video extb: Insecure dependency in system while running setuid at /usr/lib/vdr-plugin-extb/extb-poweroff.pl line 86, <CONFIG> line 96.


    Muss wohl mal ein nacktes neues Debian aufsetzen, um nachzuprüfen, was da falsch ist.

    VDR-User #985


    SW: Debian Sid, e-Tobi's VDR 1.6.0, vdr-sxfe mit VDPAU :strike1
    Plugins: devstatus, director, dvd, extb, femon, graphlcd, lastfm, mp3, mplayer, osdpip, osdteletext, premiereepg, skinenigmang, streamdev-server, sysinfo, text2skin, tvonscreen, vcd, vdrrip, webvideo, xineliboutput
    HW: Silverstone LC17, P5Q SE, C2D E7300, 1GB RAM, 500GB Platte, Hauppauge DVB-S rev1.6, TT 3200

  • Diesmal habe ich nach einem Update folgendes in /usr/lib/vdr-plugin-extb/extb-poweroff.pl eingefügt:


    Code
    sub ExecCmd {
      my $cmd = shift;
      $ENV{'PATH'} = '/bin:/usr/bin';
      $cmd =~ /^(.*)$/;
      $cmd = $1;
      dprint("Exec: ".$cmd);
      system( $cmd ) if(!$DEBUG);
    }


    Damit lief es dann wieder bei mir.

    VDR-User #985


    SW: Debian Sid, e-Tobi's VDR 1.6.0, vdr-sxfe mit VDPAU :strike1
    Plugins: devstatus, director, dvd, extb, femon, graphlcd, lastfm, mp3, mplayer, osdpip, osdteletext, premiereepg, skinenigmang, streamdev-server, sysinfo, text2skin, tvonscreen, vcd, vdrrip, webvideo, xineliboutput
    HW: Silverstone LC17, P5Q SE, C2D E7300, 1GB RAM, 500GB Platte, Hauppauge DVB-S rev1.6, TT 3200

Jetzt mitmachen!

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