Ankündigung

Einklappen
Keine Ankündigung bisher.

[GELÖST] Apache PHP und sudo

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

  • [GELÖST] Apache PHP und sudo

    Hallo Leute,

    ich bin neu auf dem Gebiet von PHP und mache gerade meine ersten Geh-Übungen. Leider klappt es bei dem Vorhaben, einen Linux-Befehl mit EXEC abzusetzen, nicht mehr so gut. Jetzt stehe ich so ziemlich auf dem Schlauch und weiss weder vor- noch zurück.

    Das Problem:

    Normale Linux-Befehle, welche keine Root-Rechte benötigen, funktionieren einwandfrei. Sobald jedoch Root-Rechte benötigt werden, klappt's nicht mehr! Ich habe mir dann auf meinem System SUDO installiert und dem Apache-Server das Recht gegeben, genau diesen einen Linux-Befehl mit der Option NOPASSWD: ausführen zu dürfen. Leider hat auch das nichts gebracht, die Fehlermeldung ist immer die gleiche und mein Freund Google scheint auch keine passenden Antworten mehr für mich zu haben.

    Die Fehlermeldung lautet:

    Code:
    sudo: Effektive UID ist nicht 0. Liegt /usr/bin/sudo auf einem Dateisystem mit gesetzter »nosuid«-Option oder auf einem NFS-Dateisystem ohne Root-Rechte?

    Ich habe testeshalber dem User Apache eine Bash-Shell in der passwd Datei zugewiesen, sodass ich mit
    Code:
    su apache
    eine Shell als Apache-User bekommen habe. Dort konnte ich dann seltsamerweise erfolgreich SUDO mit dem gewünschten Linux-Befehl ausführen. In meinem Fall war das:
    Code:
    sudo route add -host 192.168.x.y reject
    Sobald ich aber denselbigen Befehl in einer PHP-Datei vom Web-Server ausführen liess, funktionierte es nicht mehr und ich bekam obige Fehlermeldung.

    Muss ich irgendwo noch bestimmte Rechte für den Apache-Server vergeben? Ich weiss wirklich nicht mehr, wo ich noch suchen muss! Aus anderen Berichten und Threads habe ich gelesen, dass es sehr wohl mit SUDO funktioniert. Aber wie????

    Mein System:

    Gentoo-Linux x64
    Apache 2.4
    PHP 7.2

    Kann mich vielleicht jemand aus meiner misslichen Lage befreien? Ich bin für jeden Tipp und Hinweis sehr dankbar. Auch weitere Informationen liefere ich sehr gerne nach, wenn sie angefordert werden.

    Vielen Dank schon mal im Voraus.

    Grüsse
    Roland


  • #2
    MOD: Verschoben von PHP-Einsteiger
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      gentoo, gut.

      https://debianforum.de/forum/viewtopic.php?t=165472

      da steht das ein oder andere drin....

      apache sudo zu erlauben finde ich gernzwertig, aber gut-

      Kommentar


      • #4
        Vielen Dank für den Hinweis.

        Das mit dem NOSUID hatte ich auch schon im Internet gefunden und bereits kontrolliert. Es stimmte bei mir, so wie es sein sollte.

        Code:
        ls -l /usr/bin/sudo
        -rwsr-xr-x 1 root root 134048  8. Nov 08:54 /usr/bin/sudo
        Kann mir den jemand überhaupt bestätigen, das sein Apache-Server ein Befehl mit SUDO absetzen kann? Ich habe es bei mir an einem zweiten Gentoo-Server getestet und es erscheint dort exakt derselbe Fehler

        Gibt es denn überhaupt eine bessere alternative um Befehle über einen Web-Server abzusetzen, die Root-Rechte benötigen?

        Hat vielleicht noch jemand eine Idee und kann mich wenigstens in die richtige Richtung dirigieren? Wie kann man sonst noch über eine Web-Site Linux-Befehle absetzen, die Root-Rechte benötigen?

        Danke!

        Grüsse
        Roland


        Kommentar


        • #5
          Ja, Apache kann das - beschäftige Dich mit der Datei /etc/sudoers

          Kommentar


          • #6
            Du könntest setuid für die Befehle verwenden, die du als root ausführen willst.

            Grüße.

            Kommentar


            • #7
              Danke für eure Hinweise.

              @Kaminbausatz: Mit sudoers habe ich mich schon auseinandergesetzt. Das ist auch nicht das eigentliche Problem, denn sudo funktioniert bei mir grundsätzlich mit allen Benutzerkonten, nur nicht mit dem Benutzer apache.

              @php1704: setuid habe ich auch schon ausprobiert. Hat aber auch nicht weitergeholfen. Wenn ich das richtig verstanden habe, muss ich setuid nur auf die Datei /usr/bin/sudo anwenden:

              Code:
              chmod u+s /usr/bin/sudo
              Mir scheint, das ich ein Problem mit dem Apache-Server im Zusammenhang mit Gentoo habe. Leider stehe ich irgendwie auf dem Schlauch und weiss nicht, wo ich was drehen muss

              Gibt's vielleicht jemand der Gentoo nutzt und bei dem es funktioniert? Das würde mich mal brennend interessieren. Ich habe mir zu testzwecken ein Ubuntu aufgesetzt und siehe da, es hat auf anhieb funktioniert. Aber eben, es war Ubuntu und ich möchte gerne mit Gentoo arbeiten.

              Gibt's eventuell noch jemand, der einen Tipp hat?

              Grüsse
              Roland

              Kommentar


              • #8
                Wie hast du den apache compiliert ?

                Kommentar


                • #9
                  Wenn ich das richtig verstanden habe, muss ich setuid nur auf die Datei /usr/bin/sudo anwenden:
                  Nein, nicht ganz. setuid auf "route" (wie aus dem Bespiel) oder eben auf was sonst noch so aufgerufen wird.
                  Dabei sicherstellen, dass die aufgerufenen Dateien auch root gehören und das sie Binaries sind. Mit Script-Dateien geht das nicht.

                  Dann sollte man die Befehle vom Webserver aus ganz ohne sudo aufrufen können.

                  Grüße.

                  Kommentar


                  • #10
                    Zitat von php1704 Beitrag anzeigen
                    Nein, nicht ganz. setuid auf "route" (wie aus dem Bespiel) oder eben auf was sonst noch so aufgerufen wird.
                    Dabei sicherstellen, dass die aufgerufenen Dateien auch root gehören und das sie Binaries sind. Mit Script-Dateien geht das nicht.

                    Dann sollte man die Befehle vom Webserver aus ganz ohne sudo aufrufen können.

                    Grüße.
                    wohw, einfach so setuid verteilen. Ich halte den Ratschlag für weniger seriös.

                    nebenbei zu setuid und scripten:
                    https://unix.stackexchange.com/quest...-shell-scripts

                    Kommentar


                    • #11
                      Alle User im System können "route" als root ausführen vs apache-User kann alle Befehle als root ausführen.

                      Ist beides keine wirklich gute Idee.

                      Grüße.

                      Kommentar


                      • #12
                        Zitat von php1704 Beitrag anzeigen
                        Alle User im System können "route" als root ausführen vs apache-User kann alle Befehle als root ausführen.

                        Ist beides keine wirklich gute Idee.

                        Grüße.
                        Stimmt,
                        deswegen kann man ja
                        - die nutzbaren sudo befehle eingrenzen
                        - eine andere lösung suchen


                        Kommentar


                        • #13
                          Vielen Dank an alle, die versucht haben, mir zu helfen. Ich weiss, es ist keine gute Idee, wenn man seinem Web-Server die Möglichkeit geben will, Befehle als root auszuführen. Aber ich habe keine andere Idee, wie ich es sonst anstellen soll, sodass es trotzdem "sicher" ist.

                          Es wäre daher schön, wenn sich einmal jemand dazu bereit erklären würde, wie man diese Problematik korrekter Weise löst, anstatt immer nur die gleichen Warnungen auszusprechen.

                          Wie z.B. haben es dann die Entwickler von IPCop, Endian FW, pfSense etc. hinbekommen, dass sie über das Web-GUI den kompletten Linux-Rechner mit offensichtlichen Root-Rechten steuern können????

                          Glücklicherweise habe ich im englischen Gentoo-Forum Hilfe gefunden, die mich bezüglich meines Problems in die richtige Richtung stossen konnte. Ich möchte daher die Lösung mit einem Link zu diesem Thread posten, so dass eventuell andere Users mit gleichem Problem auch davon profitieren können.

                          https://forums.gentoo.org/viewtopic-t-1089193.html

                          Ich danke allen nochmals herzlich!

                          Grüsse
                          Roland

                          Kommentar


                          • #14
                            Zitat von ROGA Beitrag anzeigen

                            Es wäre daher schön, wenn sich einmal jemand dazu bereit erklären würde, wie man diese Problematik korrekter Weise löst, anstatt immer nur die gleichen Warnungen auszusprechen.


                            Grüsse
                            Roland
                            Es wäre auch nett Fragen zu beantworten wie in #8 bspw.

                            Kommentar


                            • #15
                              Sorry, diese Frage ist mir in der Eile völlig untergegangen. Du hast natürlich recht, mein Fehler!

                              Kompiliert habe ich meinen Apache mit emerge wie folgt:

                              Code:
                              [ebuild   R    ] www-servers/apache-2.4.34-r2:2::gentoo  USE="gdbm ssl suexec suexec-caps threads -debug -doc -ldap -libressl (-selinux) -static -suexec-syslog" APACHE2_MODULES="actions alias auth_basic authn_alias authn_anon authn_core authn_dbm authn_file authz_core authz_dbm authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir env expires ext_filter file_cache filter headers include info log_config logio mime mime_magic negotiation proxy proxy_connect proxy_fcgi proxy_ftp proxy_html proxy_http remoteip rewrite setenvif socache_shmcb speling status unique_id unixd userdir usertrack vhost_alias xml2enc -access_compat -asis -auth_digest -authn_dbd -authz_dbd -brotli -cache_disk -cache_socache -cern_meta -charset_lite -dbd -dumpio -http2 -ident -imagemap -lbmethod_bybusyness -lbmethod_byrequests -lbmethod_bytraffic -lbmethod_heartbeat -log_forensic -macro -md -proxy_ajp -proxy_balancer -proxy_scgi -proxy_wstunnel -ratelimit -reqtimeout -slotmem_shm -substitute -version -watchdog" APACHE2_MPMS="event -prefork -worker" 0 KiB

                              Ich habe auch zwischenzeitlich einen vernünftigen Lösungsansatz für diese Problematik aus dem englischen Gentoo-Forum erhalten. Leider stehe ich dabei wieder auf dem Schlauch

                              Man sollte sich einen Daemon bauen, der auf ein named Pipe hört und mit den nötigen rechten läuft. Das PHP-Skript sollte dann lediglich in dieses named Pipe schreiben was zu tun ist. z.B. sowas hier:

                              Code:
                              perl -TE 'while (<>) { system("route add -host $1 reject") if /^(\d+\.\d+\.\d+\.\d+)$/ }' < ips.fifo
                              Nur wie erstelle ich so einen Daemon? Kann das auch mit PHP gemacht werden? Wenn ja, wo muss ich die named Pipe erstellen, beim Daemon oder beim Web-Server?

                              Gibt es hier im Forum gute Beispiele, wie mit mit posix_mkfifo solche Pipes erstellt und auch wieder löscht?

                              Hat jemand noch einen Tipp für mich? Vielen Dank!

                              Grüsse
                              Roland

                              Kommentar

                              Lädt...
                              X