phpler: Verzeichnis nur für Server Schreib- und lesbar

Ich weiß jetzt nicht genau, ob das der richtige Themenbereich ist aber ich stelle mal meine Frage:

Wie kann ich es machen, dass bei einem Verzeichnis immer wenn es aufgerufen wird ein 403 - Forbidden Fehler kommt und wenn ein lokaler Nutzer darauf zugreifen möchte dieser auch keinen Zugriff erhält? Nur der Nutzer der Apache (oder einen anderen Server) ausführt soll darauf Zugriff haben. Dieser muss schreiben, lesen, ändern und löschen können.
In diesem Verzeichnis möchte ich Daten speichern die nach einem Login in ein System von PHP ausgelesen und angezeigt werden. Htaccess halte ich für nicht gut, da somit lokal angemeldete Nutzer noch Zugriff auf das Verzeichnis haben.
Ich habe schon an Verzeichnisrechte gedacht nur können dann Inhalte aus dem Verzeichnis vom Server nicht gelöscht oder gespeichert werden oder sie sind gleich für jeden Sichtbar. Event. habe ich aber nicht die richtigen Rechte genutzt. Eig. müsste ja 0700 richtig sein??

  1. Bin mir nicht ganz sicher, aber ich glaube das du den Besitzer (chown) und nicht nur chmod einstellen müsstest.
    Aber - warum legts du diese Dateien nicht einfach ausserhalb des Document Root ab. Da sind diese eben dann nur von PHP erreichbar.

    Gruß Rainer

    1. Bin mir nicht ganz sicher, aber ich glaube das du den Besitzer (chown) und nicht nur chmod einstellen müsstest.

      OK. Das werde ich mal testen. Aber ist der Besitzer bei jedem Webserver (auch bei anderen als Apache) gleich? Und wie lese ich dessen Name / UID aus?

      Aber - warum legts du diese Dateien nicht einfach ausserhalb des Document Root ab. Da sind diese eben dann nur von PHP erreichbar.

      Wo wäre so ein Verzeichnis? Und wieder die gleiche Frage: Geht das auch unter anderen Servern?

      1. Tach!

        Aber ist der Besitzer bei jedem Webserver (auch bei anderen als Apache) gleich? Und wie lese ich dessen Name / UID aus?

        Nein, so pauschal kann man die Sache nicht sehen. Das ist so konfiguriert, wie es der Administrator für sinnvoll hält.
        Der Besitzer kann ein FTP-User sein, dann kann der Apache nur über other- oder group-Rechte zugreifen.
        Der VHost kann (mit suEXEC) unter einem eigenen User laufen, dann braucht der Apache nur Leserechte für allgemeine, durch ihn direkt ausgelieferte Dokumente.

        Aber - warum legts du diese Dateien nicht einfach ausserhalb des Document Root ab. Da sind diese eben dann nur von PHP erreichbar.
        Wo wäre so ein Verzeichnis? Und wieder die gleiche Frage: Geht das auch unter anderen Servern?

        Das kommt ganz auf die Konfiguration des Servers an. So manch ein Billighoster stellt dir genau ein DocumentRoot und nichts weiter zur Verfügung. Das ist die kleinste angenommene Basis und daran richten sich üblicherweise auch viele bekannte Projekte. Sie legen lieber der Einfachheit halber eine .htaccess in die nicht für die Öffentlichkeit bestimmten Verzeichnisse, anstatt eine Ablage außerhalb des DocumentRoots zu berücksichtigen.

        Wie auch immer, deine Fragen können nicht allgemeingültig beantwortet werden.

        dedlfix.

      2. Hallo!

        Mir scheint, dir sind einige der Begrifflichkeiten, die hier verwendet werden, nicht ganz klar.

        Was meinst du denn mit "lokaler Nutzer"?
        Lokal ist dabei auf was bezogen?

        Bin mir nicht ganz sicher, aber ich glaube das du den Besitzer (chown) und nicht nur chmod einstellen müsstest.

        OK. Das werde ich mal testen. Aber ist der Besitzer bei jedem Webserver (auch bei anderen als Apache) gleich? Und wie lese ich dessen Name / UID aus?

        Bei den Verzeichnis-/ Dateiberechtigungen auf einem Server reden wir von

        • Eigentümer
        • Gruppe
        • Andere

        Der Eigentümer und die Gruppe können nur auf dem jeweiligen System vorhandene Benutzer, bzw. (Benutzer)Gruppen sein.
        Welche Benutzer zu welcher Gruppe gehören ist dabei von der jeweiligen Konfiguration des jeweiligen Systems abhängig.

        Aber ich vermute mal stark, dass dich das eigentlich gar nicht zu interessieren braucht, denn soweit ich dich richtig verstanden habe, möchtest du "lediglich" Daten irgendwo ablegen, wo der Webserver keinen Zugriff hat.

        Dazu reicht es, wenn du ...

        Aber - warum legts du diese Dateien nicht einfach ausserhalb des Document Root ab. Da sind diese eben dann nur von PHP erreichbar.

        ... die Daten eben außerhalb des Document Roots ablegst. Natürlich muss PHP der Zugriff "erlaubt" sein (Stichwort: Open Basedir Restriction).

        Wo wäre so ein Verzeichnis?

        Theoretisch überall außerhalb des Document Root Verzeichnisbaums.

        Und wieder die gleiche Frage: Geht das auch unter anderen Servern?

        Theoretisch ja. Aber wir reden hier von Dingen, die von der Konfiguration des jeweiligen Systems und dem Webserver abhängig sind.

        Ein "Standardverzeichnis", welches normalerweise auf jedem System mit PHP definiert ist und üblicherweise außerhalb des Document Roots liegt, ist das TMP Verzeichnis von PHP (siehe: http://www.php.net/manual/de/function.sys-get-temp-dir.php).
        Da du aber scheinbar ja Daten einer "PHP Session" speichern willst, findest du deren Speicherort mittels session_save_path.

        Weitere Infos zu den angesprochenen Dingen liefert dir Google tonnenweise ...! ;-)

        Gruß Gunther

      3. Also ich möchte folgendes machen:
        Es soll ein System werden, wo ein Nutzer Bilder hochläd. Diese kann er auch wieder löschen. Die Anderen Nutzer sollen diese Bilder nach einem Login sehen können, wenn sie ihnen zugewiesen sind. Diese Zuweisung erstellt der Nutzer, der die Bilder hochläd. Das ganze wird, bis auf die Medien, in einer Datenbank gespeichert.
        Ich hatte mir gedacht, die Bilder alle in ein Verzeichnis zu laden. Wenn z.B. das Bild test.jpg darin liegt und man ruft es über example.org/data/test.jpg auf soll der Zugriff geblockt werden.
        Das ganze muss jedoch auf allen Webservern laufen, da ich es als Open Source veröffentlichen möchte.

        Nachdem ich erneut überlegt habe kamen .htaccess Dateien für mich erst einmal wieder in Frage. Andererseits jedoch nicht, da sie auf Windows Servern ja nicht funktionieren.

        1. Tach!

          Nachdem ich erneut überlegt habe kamen .htaccess Dateien für mich erst einmal wieder in Frage. Andererseits jedoch nicht, da sie auf Windows Servern ja nicht funktionieren.

          .htaccess ist Apache-spezifisch. Wenn ein Apache unter Windows läuft, ist die .htaccess ebenso verwendbar. Allerdings kann es auf jedem System sein, dass der Apache so konfiguriert ist, dass er die .htaccess komplett ignoriert. Du wirst keine Lösung hinbekommen, die auf jedem erdenklichen System gleichartig läuft.

          dedlfix.

        2. Hallo!

          Also ich möchte folgendes machen:
          Es soll ein System werden, wo ein Nutzer Bilder hochläd. Diese kann er auch wieder löschen. Die Anderen Nutzer sollen diese Bilder nach einem Login sehen können, wenn sie ihnen zugewiesen sind. Diese Zuweisung erstellt der Nutzer, der die Bilder hochläd.

          Aha, wenn es also bspw. 1.000 registrierte Benutzer gibt, dann muss ich *jedes* Bild für 999 User freischalten, wenn ich nicht will, dass es ein bestimmter User sehen darf?

          Das ganze wird, bis auf die Medien, in einer Datenbank gespeichert.

          Welcher DB Typ denn?

          Ich hatte mir gedacht, die Bilder alle in ein Verzeichnis zu laden. Wenn z.B. das Bild test.jpg darin liegt und man ruft es über example.org/data/test.jpg auf soll der Zugriff geblockt werden.

          Per .htaccess kein Problem ...
          Und ansonsten brauchst du eine klassische "Rechteverwaltung" (per PHP) für dein Vorhaben.

          Das ganze muss jedoch auf allen Webservern laufen, da ich es als Open Source veröffentlichen möchte.

          Aha - ich staune immer wieder, dass die Leute sich gleich "so kleine Ziele" setzen, bevor sie sich (augenscheinlich) mit der Materie überhaupt entsprechend vertraut gemacht haben ...! ;-)

          Nachdem ich erneut überlegt habe kamen .htaccess Dateien für mich erst einmal wieder in Frage. Andererseits jedoch nicht, da sie auf Windows Servern ja nicht funktionieren.

          Siehe: http://support.microsoft.com/kb/815179

          Gruß Gunther

          1. Siehe: http://support.microsoft.com/kb/815179

            Wie lege ich denn dann zwischen dem

            <?xml version="1.0" encoding="utf-8" ?>  
            <configuration>  
              <system.web>
            

            und dem

              </system.web>  
            </configuration>
            

            fest, dass der Zugriff verweigert wird?
            Diese Datei kommt in das gleiche Verzeichnis wie eine htaccess, oder?

            Mit der Lösung diese Datei und eine .htaccess zu verwenden könnte es etwas werden. Denn dann sind ja (fast) alle Server abgedeckt...

          2. Ich habe etwas gefunden. Würde es so funktionieren?

              
            <?xml version="1.0" encoding="utf-8" ?>  
            <configuration>  
              <system.web>  
              </system.web>  
            </configuration>  
            <authorization>  
                <deny users="*" />  
            </authorization>  
            
            

            Oder muss es so sein:

              
            <?xml version="1.0" encoding="utf-8" ?>  
            <configuration>  
              <system.web>  
                <authorization>  
                  <deny users="*" />  
                </authorization>  
              </system.web>  
            </configuration>  
            
            

            Ich kann es leider nicht testen, da ich keinen Server mit IIS habe.

            1. Ich habe jetzt lange gegoogelt und in irgend einem Englischen Forum gesehen, dass diese Lösung stimmen müsste:

              <?xml version="1.0" encoding="utf-8" ?>  
              <configuration>  
                 <system.web>  
                   <authorization>  
                     <deny users="*" />  
                   </authorization>  
                 </system.web>  
               </configuration>