|
|
  |
|
|||||||||||
|   |   Portrait   |   Publikationen, Anleitungen etc.   |   Photoalbum   |   Links   |   switch to english   |   | |||||||
|
|
  |
|
|||||||||||
Eine kurze Einführung in den Apache Web-ServerAchtung: Diese Anleitung ist in weiten Teilen veraltet und wird voraussichtlich nicht mehr aktualisiert.Auf dieser Seite möchte ich Ihnen einen kurzen Einblick in Konfiguration des Apache Web-Servers geben. Dabei beschäftigt sich diese Seite nur mit dem alten Apachen, also der Version 1.3.x und nicht der neuen 2.x Version bei der sich vieles geändert hat. Für tiefergehende Erkenntins möchte ich Ihnen die WWW-HOW-TO Kapitel 7-10 empfehlen, das Buch "Apache - Das umfassende Referenzwerk" aus dem O'Reilly-Verlag. und natürlich die doc zum packet apacheDer Apache gilt als der populärste Web-Server im Internet. Er ist freie Software und wird mit jeder mir bekannten Distribution mitausgeliefert. Übrigens ist der Apache nicht auf unix-artige OS beschränkt, sondern auch für MS-Windows erhältlich. Die Konfigurationsdateien, mit denen wir uns im Folgenden beschäftigen wollen, liegen leider nicht bei allen Linuxdistributionen am selben Ort. Die hier verwendeten Pfade sind die von SuSE (6.4). Beginnen wir nun damit .... was der Apache für eine Website hältAus Sicht des Apachen besteht eine Webseit aus einem Verzeichnis, das irgendwo auf unserem Rechner liegt. Dieses Verzeichnis enthält mindestens die drei elementaren Unterverzeichnisse
Zum Beispiel liegen nach einer Standard-SuSE-Installlation die /usr/local/httpd/htdocs/ Was so weit noch der Theorie entspricht. Die Logdateien treiben sich aber in /var/log/httpd/ herum usw. . Wie kommt das? Es ist möglich die entsprechenden Pfade zu "verbiegen" und das haben die Leute von SuSE hier getan. Wo könnte der Sinn liegen? Nun, so liegen die Logdatein nicht einheitlich in meinem großen Apache-Verzeichnis, aber die Logdateien vieler Programme liegen nun einheitlich in einem Verzeichnis /var/log. Es steht Ihnen natürlich frei nun Ihren Sinn für Ordnung umzusetzten .... Sever-Konfigurationsdateien
Eine Erbschaft aus alten Tagen (NCSA) sorgt dafür das der Apache die drei oberen Config-Datein akzeptiert. Dennoch ist davon abzuraten die Dateien srm.conf und access.conf zu benutzen. Alles Notwendige kann und sollte in die httpd.conf eingetragen werden. Es ist nämlich wesentlich einfacher die Konfigurationsdatei zu pflegen, wenn es nur eine gibt. Bei früheren Apache-Versionen war es notwendig, diese Datein zu deaktivieren, nachdem man sie gelöscht hat. Bei v1.3 reicht es, wenn sie einfach nicht existieren. Einfaches leer lassen der Datein tut es nach meiner Erfahrung übringens auch. Das liegt daran das mit den drei Config-Dateien wie folgt verfahren wird. Nachdem die Datei httpd.conf ausgelesen wurde, sucht der Apache srm.conf und access.conf und führt sie in dieser Reihenfolge aus. Das deaktivieren dieses Verhaltens erfolgt über folgende Einträge in der httpd.conf ResourceConfig /dev/null AccessConfig /dev/null Die Konfigurationsanweisungen httpd.conf
Die diskutierte Varabel wird in Monotype, die möglichen Zuweisungen in Italic gedruckt. Darunter folgt eine kurze Erklärung. Section 1: Global EnvironmentSchauen wir uns mal einige Basisconfigurationsmöglichkeiten unter Section 1 an.ServerType (standalone / inetd) Die Option inetd ermöglicht es zu verhindern, daß Apache eine Reihe wartender Child-Prozesse in Gang setzt. Stattdessen startet er jeweils nur einen neuen, wenn eine Anfrage eingeht, und beendet den Child-Prozesse dann, wenn die Anfrage bearbeitet wurde. Diese Vorgehensweise ist recht langsam, verbraucht aber weniger Systemleistung, wenn keine Clients verarbeitet werden müssen. Insgesamt gilt diese Methode jedoch als veraltet, da sie unelegant und ineffizient ist Die Option standalone erlaubt eine ganze Horder wartender Child-Server und ist die Default-Einstelllung. ServerRoot "/usr/local/httpd" Das Hauptverzeichnis, in dem die Unterverzeichnisse conf und logs zu finden sind. Achtung! Hier nie einen slash am Ende des Pfades machen! Das kann je nach Apache-Version zu Ärger führen. Wenn Sie dieses Verzeichnis über ein Netzwerk, z.B. per NFS ansprechen lesen Sie vorher http://www.apache.org/docs/mod/core.html#lockfile Nun folgenden diverse Möglichkeiten einzelne Files über das System zu verstreuen und die Anzahl der Clints zu begrenzen usw. Darauf will ich hier jetzt nicht eingehen. Die meisten dieser Varabeln erklären sich selbst und die anderen erfordern wieder die oben genannte Lektüre. Section 2: 'Main' server configurationPort 80Zuerst haben Sie die Möglichkeit den Port zu ändern auf dem der Apache ständig "horcht" ob Anfragen für Ihn da sind. Es ist in der Regel nicht sinnvoll den Port zu ändern, da die "normalen" Browser sonst ihre Website nicht finden werden. User wwwrun Group nogroup Hier kann angegeben werden unter welcher User, bzw. Gruppen-ID der Web-Server laufen soll. Ein eigener Benutzer ist aus Sicherheitsgründen sinnvoll. Ein solcher User sollte im System keine Privilegien haben, die es Ihm z.B. erlauben auf Dateien zuzugreifen, die nicht für das ganze Netz gedacht sind. ServerAdmin root@localhost Die Emailadresse des Admin. Sie wird benötig um diverese Antworten für Fehlermeldungen zu generieren. DocumentRoot "/usr/local/httpd/htdocs" Diese Variabel legt das Verzeichnis fest, aus dem Apache die Clients mit Dateien versorgt. Der Server hängt den Pfad der angefortderten URL an den DocumentRoot an. Dies kann z.B. über Alias abgefangen werden. Achtung! Hier nie einen slash am Ende des Pfades machen! Das kann je nach Apache-Version zu Ärger führen. AccessFileName .htaccess Diese Variabel beinhaltet den Namen des files welches in jedem Verzeichnis abgelegt werden kann und die Informationen über die Zugriffsrechte zu den entsprechenden Dateien enthält. Wir werden weiter unten noch auf diese Datei eingehen. ErrorLog /var/log/httpd/error_log In dieser Datei werden alle Fehler aufgezeichnet. PidFile /var/run/httpd.pid In dieser Datei wird die PID (Prozeß-ID) abgespeichert. Sie wird u.a. zum Beenden des Servers genutzt. Außerdem dient sie als Lock-Datei um zu verhindern, daß zwei Server gleichzeitig auf einem Rechner laufen. DirectoryIndex index.html Diese Variabel gibt die Index-Datei an, die automatisch beim Aufrufen eines Verzeichnisses angezeigt wird. Section 3: Virtual HostsDie oben genannten Variabeln können für Virtuelle Hosts auf dem gleichen Rechner neu vergeben werden. Darüber hinaus gibt es aber noch weitere Möglichkeiten und Probleme die ich hier nicht behandeln möchte. Sie können sich u.a. über die oben angegebene Literatur informieren.http neustartenDamit unsere jetzt gemachten Änderungen wirksam werden muß der Apache neu gestartet werden. Dafür ist es natürlich(?) nicht nötig den Rechner neu zu starten. Sie können dem Apachen über den Befehl httpd ansteuern.Mögliche Befehle sind z.B. : apache stop - Beendet httpd apache start - Startet httpd apache restart - Startet httpd erneut apache(full)-status - Ausgabe eine (ausfürlichen) Statusberichtes weiteres s. apache help Der apache befindet sich im Verzeichnis /sbin/init.d/ wohin für root kein Pfad liegt. Sie müssen also zunächst in das Verzeichnis wechseln und können dann die entsprechenden Befehle mit einem ./ als Pfadangabe nutzen. Mit lynx http://localhost können Sie nun testen, ob der gewünschte Effekt eingetreten ist. Sollte lynx als Browser nicht zu Verfügung stehen können Sie natürlich auch einen Anderen nehmen.... w3m z.B. :-) AuthentifizierungAlternativ kann man solche Einstellungen auch in der Datei .htaccess vornehmen, die dann für das Verzeichniss gilt in dem sie sich befindet, also eine lokales Verfahren. Wo liegen die Vorteile solche Einstellungen global oder lokal vorzunehmen? Der Vorteil beim .htaccess-Mechanismus ist der, daß man die Konfiguration ändern kann, ohne den Server neu zu starten. Dies ist besonders für Systeme interessant, auf denen viele Leute ihre Homepage pflegen, aber natürlich nicht alle davon autorisiert sind den Server neuzustarten oder seine Konfigurationsdatei zu ändern. Der Nachteil der .htaccess-Methode ist, daß die Daten immer wieder durch den Phaser müssen, statt nur einmal beim Hochfahren eingelesen zu werden. Authentifizierung über die zentrale httpd.conf DateiAuthType Basic Es gibt mittlerweile sicherer Authentifizierungsmöglichkeiten, (vgl. www.apache.org), die aber leider noch von keinem Browser unterstützt werden ==> Basic ist die einzig sinnvolle Einstellung. AuthName "special directory" Das Kind muß ja irgendeinen Namen haben... AuthUserFile datei Hier wird festgelegt wo die Datei mit den Benutzernamen und den verschlüsselten Paßwörten liegt. Zu den Paßwörter kommen wir später. AuthGroupFile datei Hier wird festgelegt wo die Datei liegt, welche die Gruppennamen und deren Mitglieder enthält. Das sieht dann etwa so aus: admin: tim tom thomas webuser: bingo dingo jango Diese Datei und ihre Eintragungen haben keine Auswirkungen solange nicht der entsprechende <require>, Eintrag (s.u.) vorgenommen wurde. require [user benutzer1 benutzer2 ... ] [group gruppe1 gruppe2 ...] [valid-user] require ist der Eintrag zur Aktivierung der Paßwortprüfung. Die Option valid-user meint, daß Paßwörter von allen Benutzern akzeptiert werden, die in der Paßwortdatei stehen. Beispiele : require user tim bingo dingo durch diesen Eintrag werden nur die Benutzer tim bingo dingo mit gültigem Paßwort zur Anmeldung zu gelassen. require group admin durch diesen Eintrag werden nur die Mitglieder der Gruppe admin mit gültigem Paßwort zur Anmeldung zu gelassen. Bis jetzt sind die (potenziellen) Benutzer auf indivdueller Basis verarbeitet worden. Man kann den Zugriff aber auch über eine bestimmte IP oder Hostname oder ganzen Gruppen von IP's und Hostnames erlauben, bzw. verweigern. Die benötigten Eintragungen sind allow from und deny from. Die Abfolge in der allow und deny Anweisungen abgearbeitet werden ist unabhängig von der Reihenfolge wie sie in der Datei stehen. Die Standard-Abfolge ist erst deny und dann allow. Ist ein Client durch deny ausgeschlossen, bleibt er ausgeschlossen, wenn kein entsprechendes allow folgt. Trifft weder die allow- noch die deny-Anweisung auf den Client zu, wird dem Client der Zugriff gewährt. Diese Reihenfolge kann über order geändert werden . Der Syntax ist denkbar einfach order reihenfolge z.B. also order allow,deny. Womit wir nun die Reihenfolge engtsprechend geändert hätten, mit allen dazu gehörigen Konsequenzen. Nun endlich zum Syntax von allow from und deny from, welcher nahezu identisch ist : allow from host host ... deny from host host ... Bei host kann es sich bei beiden um
<Directory /usr/www/htdocs/sicherheit> AuthUserFile /usr/www/ok_users/leute AuthGroupFile /usr/www/ok_users/gruppe require valid-user order deny,allow allow from 172.16.240.204 deny from all </Directory> Das einzige was nun zum Glück noch fehlt sind die Paßwörterhtpasswd [-c] passwordfile username -c Create a new file. Mehr Optionen gibt es bei Bedarf mit htpasswd --help Beispiele zum Syntax: htpasswd -c /usr/www/ok_users/leute dingo Legt zum Beispiel die Datei /usr/www/ok_users/leute an und richtet anschließend ein Paßwort für dingo ein. Das Paßwort wird wie üblich erfragt und muß einmal bestätigt werden. Achtung! Nach dem ersten mal htpasswd -c /usr/www/ok_users/leute, darf diese Datei nicht mehr mit der Option -c angesteuert werden, da Sie sonst überschrieben wird. Um einen User zu einer bestehenden Datei hinzuzufügen verwendet man z.B. htpasswd -c /usr/www/ok_users/leute tim . Authentifizierung über die lokale .htaccess DateiAccessFileName dateiname1 dateiname2 ... in der httpd.conf Datei, der den Dateien dateinameX die entsprechende Autorität verleiht. Damit diese Änderung wirksam wird, muß der Apache neu gestartet werden. Voreingestellt und Standard ist .htaccess Als Beispiel könnten Sie in Ihre httpd.conf eintragen AccessFileName .dalton Wenn nun eine solche Datei die Aufgabe der httpd.conf für /usr/www/htdocs/sicherheit übernehmen soll, muß eine Datei .dalton mit dem folgenden Inhalt in dem entsprechenden Verzeichniss liegen AuthUserFile /usr/www/ok_users/leute AuthGroupFile /usr/www/ok_users/gruppe require valid-user order deny,allow allow from 172.16.240.204 deny from all Natürlich muß man als Admin nicht alles hinnehmen was die User u.U. in ihrer .htaccess Dateien schreiben. Der Befehl AllowOverride schränkt die Möglichkeiten der .htaccess Dateien ein. Moegliche Optionen sind zum Beispiel AuthConfig, All, None, Limit .... Links zu weiteren InformationenDas Apache Projekt Apache HTTP Server Project Die Dokumentation Die Apache Seiten von Horus.at apache week apache today |