Tom: Multi-Hosting Server mit PHP-Modul

Hello,

ich wende mich erstmal an alle, die auf ihren Servern auch Gäste beherbergen oder sogar selber echter Provider sind. Bei meinen Beratungsaufgaben für entnervte Kunde stoße ich immer wieder auf Provider, die ihren Kudnen aus eigener Unkenntnis das Leben schwer machen und trotzdem noch genügend Sicherheitslücken haben bei der Einrichtung von PHP-Accounts auf Shared Hosts.

Leider sind die meisten sogar Beratungsresistent.

Also wie richtet Ihr die Accounts für Eure "Kunden" ein?

Meine Frage nun an Alle:

Welche Rechte habt Ihr, die in eurer php-Info nachlesbar sind:

  • open_basedir
  • safe_mode
  • safe_mode_gid
  • session.save_path
  • disable_* Funktionen
  • safe_mode_exec_dir
  • safe_mode_include_dir
  • include_path
  • upload_tmp_dir
  • user_dir
    ... 2B/continued

Wem gehört Eurer Document-Root?
(hoffentlich Euch als User)
Gibt es ein für Euch erreichbares Verzeichnis außerhalb der Document Root?
Habt Ihr einen Konsolenzugang zum Server?
Welche Gruppe hat das Verzeichnis der Document Root?
Welchen Gruppen gehört Ihr an?
Welchen Gruppen gehört der PHP-Daemon an?
Darf die Gruppe des PHP-Daemon in Eurem Root-Dir schreiben?

Ich würde aus diesem Entwurf gerne einen aussagefähigen Fragebogen machen. Auf Eure Antworten und Anregungen freue ich mich daher.

