Catinka: htaccess-Schutz / unterschiedliche Passwörter f. einzelne Ordner

Hallo,

vorweg: Ich bin relative Anfängerin in Sachen Programmierung und hoffe, dass ich hier nichts frage, das an anderer Stelle schon steht und von mir nur nicht gefunden wurde, weil ich schlicht nicht nach den richtigen Keywords gesucht habe / suchen konnte. Falls doch: Sorry!

AUSGANGSLAGE:
*************

Ich habe in meiner Website für bestimmte Verzeichnisse Passwortschutz mit htaccess und htpasswd eingerichtet. Das funktioniert soweit. Nun habe ich verschiedene Verzeichnisse, die nur von bestimmten Nutzern eingesehen werden sollen. Da meines Wissens mit der normalen htaccess-Variante mit einer der gültigen User-Passwort-Kombinationen alle Unterverzeichnisse einzusehen wären, habe ich einen Umweg gesucht. Im Netz habe ich dazu keine Hilfe gefunden und habe mir deshalb selbst etwas ausgedacht:

Ich habe in den jeweiligen Unterverzeichnissen unterschiedliche htaccess-Dateien liegen, die auf unterschiedliche htpasswd-Dateien verweisen. Beispiel: Im Verzeichnis "01" verweist die ".htaccess" auf die Passwortdatei ".htpasswd01", im Verzeichnis "02" verweist die ".htaccess" auf die Passwortdatei ".htpasswd02", und so weiter. Die Benutzernamen und Passwörter in den unterschiedlichen htpassword-Dateien sind natürlich verschiedene. Dem User 01 gebe ich also nur den Link zum Unterverzeichnis 01 und die entsprechende User-Passwort-Kombination. Mit jener kommt er somit nicht an die Dateien im Unterverzeichnis 02, obwohl dies ein Unterverzeichnis auf der selben Ebene ist.

Ich habe das mit Firefox und IE getestet und es funktioniert.

Zusätzliche Info: Ich habe, da es mir nicht sicher vorkam, die Passwort-Dateien in das Root- also das Hauptverzeichnis zu legen, diese in den geschützten (oder?) "cgi-data"-Ordner verschoben und den Pfad dann in den htaccess-Dateien entsprechend angepasst. Das funktioniert auch.

FRAGEN:
*******

Ist das eine korrekte und sichere Lösung?
Es funktioniert zwar auf den ersten Blick, aber ich kann die Sicherheit und auch eventuelles Fehlerpotential mit meinem Laienwissen nicht abschätzen.

Gibt es eine einfachere / sinnvollere Lösung (die ein Anfänger hinbekommen würde)?

Für eine kurze Einschätzung wäre Euch sehr dankbar,

