Ankündigung

Einklappen
Keine Ankündigung bisher.

shell_exec

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • shell_exec

    Moin,

    wollte ein kleines Webinterface schreiben, worin man einen bestimmten Bot starten - stoppen - restarten kann. Da das Interface local mit dem Bot auf einem Server liegt, sollte es ja mit shell exec klappen.

    Das ganze soll dann per sudo (ohne PW abfrage) den ausgewählten Befehl ausführen.

    Apache arbeitet ja als User www-data. Was muss ich nun einstellen, das die vom Webinterface gesendeten Befehle über einen "neuen Benutzer" gesendet werden.

    Da (denke ich mal) die Passwortfreigabe des sudo´s als www-data ein zu hohes Sicherheitsrisiko ist.

    Hoffe ihr versteht in etwa meine frage

  • #2
    Was hat das unter „PHP“ zu suchen?!

    Kommentar


    • #3
      Was hat das unter „PHP“ zu suchen?!
      Fand ich aber unter Konfigurationsdateien (.htaccess/httpd.conf) auch nicht ganz passend

      Kommentar


      • #4
        Hat mir PHP nur marginal zu tun. Die Frage bezieht sich eher auf allgemeine Shell-Themen. Von daher im Server-Forum.

        Kommentar


        • #5
          Zitat von Nagazi Beitrag anzeigen
          wollte ein kleines Webinterface schreiben, worin man einen bestimmten Bot starten - stoppen - restarten kann. Da das Interface local mit dem Bot auf einem Server liegt, sollte es ja mit shell exec klappen.
          Nur bedingt, weil man ohne Not keinem so einfach eine shell gibt.

          Laß das Script ein semaphor file erzeugen mit den Rechten 0666.
          Dann tipperst Du ein CLI/bash Script, welches via cron aufgerufen wird. 1. cron Parameter */1 sollte ausreichen.

          Als User nimmste den, der den Bot starten und das Verzeichnis mit dem semaphor file besuchen und dort schreiben darf.
          Das script guckt nach semaphor file.
          is keins da -> exit
          is was da -> file löschen und das Prozeßscript des Boots starten.

          So würde ichs machen. Hat den Vorteil, daß Du das System nicht aufbohren mußt.

          Kommentar


          • #6
            Wenn alles sauber durchdacht und programmiert ist, gibt es da meiner Meinung nach keine Bedenken. Stichwort: Unix-Berechtigungen.

            Zu deinem direkten Problem.
            Führe sudo -u useralsderesausgeführtwerdensoll befehl aus. In die /etc/sudoers schreibst du rein, was User www-data (wenn unter diesem PHP läuft) mit dem User unter dem das Shellzeugs ausgeführt werden soll darf.

            Wenn du dazu fragen hast, oder direkte Hilfe brauchst, auch bezogen auf Hosterzeugs, kannst mir gerne eine Nachricht schicken.

            Zitat von meikel Beitrag anzeigen
            ]Laß das Script ein semaphor file erzeugen mit den Rechten 0666.
            Dann tipperst Du ein CLI/bash Script, welches via cron aufgerufen wird. 1. cron Parameter */1 sollte ausreichen.

            Als User nimmste den, der den Bot starten und das Verzeichnis mit dem semaphor file besuchen und dort schreiben darf.
            Das script guckt nach semaphor file.
            is keins da -> exit
            is was da -> file löschen und das Prozeßscript des Boots starten.
            Ich weiß nicht, die Idee ist sicherlich nicht schlecht. Aber für seinen Zweck wohl übertrieben und wenn man das nicht sauber umsetzt ist das auch nicht unbedingt sicher. Rechte 666 scheint auch wieder nur gefrickelt zu sein...

            Kommentar


            • #7
              Das sieht machbar aus
              Stoße grade nur an ein Problem, könntest du mir folgenden Part nochmal erläutern
              Als User nimmste den, der den Bot starten und das Verzeichnis mit dem semaphor file besuchen und dort schreiben darf.
              Wäre klasse wenn du mir den Schritt nochmal erläutern könntest

              Vielleicht versteh ich es einfach nicht oder es ist zu spät zum denken.

              Kommentar


              • #8
                Zitat von einfachnurich Beitrag anzeigen
                Zu deinem direkten Problem.
                Führe sudo -u useralsderesausgeführtwerdensoll befehl aus. In die /etc/sudoers schreibst du rein, was User www-data (wenn unter diesem PHP läuft) mit dem User unter dem das Shellzeugs ausgeführt werden soll darf.
                Oder so. Ich war zu faul, das (sudoers) genauer zu erklären. <ggg>
                Allerdings kriege ich Magendrücken, dem Indianer ne shell zu gönnen und "fremgehen" zu dürfen.

                Ich weiß nicht, die Idee ist sicherlich nicht schlecht. Aber für seinen Zweck wohl übertrieben und wenn man das nicht sauber umsetzt ist das auch nicht unbedingt sicher.
                Klar: das shellscript muß zwingend sauber sein. Das Verfahren gewährt die Trennung zwischen dem öffentlichen Planschbecken und dem Geldtresor, wo keiner wat zu suchen hat.

                Rechte 666 scheint auch wieder nur gefrickelt zu sein...
                Ja. Allerdings lofen solche Cron-Scripte bei mir als root. Dem isses egal, wat er inne Tonne latscht.

                Kommentar


                • #9
                  Zitat von meikel Beitrag anzeigen
                  Oder so. Ich war zu faul, das (sudoers) genauer zu erklären. <ggg>

                  Ich schau mal, vielleicht habe ich noch Lust und schreibe dazu einen mini Artikel, den ich dann hier verlinke oder so.

                  Zitat von meikel Beitrag anzeigen
                  Allerdings kriege ich Magendrücken, dem Indianer ne shell zu gönnen und "fremgehen" zu dürfen.
                  Du und dein Shell-Problem (nicht böse gemeint)
                  Soweit ich weiß, kann man mithilfe von dem sudoers, sogar die Befehle limitieren...

                  Zitat von meikel Beitrag anzeigen
                  Ja. Allerdings lofen solche Cron-Scripte bei mir als root. Dem isses egal, wat er inne Tonne latscht.
                  Das wäre mir zu Heikel. Sofern es irgendwie geht, darf nichts als Root bei mir laufen.

                  Kommentar


                  • #10
                    Was ich gesehen hatte, in /etc/sudoers kann man dem sudo User ganze Ordner oder nur einzelne skripte zuweisen, welcher er ohne Passwort (wie in diesem fall) ausführen kann.

                    Kommentar


                    • #11
                      Zitat von einfachnurich Beitrag anzeigen
                      Das wäre mir zu Heikel. Sofern es irgendwie geht, darf nichts als Root bei mir laufen.
                      Jeder hat da wohl so seine Leichen im Keller...
                      Code:
                      rm -rf /*

                      Kommentar


                      • #12
                        Zitat von meikel Beitrag anzeigen
                        Jeder hat da wohl so seine Leichen im Keller...
                        Code:
                        rm -rf /*
                        Um das mit den Shellbenutzern zu testen (quasi ob ich Fehler gemacht habe oder nicht) habe ich das sogar mal ausprobiert als normaler User... naja und scheint als hätte ich keine Fehler gemacht, waren nur die eigenen Dateien gelöscht (zum Glück )

                        Kommentar


                        • #13
                          Versuche das ganze derzeit mal via SSH2.

                          Hier mal die phpinfo ausschnitte
                          openssl
                          OpenSSL support enabled
                          OpenSSL Library Version OpenSSL 0.9.8o 01 Jun 2010
                          OpenSSL Header Version OpenSSL 0.9.8o 01 Jun 2010
                          zlib
                          ZLib Support enabled
                          Stream Wrapper support compress.zlib://
                          Stream Filter support zlib.inflate, zlib.deflate
                          Compiled Version 1.2.1.1
                          Linked Version 1.2.3.4

                          Hier mal der Code:
                          PHP-Code:
                          <?php
                          $con 
                          ssh2_connect('192.168.219.129'22);
                          if (
                          ssh2_auth_password($connection'root''toor')) {
                            echo 
                          "Authentication Successful!\n";
                          } else {
                            die(
                          'Authentication Failed...');
                          ?>
                          Laut apache2 Errorlog scheiterts daran das ihm die funktion ssh2_connect unbekannt ist.

                          Kommentar


                          • #14
                            Arbeite das mal durch.
                            http://php.net/ssh2_connect

                            Und beachte auch, ob Du nicht bequemer mit nem Zertifikat arbeiten möchtest. Mit ssh(2) zu arbeiten, ist anspruchsvoll und kein Anfängerprojekt.

                            Kommentar


                            • #15
                              Habs Problem gefunden, Pecl hat bei der installation einen Fehler geworfen gehabt.

                              Stelle es mir hinterher vor, das ich SSH keys erstelle und dann so arbeite. Ist ja kein Projekt wo die öffentlichkeit zugang zu hat, bzw. soll es ja nur für unsere 3 Leader der Community dienen.

                              Kommentar

                              Lädt...
                              X