als "www-data" Dateien in den Ordner /etc/ schreiben?

  • Mahlzeit,


    wie es der Titel schon sagt... Ich möchte mittels meiner Webanwendung (also als user "www-data") in den Ordner /etc ein paar *.conf Dateien löschen/erzeugen/befüllen. Scheinbar hat der user "www-data" aus Sicherheitsgründen keine Rechte, dies zu tun. Wie kann ich für o.g. Aktion die Rechte einräumen?


    EDIT: eine Möglichkeit wäre doch, im Ordner /var/www/html/ eine test.sh zu erstellen. Dann mittels visudo folgenden Eintrag:

    Code
    www-data ALL=NOPASSWD: /var/ww/html/test.sh


    Gibt es da sicherheitsrelevante Aspekte, welche dagegen sprechen? Bzw. könnte man diese Art über visudo evtl. sicherer machen? Oder ist das schon "recht sicher" :helpnew: :helpnew:

    Edited once, last by noobee ().

  • Hallo noobee
    Deine Möglichkeit entspricht einem generellen sudo für den www-data, da der user das Skript vermutlich verändern darf und damit beliebige Befehle einsetzen kann.


    Geht es denn um Dateien direkt in /etc, oder in einem Unterordner davon?
    Was macht dein Skript den? Ist es von Parametern gesteuert?
    Welche Konfigurationsdateien möchtest du eigentlich ändern?


    Gruß
    Chris

  • FAQ => Nützliche Links / Linksammlung => Befehle über PHP mit root Rechten ausführen (sudo webscript)


    Es ist absolut nicht sicher!


    Es hat gute Gründe wieso normale Benutzer nichts in /etc/ verändern dürfen. Du solltest dir also wirklich gut überlegen ob das so klug ist. Insbesondere da das ein riesiges Sicherheitsrisiko darstellen kann sofern dein Pi übers Internet ansprechbar ist - nicht nur für deinen Pi sondern für alle in deinem LAN befindlichen Geräte!
    Es ist ebenfalls wichtig nicht das Script, welches über sudo ausgeführt wird, direkt im DocumentRoot abzulegen, denn dann könnte jemand diese Datei direkt auslesen und weiß sofort welche Befehle er für seinen Angriff nutzen kann.


    Bevor ich dazu noch mehr texte wäre für mich wichtig zu wissen welche Dateien du in /etc/ verändern willst?

  • Quote

    Bevor ich dazu noch mehr texte wäre für mich wichtig zu wissen welche Dateien du in /etc/ verändern willst?


    mhh, das wären gleich mehrere:
    /etc/udhcpd.conf
    /etc/network/interfaces
    /etc/hostapd/hostapd.conf
    im Moment würde ich die 3 Dateien alle in die visudo eintragen, um www-data die Rechte zu gewähren


  • Ist dein Pi übers Internet ansprechbar?


    ja


    Und was willst du in den Dateien verändern?


    hauptsächlich IPs, DNS, SUBNET


    Wenns denn unbedingt sein muss wäre es besser zu verwendest ein Script und sprichst dieses Script über Parameter an - so wie in dem verlinkten Beitrag beschrieben.


    Ok, der Sicherheit halber werd ich da wohl nicht drumrum kommen

  • Wie gesagt, dann leg am besten ein Script /var/sudowebscript.sh o.ä. an, füge dort den entsprechenden Code zum bearbeiten deiner Dateien in eigene Funktionen ein und lege dann Parameter fest die du über PHP ansprechen kannst.


    Beispiel:



    Aufruf im PHP Script:
    [code=php]
    exec('sudo /var/sudowebscript.sh _ap "kaputt"');
    exec('sudo /var/sudowebscript.sh _net');
    [/php]...oder wie im sudowebscript beschrieben mit Error- und Output Handling



    Auf diese Weise kann ein möglicher Angreifer nur die "case" Parameter verwenden und über das sudowebscript keinerlei anderen Befehle ausführen. Wichtig ist halt nur das deine selbst definierten Funktionen (Befehle) keine Injections ermöglichen, ebenso wenig wie deine exec(); das natürlich auch nicht sollten ;)