CGI / GPIO erforddert ROOT rechte

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Zusammen ,

    ich möchte ein Python script per CGI im Apache ausführen , welches auf den GPIO zugreift.

    Problem ist das beim Aufruf des Scripts über Web dieser Fehler erscheint:
    [font="Courier"]=> 19 GPIO.setup(BUTTON, GPIO.IN)
    20 GPIO.setup(LED, GPIO.OUT)
    21
    GPIO = <module 'RPi.GPIO' from '/usr/lib/python2.7/dist-packages/RPi/GPIO.so'>, GPIO.setup = <built-in function setup>, BUTTON = 23, GPIO.IN = 1

    <type 'exceptions.RuntimeError'>: No access to /dev/mem. Try running as root!
    args = ('No access to /dev/mem. Try running as root!',)
    message = 'No access to /dev/mem. Try running as root!' [/font]

    Die Fehlermeldung spricht für sich und auch als Benutzer PI muss ich das Script per Sudo starten. (oder mich als root einloggen)

    Eine Änderung von /etc/apache2/envvars

    Code
    #export APACHE_RUN_USER=www-data
    #export APACHE_RUN_GROUP=www-data
    export APACHE_RUN_USER=root
    export APACHE_RUN_GROUP=root


    bewirkt nur , das apache nicht startet.

    Da das ganze nicht vom Internet aus ansprechbar ist ,
    stört es mich auch nicht wenn alles ROOT berechtigung hat !

    Ein #!/usr/bin/env sudo python wird es wohl nicht sein :)
    ....... und nein ich möchte aus dem Script kein weiteres Script aufrufen.

    Danke
    Der Suchende

  • Danke , auf die Idee nach sudo rechten zu suchen , bin ich nicht gekommen.

    [font="Courier"]visudo

    # User privilege specification
    root ALL=(ALL:ALL) ALL
    www-data ALL=(ALL:ALL) ALL

    # Allow members of group sudo to execute any command
    %sudo ALL=(ALL:ALL) ALL

    # See sudoers(5) for more information on "#include" directives:

    #includedir /etc/sudoers.d
    pi ALL=(ALL) NOPASSWD: ALL[/font]

    Komme damit aber trotzdem irgendwie nicht weiter .
    Ich wüsste z.b. nicht wie ich die Schnitstelle, an der er ja bereits hängt, mit sudo definieren sollte.
    GPIO.setup(BUTTON, GPIO.IN)

    Eine Gruppe ROOT wo ich www-data aufnehmen kann gibt es anscheinend nicht ?

    gruss
    Der Suchende

  • Bei den Schnittstellen brauchst Du nicht mit sudo irgendwie rumfummeln ...
    Alles, was der Webserver ausführt läuft bei Deiner Variante mit root-Rechten.
    Das ist jetzt aber nicht so prickelnd ... schau noch ein bisschen weiter rum. Es ist möglich die scripte zu privilegieren, wenn ich mich nicht irre. Da weiss ich aber nicht mehr, wie.
    Steht irgendwo hier in den Threads rund um die sudo-Geschichte.

    cu,
    -ds-

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!