Benutzer nur bestimmte Befehle freigeben

  • Achja, das ständig eine Wissenschaft und/oder Geheimnis aus allem gemacht werden muss...


    Der TE möchte folgende Befehle über seine Webseite verwenden, für die er explizit root-Rechte benötigt:
    halt
    reboot
    apt-get update
    apt-get upgrade


    Für eine Webseite kann man keine chroot Umgebung umsetzen - bzw ja oke, Goldwaagen-korrekt wäre das man es schon könnte, wäre aber völliger Schwachsinn...


    Was macht man nun, damit diese root-Rechte-Befehle über eine Webseite trotzdem funktionieren?


    2 Möglichkeiten:

    • Die erste wäre die von mir bereits erwähnte Möglichkeit, ein Script zu erstellen, dieses eine Script über visudo zu erlauben und beim jeweiligen Aufruf das Script über sudo mit einem entsprechenden Paramter auszuführen.

      • /var/sudowebscript.sh

        Bash
        #!/bin/bash## sudo web script allowing user www-data to run commands with root privilegscase "$1" in    pwroff)        halt    ;;    reb)        reboot    ;;    up-grade)        apt-get update && apt-get upgrade -y    ;;   *) echo "ERROR: invalid parameter: $1 (for $0)"; exit 1 ;;esacexit 0


      • index.php

      • PHP
        Anschließend über [b]visudo[/b] für den 'www-data' Benutzer nur das Script eintragen:[code]www-data ALL=NOPASSWD:/var/sudowebscript.sh


    • Jeden einzelnen Befehl über visudo für den 'www-data' Benutzer eintragen:

      • Code
        www-data ALL=NOPASSWD:/sbin/halt,/sbin/reboot,/usr/bin/apt-get


      • Die index.php so belassen wie es in Beitrag#12 bereits ist.
        Hier lässt sich aber nicht weiter einschränken was an die Befehle übergeben wird, ein Angreifer könnte also auch Pakete über apt-get deinstallieren usw, und unter anderem deshalb ist diese Methode unsicherer.


    Allgemein sei auch noch erwähnt das es besser wäre die Ausgabe von 'up-grade' sich ausgeben zu lassen, falls da etwas schief geht, und das ein wenig interactiver zu gestalten da es auch unter Linux nicht immer gut ist einfach 'blind' allem zuzustimmen.


    Anstatt shell_exec(); sollte zudem lieber exec(); genutzt werden.


    Siehe dazu auch: http://www.forum-raspberrypi.d…setzen?pid=37843#pid37843


  • ...
    Für eine Webseite kann man keine chroot Umgebung ...
    ...


    Wer, ausser Dir, hat jetzt was von Webseite gesagt ... Benutzer ist das Stichwort ...
    Du kannst es nicht lassen, Aussagen so hinzudrehen, damit sie Dir in den Kram passen, oder :no_sad:
    Dabei wäre es so einfach mal ...


    Aber wie gesagt, lassen wir das.
    -ds-


  • Wer, ausser Dir, hat jetzt was von Webseite gesagt ... Benutzer ist das Stichwort ...


    Oh man bist du heute anstrengend...


    Nicht ich sagte das sondern der TE - und 3x darfst du raten wo...
    Na, kommste drauf?
    Falsch!
    Im ersten Beitrag:



    [...]
    ich bin gerade dabei eine Weboberfläche zu machen [...]

    (und wenn man sich SEINE index.php anguckt (Beitrag#12) dann sieht das auch wie eine Webseite aus, so von wegen html und so...)




    Dabei wäre es so einfach mal ...


    Lass langsam mal gut sein @ dreamshader. Diesen Spruch werfe ich dir auf direktem Wege zurück