Raffi: Passwortschutz unter Windows 2000 Webserver

Hallo Leute

Ich muss für einen Kunden einen sicheren Passwortschutz realisieren, den er in einem Admin Bereich pflegen kann (User / PW eröffnen, ändern usw.)

So wie ich informiert bin, ist der höchst mögliche Schutz, den Ordner mit einem (oder mehreren) Windows 2000 User zu schützen.

Nun meine Frage: Gibt es irgend eine möglichkeit per PHP einen solchen User zu eröffnen?

Oder gibt es eine andere Variante? hataccess funtkioniert doch nur unter Linux oder?

Danke und Gruss
Raffi

  1. Hallo Raffi,

    So wie ich informiert bin, ist der höchst mögliche Schutz, den Ordner mit einem (oder mehreren) Windows 2000 User zu schützen.

    Du meinst mit den Windows 2000 Rechten? Achtung! Die darfst Du nicht mit den Rechten, die ein Besucher von "außen" hat, verwechseln.

    Hier mal eine Skizze:

    +------------------------------+
                 | Benutzer                     |
                 +------------------------------+
        Versuchter |        | Versuchter    | Veruchter
        Zugriff    |        | Zugriff       | Direkt-
        über a.php |        | direkt auf    | Zugriff
        auf a.txt  |        | a.txt         |
               +----------------+           |
               | Webserver      |           |
               +----------------+           |
                   |        |               |
                   |         \              |
                   |          |             |
               +----------+   |             |
               | PHP      |   |            /
               +----------+   |           /
                  /|          |          /
                 / |          |         |
                |  |          |         |
             +---------------------------------------+
             | Betriebsystem, Dateirechte            |
             +---------------------------------------+
                |  |          |         |
               /    \        /         /
              /      \      /         /
             |        |    |         |
             v        v    v         v
        +-------+  +---------------------+
        | a.php |  | a.txt               |
        +-------+  +---------------------+

    Ein "normaler" Dateizugriff über das Web ist der mittlere Pfeil "Versuchter Zugriff direkt auf a.txt" (wobei hier "direkt" als Zugriff über http://.../a.txt zu verstehen ist) Die erste Kontrollinstanz, die zwischen dem Benutzer und der Datei liegt, ist der Webserver. Wenn dieser irgendwie angewiesen ist, (z.B. .htaccess) die Datei nicht (oder nur unter bestimmten Bedingungen) auszuliefern, dann ist hier schonmal Schluss. Als nächste Kontrollinstanz sind dann die Dateirechte des Betriebsystems. Hierbei gilt: Jedes Programm - auch der Webserver - läuft unter einer bestimmten Benutzerkennung auf dem Server. Mit Benutzerkennung sind hier Benutzer des Betriebsystems gemeint, als in Deinem Fall die Benutzer, die Du in der Systemverwaltung von Windows 2000 siehst. Wenn nun auf eine Datei zugegriffen wird, dann wird vom Betriebsystem geprüft, ob dieser Benutzer, unter dem das Programm läuft, Zugriff auf diese Datei hat. Wenn nicht, dann ist hier Schluss. In dem Fall würde der Webserver ein 403 Forbidden ausgeben, dies ist jedoch etwas irreführend; es dem Webserverprogramm ja selbst vom Betriebsystem aus verboten worden, auf die Datei zuzugreifen, der Webserver ist nicht so konfiguriert worden.

    Wenn Du nun über http://.../a.php?file=a.txt auf die Datei zugreifst, also so, dass ein PHP-Script dazwischen ist. (Das ist der linke Fall, mit der "Verzweigung") Dann haben wir natürlich wieder den Webserver als Kontrollinstanz dazwischen. Der Webserver startet daraufhin den PHP-Interpreter, der _per se_ keine Kontrollinstanz darstellt. Dieser versucht zuerst auf das Script a.php zuzugreifen. Falls dies nicht gelingt, (vom Betriebsystem untersagt) ist auch hier Schluss. Dann lässt PHP das Script selbst ablaufen. Dieses Script selbst bildet dann die weitere Kontrollinstanz. Falls diese Kontrollinstanz meint, der Benutzer habe kein Zugriff, wird sie dies dem Benutzer mitteilen. Falls das Script jedoch den Benutzer durchlässt, öffnet es die a.txt-Datei. Falls dies - durch das Betriebsystem bedingt - scheitert, dann wird das PHP-Script vermutlich irgendeine Fehlerbehandlungsroutine drin haben, jedenfalls ist dann auch schluss. Jedoch erst wenn _alle_ Kontrollinstanzen durchlaufen sind, kann Zugriff gewährt werden.

    Jetzt bleibt nur noch der "Direktzugriff" übrig. (rechter Fall) Dieser ist nur dann möglich, wenn sich der Benutzer _direkt_ am Rechner einloggen kann. (oder auch über einen FTP-Server, der keine weiteren Sicherheitsmaßnahmen eingebaut hat) In diesem Fall stehen dann nur noch die Betriebsystemschutzfunktionen einem Zugriff "im Wege".

    Dir sollte auf jeden Fall klar sein, dass Benutzer auf Betriebsystemebene normalerweise nichts mit den Benutzern auf HTTP-Ebene oder PHP-Ebene zu tun haben und es auch besser nicht sollten. Du musst Dir also Deine eigene Benutzerverwaltung erstellen. (oder eine Vorgefertige verwenden)

    Wenn Du nun etwas absichern willst, dann musst Du Dir im Klaren sein, auf welcher Ebene Du ansetzen willst.

    1. Kann ein Besucher über etwas anderes als HTTP auf die Dateien zugreifen? (also: kann sich jemand außer dem Webmaster per Telnet, FTP oder Terminalserver einloggen?)

    Wenn ja: Dann musst Du dafür sorgen, dass nur der Benutzer, unter dem das Webserverprogramm läuft, auf die Dateien zugreifen kann und alle anderen außer dem Webmaster nicht.

    Wenn nein: prima, ein Problem weniger.

    2. Wird der Webserver von mehreren Sites gleichzeitig benutzt, die von unterschiedlichen Menschen verwaltet werden?

    Wenn ja: Dann hast Du ein Problem: Der Webserver läuft immer unter der gleichen Benutzerkennung und Du kannst per se nicht verhindern, dass ein anderer Webmaster ein eigenes PHP-Script installiert, das dann über die Benutzerkennung des Webservers auf Deine Dateien zugreift. Wenn dies wirklich der Fall ist, dann kann ich Dir zu Windows hier leider nichts sagen.

    Wenn nein: prima, ein Problem weniger.

    3. Soll auf die Datei über den Webserver direkt zugegriffen werden? Also über http://.../a.txt?

    Wenn ja: Dann musst Du dafür sorgen, dass der Webserver die Authentifizierung übernimmt und die Datei nur unter bestimmten Umständen ausliefert.

    Wenn nein: Dann musst Du dafür sorgen, dass die Datei vom Webserver unter *keinen* Umständen direkt ausgeliefert wird.

    4. Soll auf die Datei über ein PHP-Script zugegriffen werden? Also so etwas wie http://.../a.php?file=a.txt

    Wenn ja: Sorge dafür, dass das PHP-Script die nötigen Rechte des Besuchers kontrolliert und nur im Erfolgsfall die Datei ausliefert, im Mißerfolgsfall eine Fehlermeldung ausliefert. Das PHP-Script sollte außerdem noch eine Fehlerüberprüfung enthalten, falls durch die Dateirechte des Betriebsystems doch etwas gesperrt sein sollte.

    Wenn nein: Wenn Du außerdem noch bei der Frage 3 nein gesagt hast, dann solltest Du Dir alles noch einmal durchlesen, denn in diesem Fall sperrst Du *jeden* aus. ;-)

    Also: Falls Du nun über PHP authentifizieren willst, wirst Du höchstwarscheinlich auf Sessions zurückgreifen wollen. Mit Sessions kannst Du einen Besucher über Anfragen hinweg eindeutig identifizieren. Daher kannst Du auch Informationen über den Besucher aufheben. Zum Beispiel, als welcher Benutzer er gerade eingeloggt ist.

    hataccess funtkioniert doch nur unter Linux oder?

    .htaccess funktioniert mit jedem Apache-Webserver - und den gibt es auch für Windows. Wenn Du HTTP Authentifizierung meinst, also das, was man meistens mit .htaccess "macht", dann geht das auch mit anderen Webservern.

    Viele Grüße,
    Christian

  2. hi,

    Ich muss für einen Kunden einen sicheren Passwortschutz realisieren, den er in einem Admin Bereich pflegen kann (User / PW eröffnen, ändern usw.)
    Oder gibt es eine andere Variante? hataccess funtkioniert doch nur unter Linux oder?

    wenn es um einen zugriff über eine art webinterface geht: was hältst du von http://www.php.net/manual/de/features.http-auth.php?

    gruss,
    wahsaga