Hinweis: Dieser Artikel wurde urspruenglich im Jahr 2013 veroeffentlicht. Einige Schritte, Befehle oder Softwareversionen haben sich moeglicherweise geaendert. Pruefen Sie die aktuelle Apache Web Server-Dokumentation fuer die neuesten Informationen.

In dieser Schritt-fuer-Schritt-Anleitung erfahren Sie, wie Sie eine Website mit Apache absichern.

Anleitung: Eine Website mit Apache absichern

Wenn ich muesste, wuerde ich wahrscheinlich sagen, dass die meisten Leute, die Apache verwenden, es nutzen, um Websites zu veroeffentlichen, die oeffentlich zugaenglich sind und/oder ueber eingebaute Sicherheit verfuegen (etwa WordPress, das den Zugriff auf die Anwendung und Daten selbst verwaltet). Als ich nun eine Website veroeffentlichen wollte, die einen Benutzernamen/ein Passwort oder eine Art Einschraenkung erfordert, sodass nur ich deren Daten sehen kann (denken Sie an eine Verwaltungskonsole), hatte ich keine Ahnung, wo ich anfangen sollte.

Apache bietet beide Modalitaeten, die unabhaengig oder in Kombination verwendet werden koennen: Authentifizierung und Autorisierung.

Authentifizierung bedeutet, dass der Benutzer Anmeldedaten angeben muss, um Zugriff zu erhalten, und seine Sitzung waehrend seines gesamten Aufenthalts authentifiziert (identifiziert) wird.

Autorisierung bedeutet, dass der Client autorisiert ist, auf die Seite zuzugreifen. Der einzelne Benutzer wird nicht unbedingt identifiziert. Wenn die Autorisierung beispielsweise auf dem Quellhost (IP-Adresse) basiert, besteht keine Notwendigkeit fuer eine Authentifizierung (Apache-Modul mod_authz_host.)