Catinka   :-)

  1. echo $begrüßung;

    Ich habe in den jeweiligen Unterverzeichnissen unterschiedliche htaccess-Dateien liegen, die auf unterschiedliche htpasswd-Dateien verweisen.
    Ich habe das mit Firefox und IE getestet und es funktioniert.

    So ist das in Ordnung. Eine Unterverzeichniskonfiguration überschreibt die Konfiguration eines übergeordneten Verzeichnisses (sofern erlaubt).

    Zusätzliche Info: Ich habe, da es mir nicht sicher vorkam, die Passwort-Dateien in das Root- also das Hauptverzeichnis zu legen, diese in den geschützten (oder?) "cgi-data"-Ordner verschoben und den Pfad dann in den htaccess-Dateien entsprechend angepasst. Das funktioniert auch.

    "Rootverzeichnis" kann mehreres bedeuten. Ist das dein DocumentRoot, auf das deine Domain zeigt? Oder ist das dein Kundenverzeichnis, in dem sich Unterverzeichnisse befinden, auf die deine Domains zeigen? Und in welchem Verhältnis dazu steht das cgi-data-Verzeichnis?

    Es ist zwar möglich, innerhalb des DocumentRoots ein Verzeichnis anzulegen und den Zugriff darauf per Konfiguration zu verbieten. Der Apache ist auch schon seit vielen Versionen so vorkonfiguriert, dass Dateien (und Verzeichnissen), die mit .ht anfangen, der Webzugriff verboten ist. Doch diese Konfiguration kann man ändern/deaktivieren. Besser ist es, ein Verzeichnis außerhalb des DocumentRoots zu haben, in das man Dateien mit sensiblen Daten ablegen kann.

    Wenn ein Provider mehrere Domains pro Kunde anbietet, sollte es auch die Möglichkeit geben, alle Domains auf eigene Unterverzeichnisse des Kundenverzeichnisses zeigen zu lassen. Somit kannst du auch ein Verzeichis anlegen, auf das keine Domain zeigt und das auch kein Unterverzeichnis eines Domain-Verzeichnisses ist (wobei das Kundenverzeichnis im Prinzip auch schon ein solches ist).

    echo "$verabschiedung $name";

    1. Hallo und vielen Dank für die Antwort!

      "Rootverzeichnis" kann mehreres bedeuten. Ist das dein DocumentRoot, auf
      das deine Domain zeigt? Oder ist das dein Kundenverzeichnis, in dem sich
      Unterverzeichnisse befinden, auf die deine Domains zeigen? Und in welchem
      Verhältnis dazu steht das cgi-data-Verzeichnis?

      Es handelt sich um das Stammverzeichnis, also mein Kundenverzeichnis, in dem meine Unterverzeichnisse liegen.
      Der Ordner cgi-data ist ein Verzeichnis, der als Unterverzeichnis des Stammordners automatisch von strato angelegt wird, wenn man cgi nutzt. Der Ordner kann von extern nicht angesteuert werden. Gibt man im Browser den Ordner an, heißt es "not found", gibt man eine konkrete Datei im Ordner an, heißt es "you don't have permission to access....".

      Wie ich ein Verzeichnis außerhalb des Documentroots haben kann, weiß ich nicht. Das muss ich dann wohl mal bei strato nachfragen.

      Herzlichen Dank soweit!

      1. echo $begrüßung;

        Es handelt sich um das Stammverzeichnis, also mein Kundenverzeichnis, in dem meine Unterverzeichnisse liegen.
        Der Ordner cgi-data ist ein Verzeichnis, der als Unterverzeichnis des Stammordners automatisch von strato angelegt wird, wenn man cgi nutzt. Der Ordner kann von extern nicht angesteuert werden. Gibt man im Browser den Ordner an, heißt es "not found", gibt man eine konkrete Datei im Ordner an, heißt es "you don't have permission to access....".

        Da nehme ich mal an, dass er als /kunden/catinka/cgi-data angelegt ist und aufgrund seiner Spezialkonfiguration ein Zugriff verhindert wird.

        Wie ich ein Verzeichnis außerhalb des Documentroots haben kann, weiß ich nicht. Das muss ich dann wohl mal bei strato nachfragen.

        /kunden/catinka/ sei dein Kundenverzeichnis. Wenn catinka.example darauf zeigt, ist das auch dein DocumentRoot für diese Domain. catinka.example sei auch deine Haupt-Domain, bzw. die erste, die beim Kauf des Webspace gleich angegeben und angelegt wurde.

        /kunden/catinka/projekt1 sei ein Verzeichnis, auf das die Domain projekt1.example zeigt. Über projekt1.example kann man nicht auf Dateien außerhalb von /kunden/catinka/projekt1 zugreifen. Aber über catinka.example/projekt1 lassen sich auch projekt1-Dateien erreichen. Wenn du nun catinka.example auf /kunden/catinka/catinka umlegen kannst, kannst du nun beispielsweise /kunden/catinka/ohneweb anlegen und keiner hat vom Web aus direkten Zugriff darauf.

        echo "$verabschiedung $name";