Benutzer nur bestimmte Befehle freigeben

  • Hallo,
    ich bin gerade dabei eine Weboberfläche zu machen und möchte dort den Benutzer www-data nur die Befehle

    Code
    sudo reboot

    ,

    Code
    sudo halt

    und die Befehlszeile

    Code
    sudo apt-get update && sudo apt-get upgrade -y

    freigeben, damit es halt keine Sicherheitslücke gibt. Wie kann ich das nun umsetzten?


    Lg
    dukennstmichnicht

    Edited once, last by StillFire23143 ().

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




    PS: Bitte nicht den vollständigen Beitrag quoten, vor allem wenn dieser genau da drüber steht. Danke.

  • Hey,
    Frage steht oben :wallbash:



    ... möchte dort den Benutzer www-data nur die Befehle

    Code
    sudo reboot

    ,

    Code
    sudo halt

    und die Befehlszeile

    Code
    sudo apt-get update && sudo apt-get upgrade -y

    freigeben, damit es halt keine Sicherheitslücke gibt.


    Hier das ist dei Frage: Wie kann ich einem Benutzer bestimmte Befehle freigeben. :helpnew:



    Lg
    dukennstmichnicht

  • Jaein, ich wollte jetzt nicht noch eine extra Datei anlegen, da es ziemlich unübersichtlich bei mir wird, sonder es in der /etc/sudoers festlegen.


    Aber trotzdem danke für deinen Beitrag :danke_ATDE: :danke_ATDE:


    Lg

  • Naja, dir geht es ums vermeiden von Sicherheitslücken. Trägst du jeden einzelnen Befehl direkt in die sudoers ein, ist es für einen Angreifer nicht nur einfacher die jeweiligen Befehle herauszufinden (ein Eintrag '/sbin/reboot' in /etc/sudoeres ergibt eben den Befehl 'reboot' im PHP Script), sondern bewirkt auch einen Entzug der Kontrolle sowie eine elendig lange sudoers Datei, die auch nur mit root/sudo Rechten erweitert werden kann.
    Also obsiegt Faulheit wieder mal über Sicherheit? :-/

  • Ist gut möglich, dass ich in dieser hinsicht mit der neuen datei Faul bin, aber ich hätte halt wie gesagt jeden Befehl in die Sudoers eingetragen.
    Gebe es sonst noch eine andere Möglichkeit?

  • Nein.


    Über sudoers wird festgelegt welcher Befehl erlaubt wird (oder alle). Trägt man dort ein Script ein, sind automatisch alle im Script befindlichen Befehle ebenfalls "erlaubt" - alles was über sudo ausführt wird, wird als root ausgeführt, also auch alle im Script befindlichen Befehle.


    Deshalb ist das nicht nur (imho) die Einfachste Möglichkeit, sondern auch die Übersichtlichste und als nettes Nebenprodukt zugleich die Sicherste :fies: Also 3 Fliegen mit einer Klappe....

  • Also wäre es möglich eine Datei zum Beispiel /var/www/server/index.php dort einzutragen, und nun kann ich diese alle ausführen?

  • [code=php]<?php
    session_start();
    if(isset($_SESSION["username"])) {
    ?>
    <html>
    <head>
    <title><?php include '../../include/title/name.php'; ?></title>
    <link rel='SHORTCUT ICON' href='../../img/itable.jpg'>
    </head>
    <body>
    <h1>Server</h1>
    <form action="index.php?page=4" method="post">
    <input type="submit" value="Server herunterfahren" />
    </form><?php
    if(isset($_GET["page"])) {
    if($_GET["page"] == "4") {
    shell_exec('sudo halt');
    }
    }
    ?>
    <br />
    <br />
    <form action="index.php?page=2" method="post">
    <input type="submit" value="Server neustarten" />
    </form><?php
    if(isset($_GET["page"])) {
    if($_GET["page"] == "2") {
    shell_exec('sudo reboot');
    }
    }
    ?>
    <br />
    <br />
    <form action="index.php?page=3" method="post">
    <input type="submit" value="Server aktualisieren" />
    </form><?php
    if(isset($_GET["page"])) {
    if($_GET["page"] == "3") {
    shell_exec('sudo apt-get update && sudo apt-get upgrade -y');
    }
    }
    ?>
    </body>
    </html>
    <?php
    } else {
    ?>
    Bitte erst anmelden, <a href="<?php include'include/link-login.php'; ?>">hier</a>.
    <?php
    }
    ?>[/php]



    Dies Hier ist meine php Datei, und diese Befehle die Darin stehen sollen halt ausgeführt werden, Diese Formulare sin dnur als Button nachher sichtbar.

  • Tja, wenn das Deine Frage ist:


    ...
    Hier das ist dei Frage: Wie kann ich einem Benutzer bestimmte Befehle freigeben. :helpnew:
    ...


    kannst Du alles bisher gepostete erst mal vergessen ...



    ...
    Über sudoers wird festgelegt welcher Befehl erlaubt wird ...
    ...


    das stimmt eben so nicht. Es wird lediglich festgelegt, was und wie von wem per sudo ausgeführt werden darf.
    Folgendes:


    ist z.B. trotzdem möglich.
    Es schränkt also in keinster Weise den "Befehlsumfang" des Nutzers ein. Im Gegenteil ... der Nutzer erhält zusätzliche Rechte.
    Aber das war nicht die Frage ...


    cu,
    -ds-

  • dreamshader: Hattest du heute ne Goldwaage zum Frühstück?


    Der TE hat klipp und Klar erfragt wie er Befehle wie 'reboot' oder 'halt' eingeschränkt dem www-data Benutzer erlauben kann. Dies sind Befehle die root-Rechte erfordern und somit können diese für normale Benutzer nur über 2 Wege verwendet werden: sudo oder su
    Möchte ein normaler Benutzer einer dieser root-Rechte erforderlichen Befehle ausführen, muss ihm dies also über sudoers erlaubt werden - und genau das sagen die bisherigen Beiträge hier aus. Nur weil du heute Begriffsstutzig zu sein scheinst und nicht mal die Überschrift mit dem Inhalt des ersten Beitrags zur gestellten Frage kombinieren kannst, musst nicht alles bisher gesagte falsch sein ...


    Davon abgesehen ist dein "Beweis" fehlerhaft. Der 'pi' Benutzer hat uneingeschränktes Recht über 'sudo'. Das einzige was du nun gemacht hast ist die Shell auf den 'www-data' zu wechseln. Aber Nachdem du das gemacht hast benutzt du kein sudo mehr? Was soll das beweisen? :-/
    Na dann gib JETZT mal irgendwas mit "sudo" davor ein - dann wirst auch Du hoffentlich merken das ich doch irgendwie recht hab :baeh2:

    Code
    pi@raspberrypi:~$ sudo -u www-data bash
    www-data@raspberrypi:/home/pi$ cd
    www-data@raspberrypi:~$ sudo ls
    [sudo] password for www-data:


    bitte danke und tschüss


  • ... Nur weil du heute Begriffsstutzig zu sein scheinst und nicht mal die Überschrift mit dem Inhalt des ersten Beitrags zur gestellten Frage kombinieren kannst ...
    ...


    Achte auf Deine Worte, meigrafd ... :fies:
    Im Gegensatz zu Dir antworte ich nicht refelxartig auf irgendwas mal irgendwie und bieg' mir das im Zweifelsfall so hin, dass es am Ende passt, sondern ich nehme eine Frage wörtlich - und ich hatte nicht umsonst nachgefragt, was die Frage war.


    Also halt' den Ball flach ...
    -ds-


  • Im Gegensatz zu Dir antworte ich nicht refelxartig auf irgendwas mal irgendwie und bieg' mir das im Zweifelsfall so hin, dass es am Ende passt, sondern ich nehme eine Frage wörtlich - und ich hatte nicht umsonst nachgefragt, was die Frage war.


    ..Die Frage steht in der Überschrift. Die Frage wurde aber auch noch mal im ersten Beitrag erläutert - nur steht da kein Fragezeichen ... Ist es deshalb keine FRAGE mehr? :s


    Du hast nun schon 3x "gefragt" was seine Frage wäre ... Dabei ist die doch schon von Anfang an klar!
    Wie nennt man etwas wenn jemand, der auch nach mehrmaliger Erläuterung etwas nicht versteht? Begriffsstutzig.
    Mehr Schein als Sein?


    Und dein angeblicher "Beweis" ist falsch. Du scheinst nicht verstanden zu haben was 'sudo' ist und wozu /etc/sudoers für 'sudo' bedeutet bzw das meine Zuvor gemachte Aussage, dass über /etc/sudoers " wird festgelegt welcher Befehl erlaubt wird ... " völlig korrekt ist. Auch wenn Du dies nicht zu begreifen scheinst, was schade ist. Einen Befehl über 'sudo' auszuführen erfordert Freigaben in dessen Konfiguration. Wenn dem nicht so wäre könnte ja jeder X-beliebige Nutzer einfach irgendwas über sudo ausführen - was außergewöhnlich unsicher wäre.

  • @dukennstmichnicht:

    Quote


    ... dort den Benutzer www-data nur die Befehle ... freigeben, damit es halt keine Sicherheitslücke gibt. Wie kann ich das nun umsetzten?


    Nein ... So etwas wie oben gefragt, würde man über eine chroot-Umgebung mit entsprechendem Environment realisieren (ähnlich wie bei ftp oder dem apache) ...


    Was Du willst ist scheinbar, dem Benutzer www-data die Befehle .... zusätzlich freizugeben ...


    Das ist nach meinem Verständnis ein himmelweiter Unterschied ...


    Aber das reicht jetzt auch wieder.


    cu,
    -ds-

  • Ok und wie würde ich die zusätzlich freigeben