Nachfolgend finden Sie die relevanten Informationen zur einfachen Konfiguration von Apache (entnommen aus: http://httpd.apache.org/docs/2.2/howto/auth.html)


Es gibt drei Arten von Modulen, die am Authentifizierungs- und Autorisierungsprozess beteiligt sind. Sie muessen normalerweise mindestens ein Modul aus jeder Gruppe auswaehlen.

  • Authentifizierungstyp (siehe die (<http://httpd.apache.org/docs/2.2/mod/core.html#authtype>)-Direktive)
    • (<http://httpd.apache.org/docs/2.2/mod/mod_auth_basic.html>)
    • (<http://httpd.apache.org/docs/2.2/mod/mod_auth_digest.html>)
  • Authentifizierungsanbieter (siehe die (<http://httpd.apache.org/docs/2.2/mod/mod_auth_basic.html#authbasicprovider>)- und (<http://httpd.apache.org/docs/2.2/mod/mod_auth_digest.html#authdigestprovider>)-Direktiven)
    • (<http://httpd.apache.org/docs/2.2/mod/mod_authn_anon.html>)
    • (<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbd.html>)
    • (<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbm.html>)
    • (<http://httpd.apache.org/docs/2.2/mod/mod_authn_file.html>)
    • (<http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html>)
  • Autorisierung (siehe die (<http://httpd.apache.org/docs/2.2/mod/core.html#require>)-Direktive)
    • (<http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html>)
    • (<http://httpd.apache.org/docs/2.2/mod/mod_authz_dbm.html>)
    • (<http://httpd.apache.org/docs/2.2/mod/mod_authz_groupfile.html>)
    • (<http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html>)
    • (<http://httpd.apache.org/docs/2.2/mod/mod_authz_owner.html>)
    • (<http://httpd.apache.org/docs/2.2/mod/mod_authz_user.html>)

Das Modul (<http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html>) ist sowohl ein Authentifizierungs- als auch ein Autorisierungsanbieter. Das Modul (<http://httpd.apache.org/docs/2.2/mod/mod_authn_alias.html>) ist selbst kein Authentifizierungsanbieter, ermoeglicht es aber, andere Authentifizierungsanbieter flexibel zu konfigurieren. Das Modul (<http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html>) bietet Autorisierung und Zugriffskontrolle basierend auf Hostname, IP-Adresse oder Eigenschaften der Anfrage, ist aber nicht Teil des Authentifizierungsanbietersystems.


Zunaechst muessen Sie eine Passwortdatei erstellen. Wie genau Sie dies tun, haengt davon ab, welchen Authentifizierungsanbieter Sie gewaehlt haben. Mehr dazu spaeter. Zunaechst verwenden wir eine Textpasswortdatei. Diese Datei sollte an einem Ort gespeichert werden, der nicht aus dem Web zugaenglich ist. Dies dient dazu, dass niemand die Passwortdatei herunterladen kann. Wenn Ihre Dokumente beispielsweise aus /usr/local/apache/htdocs bereitgestellt werden, moechten Sie die Passwortdatei(en) moeglicherweise in /usr/local/apache/passwd ablegen. Um die Datei zu erstellen, verwenden Sie das (<http://httpd.apache.org/docs/2.2/programs/htpasswd.html>)-Dienstprogramm, das mit Apache geliefert wurde. Dieses befindet sich im bin-Verzeichnis, wo auch immer Sie Apache installiert haben. Wenn Sie Apache aus einem Drittanbieterpaket installiert haben, befindet es sich moeglicherweise in Ihrem Ausfuehrungspfad. Um die Datei zu erstellen, geben Sie ein:

htpasswd -c /usr/local/apache/passwd/passwords rbowen

(<http://httpd.apache.org/docs/2.2/programs/htpasswd.html>) wird Sie nach dem Passwort fragen und Sie dann bitten, es zur Bestaetigung erneut einzugeben:

# htpasswd -c /usr/local/apache/passwd/passwords rbowen New password: mypassword Re-type new password: mypassword Adding password for user rbowen

Wenn (<http://httpd.apache.org/docs/2.2/programs/htpasswd.html>) nicht in Ihrem Pfad ist, muessen Sie natuerlich den vollstaendigen Pfad zur Datei eingeben, um sie auszufuehren. Bei einer Standardinstallation befindet sie sich unter /usr/local/apache2/bin/htpasswd. Als Naechstes muessen Sie den Server so konfigurieren, dass er ein Passwort anfordert, und dem Server mitteilen, welche Benutzer Zugriff haben. Sie koennen dies entweder durch Bearbeiten der httpd.conf-Datei oder durch Verwendung einer .htaccess-Datei tun. Wenn Sie beispielsweise das Verzeichnis /usr/local/apache/htdocs/secret schuetzen moechten, koennen Sie die folgenden Direktiven verwenden, entweder in der Datei /usr/local/apache/htdocs/secret/.htaccess platziert oder in httpd.conf innerhalb eines <Directory /usr/local/apache/apache/htdocs/secret>-Abschnitts.

AuthType Basic AuthName "Restricted Files" # (Following line optional) AuthBasicProvider file AuthUserFile /usr/local/apache/passwd/passwords Require user rbowen

Lassen Sie uns jede dieser Direktiven einzeln untersuchen. Die (<http://httpd.apache.org/docs/2.2/mod/core.html#authtype>)-Direktive waehlt die Methode aus, die zur Authentifizierung des Benutzers verwendet wird. Die gaengigste Methode ist Basic, und dies ist die Methode, die von (<http://httpd.apache.org/docs/2.2/mod/mod_auth_basic.html>) implementiert wird. Es ist jedoch wichtig zu wissen, dass die Basic-Authentifizierung das Passwort vom Client zum Server unverschluesselt sendet. Diese Methode sollte daher nicht fuer hochsensible Daten verwendet werden, es sei denn, sie wird von (<http://httpd.apache.org/docs/2.2/mod/mod_ssl.html>) begleitet. Apache unterstuetzt eine weitere Authentifizierungsmethode: AuthType Digest. Diese Methode wird von (<http://httpd.apache.org/docs/2.2/mod/mod_auth_digest.html>) implementiert und ist wesentlich sicherer. Die meisten aktuellen Browser unterstuetzen die Digest-Authentifizierung. Die (<http://httpd.apache.org/docs/2.2/mod/core.html#authname>)-Direktive legt den Bereich (Realm) fest, der bei der Authentifizierung verwendet wird. Der Bereich erfuellt zwei Hauptfunktionen. Erstens zeigt der Client diese Information dem Benutzer oft als Teil des Passwort-Dialogfelds an. Zweitens wird er vom Client verwendet, um zu bestimmen, welches Passwort fuer einen bestimmten authentifizierten Bereich gesendet werden soll. Sobald sich ein Client also im Bereich "Restricted Files" authentifiziert hat, wird er automatisch dasselbe Passwort fuer jeden Bereich auf demselben Server erneut versuchen, der mit dem Bereich "Restricted Files" markiert ist. Daher koennen Sie verhindern, dass ein Benutzer mehr als einmal nach einem Passwort gefragt wird, indem Sie mehrere eingeschraenkte Bereiche denselben Bereich teilen lassen. Aus Sicherheitsgruenden muss der Client natuerlich immer erneut nach dem Passwort fragen, wenn sich der Hostname des Servers aendert. Die (<http://httpd.apache.org/docs/2.2/mod/mod_auth_basic.html#authbasicprovider>)-Direktive ist in diesem Fall optional, da file der Standardwert fuer diese Direktive ist. Sie muessen diese Direktive verwenden, wenn Sie eine andere Quelle fuer die Authentifizierung waehlen, wie (<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbm.html>) oder (<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbd.html>). Die (<http://httpd.apache.org/docs/2.2/mod/mod_authn_file.html#authuserfile>)-Direktive legt den Pfad zur Passwortdatei fest, die wir gerade mit (<http://httpd.apache.org/docs/2.2/programs/htpasswd.html>) erstellt haben. Wenn Sie eine grosse Anzahl von Benutzern haben, kann es ziemlich langsam sein, bei jeder Anfrage eine Klartextdatei zu durchsuchen, um den Benutzer zu authentifizieren. Apache hat auch die Moeglichkeit, Benutzerinformationen in schnellen Datenbankdateien zu speichern. Das (<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbm.html>)-Modul stellt die (<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbm.html#authdbmuserfile>)-Direktive bereit. Diese Dateien koennen mit dem Programm (<http://httpd.apache.org/docs/2.2/programs/dbmmanage.html>) erstellt und verwaltet werden. Viele andere Arten von Authentifizierungsoptionen sind ueber Drittanbietermodule in der (http://modules.apache.org/) verfuegbar. Schliesslich bietet die (<http://httpd.apache.org/docs/2.2/mod/core.html#require>)-Direktive den Autorisierungsteil des Prozesses, indem sie den Benutzer festlegt, der auf diesen Bereich des Servers zugreifen darf. Im naechsten Abschnitt besprechen wir verschiedene Moeglichkeiten, die (<http://httpd.apache.org/docs/2.2/mod/core.html#require>)-Direktive zu verwenden.


Die (<http://httpd.apache.org/docs/2.2/mod/core.html#satisfy>)-Direktive kann verwendet werden, um anzugeben, dass mehrere Kriterien bei der Entscheidung beruecksichtigt werden koennen, ob einem bestimmten Benutzer Zugang gewaehrt wird. Satisfy kann als Argument eine von zwei Optionen annehmen - all oder any. Standardmaessig wird angenommen, dass der Wert all ist. Das bedeutet, dass wenn mehrere Kriterien angegeben sind, alle erfuellt sein muessen, damit jemand Zugang erhaelt. Wenn jedoch auf any gesetzt, koennen mehrere Kriterien angegeben werden, aber wenn der Benutzer eines davon erfuellt, wird ihm Zugang gewaehrt. Ein Beispiel hierfuer ist die Verwendung der Zugriffskontrolle, um sicherzustellen, dass eine Ressource zwar von ausserhalb Ihres Netzwerks passwortgeschuetzt ist, aber alle Hosts innerhalb des Netzwerks unautentifizierten Zugriff auf die Ressource erhalten. Dies wuerde mit der Satisfy-Direktive erreicht, wie unten gezeigt.

<Directory /usr/local/apache/htdocs/sekrit> AuthType Basic AuthName intranet AuthUserFile /www/passwd/users AuthGroupFile /www/passwd/groups Require group customers Order allow,deny Allow from internal.com Satisfy any </Directory>


Die obigen Direktiven lassen nur eine Person (speziell jemanden mit dem Benutzernamen rbowen) in das Verzeichnis. In den meisten Faellen moechten Sie mehr als eine Person hereinlassen. Hier kommt (<http://httpd.apache.org/docs/2.2/mod/mod_authz_groupfile.html#authgroupfile>) ins Spiel. Wenn Sie mehr als eine Person hereinlassen moechten, muessen Sie eine Gruppendatei erstellen, die Gruppennamen mit einer Liste von Benutzern in dieser Gruppe verknuepft. Das Format dieser Datei ist ziemlich einfach, und Sie koennen sie mit Ihrem bevorzugten Editor erstellen. Der Inhalt der Datei sieht so aus:

GroupName: rbowen dpitts sungo rshersey

Das ist einfach eine Liste der Mitglieder der Gruppe in einer langen Zeile, getrennt durch Leerzeichen. Um einen Benutzer zu Ihrer bereits vorhandenen Passwortdatei hinzuzufuegen, geben Sie ein:

htpasswd /usr/local/apache/passwd/passwords dpitts

Sie erhalten die gleiche Antwort wie zuvor, aber sie wird an die vorhandene Datei angehaengt, anstatt eine neue Datei zu erstellen. (Es ist das -c, das eine neue Passwortdatei erstellt). Jetzt muessen Sie Ihre .htaccess-Datei oder den (<http://httpd.apache.org/docs/2.2/mod/core.html#directory>)-Block wie folgt aendern:

AuthType Basic AuthName "By Invitation Only" # Optional line: AuthBasicProvider file AuthUserFile /usr/local/apache/passwd/passwords AuthGroupFile /usr/local/apache/passwd/groups Require group GroupName

Jetzt wird jeder, der in der Gruppe GroupName aufgefuehrt ist und einen Eintrag in der password-Datei hat, hereingelassen, wenn er das richtige Passwort eingibt. Es gibt eine weitere Moeglichkeit, mehrere Benutzer hereinzulassen, die weniger spezifisch ist. Anstatt eine Gruppendatei zu erstellen, koennen Sie einfach die folgende Direktive verwenden:

Require valid-user

Die Verwendung dieser anstelle der Require user rbowen-Zeile laesst jeden herein, der in der Passwortdatei aufgefuehrt ist und sein Passwort korrekt eingibt.


Da das Speichern von Passwoertern in Klartextdateien die oben genannten Probleme hat, moechten Sie Ihre Passwoerter moeglicherweise an einem anderen Ort speichern, z.B. in einer Datenbank. (<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbm.html>) und (<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbd.html>) sind zwei Module, die dies ermoeglichen. Anstatt “(http://httpd.apache.org/docs/2.2/mod/mod_auth_basic.html#authbasicprovider) file auszuwaehlen, koennen Sie stattdessen dbm oder dbd als Speicherformat waehlen. Um beispielsweise eine dbd-Datei anstelle einer Textdatei auszuwaehlen:

<Directory /www/docs/private> AuthName "Private" AuthType Basic AuthBasicProvider dbm AuthDBMUserFile /www/passwords/passwd.dbm Require valid-user </Directory>

Weitere Optionen sind verfuegbar. Weitere Details finden Sie in der (<http://httpd.apache.org/docs/2.2/mod/mod_authn_dbm.html>)-Dokumentation.

(http://img.zemanta.com/zemified_e.png?x-id=e42f8804-6c89-45f2-a6df-f24978a5af3c)](http://www.zemanta.com/?px “Enhanced by Zemanta”)

Zusammenfassung

Sie haben erfolgreich gelernt, wie man eine Website mit Apache absichert. Wenn Sie auf Probleme stossen, ueberpruefen Sie die Voraussetzungen und stellen Sie sicher, dass Ihre Apache Web Server-Umgebung richtig konfiguriert ist.

Verwandte Artikel