BITFOX® | LÖSUNGEN | SERVICE | LOGIN | BLOG | KONTAKT

Sonntag, 11. September 2011

Auf Kriegstanz mit dem Apache 2.2.19/20 Win32 SSL:
Showdown on Wild Western Digital C:


Wer nicht nur einen fertig vorkonfigurierten Apachen wie z.B. "EasyPHP" oder "XAMPP" zum Testen von Webapplikationen benutzt und auf eine eigene Installation+Konfiguration zurück greift, der kommt hin und wieder auf Windows-Maschinen so ziemlich in's Straucheln:
Der Apache ist eben urwüchsig eine echte Unix-Anwendung und kennt keine Laufwerksbuchstaben, was grade bei der Konfiguration der DOCUMENTROOT und USERDIR-Verzeichnisse auf Netzlaufwerken vor fast unerklärbare aber dennoch wirklich sehr interessante Nebeneffekte stellen kann...
Aber fangen wir einmal von vorn an.... (Weiter lesen.)


Es begab sich, dass ein bis dahin klaglos funktionierender Apache im Einsatz war, dessen DocumentRoot  auf c:/home/system/html und Homedir auf c:/home/*/html aus verschiedenen Gründen von Laufwerk C: auf das Netzlaufwerk Z: verschoben werden sollten.

Dafür wurden die Dateien von C:/home inklusive aller Subverzeichnisse 1:1 nach Z:/home verschoben.
In der Datei httpd.conf wurden die entsprechenden Einträge wie folgt angepasst:

# Dateiquellen für Server und Benutzer
DocumentRoot "
Z:/home/system/html"
UserDir "z:/home/*/html"
# Verzeichnisberechtigungen für alle Laufwerke
<Directory
/>
    Options FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
</Directory>
# Optionale Verzeichnisberechtigungen für das DocumentRoot
<Directory "z:/home/system/html">

    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    <Limit GET POST OPTIONS>
        Order allow,deny
        Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>


# Optionale Verzeichnisberechtigungen für das HomeDir
<Directory "z:/home/*/html">

    AllowOverride FileInfo AuthConfig Limit Indexes
    Order allow,deny
    Allow from all
    <Limit GET POST OPTIONS>
        Order allow,deny
        Allow from all
    </Limit>
    <LimitExcept GET POST OPTIONS>
        Order deny,allow
        Deny from all
    </LimitExcept>
</Directory>

Der Server wurde anschließend neu gestartet; doch dieser quittierte im Webbrowser den Aufruf von http://localhost/ lediglich mit einem knirschenden "Access Denied".
....ein Zugriff auf http://localhost/~benutzername/ funktioniert eigenartiger Weise aber anstandslos....

Nanu?Was passiert hier...?
.....Ein Fall für BITFOX!


Nach vielem Testen kam ich dem Problem nach und nach auf die Spur:
Die sehr restritive Einstellung des Verzeichnisses "/" sollte den Zugriff auf alle Laufwerke einschränken.
Die Verzeichnisfreigabe auf "Z:/home/system/html" sollte dem für das DocumentRoot entgegen wirken.
So weit die logische Annahme... doch Pustekuchen!

Der Apache hat Probleme bei der Interpretation von Lauferksauflösungen beim DocumentRoot.

Dieses wird unerklärlicher Weise wieder auf die Root gebrochen und damit unwirksam.
Aus dem DocumentRoot "z:/home/system/html" wird intern einfach ein "/home/system/html" und somit ein "c:/home/system/html", daher dort der Apache bzw. httpd.exe installiert wurde.
Installiert man den Apache auf ein anderes Laufwerk, befindet sich dort auf einmal das Root-Verzeichnis.

Der Webserver muss also irgendwie ausgetrickst werden, damit der die Dateien die er auf C sucht von Z holt. Die Lösung dafür heisst "Junction" aus der Sysinternals-Sammlung von Microsoft:
Hiermit lässt sich wie unter Unix ein echter "HardLink" im NTFS-Dateisystem legen.

Man kopiert die Datei junction.exe einfach in einen Windows-Pfad - z.B. nach c:/windows/system32 - und gibt folgendes ein:

junction -s c:\home z:\home

...und schon wird das Verzeichnis "home" von Z: nach C: gemapped und man hat ein wunderschönes Loch durch's Knie geschossen, für das ein jeder Mensch mit IT-Sachverstand und Sicherheitsempfinden einen kreuzigen möchte...

Man könnte nun hoffen und annehmen, dass jetzt alles funktioniert -
Nein, tut es natürlich nicht! Weiterhin wird man ein "Denies" erhalten, denn es fehlt noch die Freigabe des neu entstandenen Verzeichnisses auf C:/home

Fügen wir also nun auch noch die folgenden Zeilen der httpd.conf hinzu, um c:/home/sytem/html frei zu geben.

<Directory "c:/home/system/html">
    Options Indexes FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
</Directory>

Und siehe da: Nach einem Neustart funktioniert der Apache wie es ihm befohlen war.


Meines Erachtens handelt es sich um einen schweren Fehler im Windows-Apachen; denn das "UserDir" kann problemlos konfiguriert werden und funktioniert auf Anhieb ohne ein Umbiegen des Dateisystems.

Update: Auch Version 2.2.20 beinhaltet den beschriebenen Fehler.

Keine Kommentare:

Aktuelles