Harzliche Grüße aus http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
  1. Hallo,

    was spricht gegen die CGI-Variante?

    dann braucht man die Krücke von Safe-Mode nicht ;-)

    mfg
    Twilo

    1. Hello,

      was spricht gegen die CGI-Variante?

      dann braucht man die Krücke von Safe-Mode nicht ;-)

      Die CGI-Variante ist eine Krücke, die viele sinnvolle Features nicht möglich macht.
      Wenn z.B. Apache und PHP-Leute sich endlich mal darüber ins benehmen setzen würden, unter welchem User PHP-Instanzen laufen dürfen, dann wäre das Problem mit dem Safe Mode auch geklärt.
      Die Einschränkung auf "wem gehört das Script" im Safe_Mode benötigt man übrigens aus PHP-Sicht überhaupt nicht. Allerdings sind alle mit dem Safe-Mode verbundenen Restriktionen wichtig. Leider berücksichtigt er nicht automatisch auch open_basedir und upload_tmp_dir ...

      Dann wäre der Safe-Mode wirkolich safe.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Hallo,

        Die CGI-Variante ist eine Krücke, die viele sinnvolle Features nicht möglich macht.

        das kann ich von der Modul Version genauso sagen...

        ich brauche oft "is_readable()", funktioniert mit der Modul Version NICHT zufriedenstellend :(
        und ein Systembefehl kann man auch nicht benutzen

        mfg
        Twilo

        1. Hello,

          das kann ich von der Modul Version genauso sagen...

          ich brauche oft "is_readable()", funktioniert mit der Modul Version NICHT zufriedenstellend :(
          und ein Systembefehl kann man auch nicht benutzen

          Könntest Du mir da noch einen Hinweis geben, was nicht funktioniert?
          Is_readable() berücksichtigt die Userrechte des PHP-Prozesses und den Safe_mode.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Hallo,

            das kann ich von der Modul Version genauso sagen...

            ich brauche oft "is_readable()", funktioniert mit der Modul Version NICHT zufriedenstellend :(
            und ein Systembefehl kann man auch nicht benutzen

            Könntest Du mir da noch einen Hinweis geben, was nicht funktioniert?
            Is_readable() berücksichtigt die Userrechte des PHP-Prozesses und den Safe_mode.

            dir wird per Include_Path eien Datei zur Verfügung gestellt, die Datei gehört natürlich nicht dir.
            dann Versuche mal herauszufinden mit diesen Befehl, ob du diese Datei lesebar ist

            Das selbe Problem wie bei is_writable

            Keep in mind that PHP may be accessing the file as the user id that the web server runs as (often 'nobody'). Safe mode limitations are not taken into account.

            tolle Wurst...

            mfg
            Twilo

            1. Hello,

              Keep in mind that PHP may be accessing the file as the user id that the web server runs as (often 'nobody'). Safe mode limitations are not taken into account.

              tolle Wurst...

              toll scheiße beschrieben.
              Aber safe_mode-Restrictions gelten schon für den Zugriff auf include-Dateien im include:path. Es gibt dafür eigens einen safe_mode_include_path und wenn der nicht gesetzt ist, wird nicht mehr automatisch gesucht.

              Ich werde mir das nochmal für dien Beschreibung des  Safe_mode merken. Da hab ich gerade das Test-Script nachgebessert. Es fehlt aber noch ein ganz großes Kapitel über sonsite Zugriffsbeschränkungen.

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              1. Hallo,

                Es gibt dafür eigens einen safe_mode_include_path und wenn der nicht gesetzt ist, wird nicht mehr automatisch gesucht.

                funktioniert trotzdem nicht :-/

                mfg
                Twilo

                1. Hello,

                  Es gibt dafür eigens einen safe_mode_include_path und wenn der nicht gesetzt ist, wird nicht mehr automatisch gesucht.

                  funktioniert trotzdem nicht :-/

                  Sorry. der heißt auch           safe_mode_include_dir

                  und der PHP-daemon (Modul-Version!) muss natürlich Zugriff darauf eingeräumt bekommen haben über das Filesystem.

                  Harzliche Grüße aus http://www.annerschbarrich.de

                  Tom

                  --
                  Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                  Nur selber lernen macht schlau
                  1. Hallo,

                    Es gibt dafür eigens einen safe_mode_include_path und wenn der nicht gesetzt ist, wird nicht mehr automatisch gesucht.

                    funktioniert trotzdem nicht :-/

                    Sorry. der heißt auch           safe_mode_include_dir

                    ich wußte schon was du meinst ;-)

                    und der PHP-daemon (Modul-Version!) muss natürlich Zugriff darauf eingeräumt bekommen haben über das Filesystem.

                    include('Datei'); funktioniert
                    ich kann nur nicht überprüfen, ob ich die Datei auch lesen kann, also mit den Befehl is_readable()

                    mfg
                    Twilo

                    1. Hello,

                      include('Datei'); funktioniert
                      ich kann nur nicht überprüfen, ob ich die Datei auch lesen kann, also mit den Befehl is_readable()

                      was sagt dann fopen('Datei','rb') ?

                      Da wäre jetzt noch interessant.
                      Alles, was ich mal über Unix und DOS Systemprogrammierung gelernt habe, sollte das öffnen einer nicht näher spezifizierten Datei (also nur über den Namen) mittels PAHT-Angabe möglich sein.

                      Allerdings wird PHP hier das Rad neu erfinden, und das, was in den Betriebssystemen üblicherweise schon vorhanden ist, nochmals emulieren.

                      Harzliche Grüße aus http://www.annerschbarrich.de

                      Tom

                      --
                      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                      Nur selber lernen macht schlau
      2. Hallo,

        Die CGI-Variante ist eine Krücke, die viele sinnvolle Features nicht möglich macht.

        dann zähl mal die ganzen Features auf...
        mir fällt jetzt nur der http Login ein

        mfg
        Twilo

        1. Hello,

          Die CGI-Variante ist eine Krücke, die viele sinnvolle Features nicht möglich macht.

          dann zähl mal die ganzen Features auf...
          mir fällt jetzt nur der http Login ein

          Gut. Das werde ich dann ebenfalls mal in Angriff nehmen.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Hallo,

            Hello,

            dann zähl mal die ganzen Features auf...
            mir fällt jetzt nur der http Login ein

            Gut. Das werde ich dann ebenfalls mal in Angriff nehmen.

            ich fang dann mal an ;)

            Chapter 34. HTTP authentication with PHP

            mfg
            Twilo

  2. Hello,

    interessante Frage für alle PHP-Nutzer ist

    <?php   ### schreibtest.php ###

    if (!is_writable('.'))
      {
        echo "Zielverzeichnis ist <b>nicht</b> beschreibbar<br>";
      }
      else
      {
        echo "Zielverzeichnis ist beschreibbar<br>";
      }

    ?>

    Dieses kleine Script, hochgeladen z.B. mit ftp in die Document Root, kann für viele PHP-Nutzer die notwendige Aussage treffen, ob sie mit ihrem Webspace und PHP (als Modul) glücklich werden können.

    Ich werde da mal weitere kleine Scripts, die für sich genommen möglichst alle unschädlich sind, zusammenstellen.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Hallo Tom,

      da kommt bei mir leider folgendes:

      Zielverzeichnis ist nicht beschreibbar

      Gruß Nizzan

      1. Hello Nizzan,

        da kommt bei mir leider folgendes:

        Zielverzeichnis ist nicht beschreibbar

        Danke.
        Hast Du Webspache mit "PHP-Unterstützung" gemietet?
        Unter PHP-Unterstützung versteht man, dass das dafür zuständige Programm alle dem Stand der Technik entsprechenden Operationen im dem User zugewiesenen "Webspace" vornehmen darf. Dazu gehören insbesondere das Anlegen, Verändern und Löschen von Dateien und Verzeichnissen bis zur gemieteten Gesamtnutzungsgröße...

        So (oder zumindest so ähnlich) hat die "Beraterkommission EDV-Anwendungen" für die deutschen IHKn gerade formuliert und wird diesen Entwurf nun auf diesem Wege allen Sachverständigen nahelegen.

        Es gibt nämlich mit vielen Providern Stress und die haben sich bisher immer hinter der unfreiwilligen Unkenntnis der geplagten Richter verstecken können.

        Harzliche Grüße aus http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        1. Hallo Tom,

          Hast Du Webspache mit "PHP-Unterstützung" gemietet?
          Unter PHP-Unterstützung versteht man, dass das dafür zuständige

          Uff das ist eine gute Frage. Ich habe PHP also meine Skripte sind alle in PHP geschrieben und die laufen. Ich verstehe gerade nicht so ganz was du damit meintest.

          Also ich kann wenn ich mit FTP auf den Server zugreife, Daten löschen und auch Ordner erstellen. Mehr kann ich aber dann auch nicht machen.

          Meintest du das ?

          Gruß Nizzan

          1. Hello,

            Also ich kann wenn ich mit FTP auf den Server zugreife, Daten löschen und auch Ordner erstellen. Mehr kann ich aber dann auch nicht machen.

            Nein. Wenn Du für Deinen Webnspace "PHP-Unterstützung" bezahlst, muss dieses kleine Scriptechen in der _Document_Root_ des Webspace die Meldung ausgeben "Zielverzeichnis ist beschreibbar". Ausnahme könnte sein, dass der Provider Dir die PHP-Unterstützung nur in einem bestimmten Unterverzeichnis gewährt.

            PHP ist eigentlich eine geniale API für alle Webspaces. Durch falsche Einrichtung führt es aber dazu, dass die User dann zu "chmod(777)" greifen. Das führt dann zu Sicherheitslücken, die nicht notwendig wären, wenn die Provider ihre Materie (und nicht nur ihr Geschäft) verstehen würden.

            Wenn Du also schreibst: "php läuft bei mir" und das Script failed im Document Root, dann passt da was nicht. Du zahlst dann den vollen Preis für einen Bruchteil der Leistung.

            Harzliche Grüße aus http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            1. Hallo Tom,

              ja und was kann ich nun dagen machen? Kann ich dem Provider das sagen? Oder hmm wenn das vor Gericht gehen wurde, wer bekommt dann in diesem Fall recht?

              Gruß Nizzan

    2. Hallo,

      interessante Frage für alle PHP-Nutzer ist

      <?php   ### schreibtest.php ###

      if (!is_writable('.'))
        {
          echo "Zielverzeichnis ist <b>nicht</b> beschreibbar<br>";
        }
        else
        {
          echo "Zielverzeichnis ist beschreibbar<br>";
        }

      ?>

      funktioniert bei mir ohne Probleme
      die CGI-Variante läuft auch bei mir :-)

      mfg
      Twilo

  3. Hello,

    Hallo Tom,

    Meine Frage nun an Alle:

    Welche Rechte habt Ihr, die in eurer php-Info nachlesbar sind:

    • open_basedir
    • safe_mode

    On

    • safe_mode_gid

    On

    • session.save_path

    /var/lib/php4

    • disable_* Funktionen

    disable-posix, disable-debug

    • safe_mode_exec_dir

    /home/empty/

    • safe_mode_include_dir

    no value

    Wem gehört Eurer Document-Root?
    (hoffentlich Euch als User)

    Jep

    Gibt es ein für Euch erreichbares Verzeichnis außerhalb der Document Root?

    Ja

    Habt Ihr einen Konsolenzugang zum Server?

    Nein, bisher noch nicht, habe aber auch noch nicht explizit danach gefragt (Muß ich noch...!)

    Darf die Gruppe des PHP-Daemon in Eurem Root-Dir schreiben?

    Nein! (Sagt auch Dein nettes Script...)

    Da das Generve abzusehen war, habe ich mich aber noch nicht ernsthaft mit diesem (recht neuen) Account auseinandergesetzt...

    P.S.: Mein Provider ist Dein Provider...

    Gruß aus Essen

    Maik

    1. Hello,

      Darf die Gruppe des PHP-Daemon in Eurem Root-Dir schreiben?
      Nein! (Sagt auch Dein nettes Script...)

      Das sollte sich aber ändern lassen.
      Ist immer eine Frage von Request und response ;-))

      Ggf. wird das auch generell mal geändert.
      Für die Safe Mode Beschreibung ist es aber durchaus wichtige, damit man weiß, in welcher Ebene man mit php-eigenen Verzeichnissen und Dateien anfangen kann.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau