Zugriffskontrolle für den Apache-Webserver

Abgesperrt

Vom der einfachen dateibasierten Zugangskontrolle bis zur Anbindung an LDAP bietet Apache eine Menge Möglichkeiten zur Authentifizierung. Genügen die nicht, lassen sich in Perl oder Python leicht eigene Module dafür schreiben.

Man muss keine Riesen-Site wie Myspace betreiben, um in die Lage zu kommen, einen Login-Zugang zu einer Website einrichten zu müssen. Der Apache-Server bietet dafür eine Reihe von Alternativen. Obwohl diese Funktionalität ein paar Konfigurationsschritte erfordert, lassen sich Websites ohne zusätzliche proprietäre Module schützen. Dieser Artikel beschreibt die verschiedenen Möglichkeiten, die es gibt.

Apache-Phasen

Der Apache-Server durchläuft drei Phasen, um festzustellen, ob ein Benutzer die angeforderte Seite sehen darf. In der Access-Phase überprüft er, ob die IP-Adresse, von der die Anfrage stammt, berechtigt ist. In der Authentication-Phase überprüft Apache, ob der Username und das Passwort zusammengehören. Die Authorization-Phase lässt sich zum Beispiel dazu verwenden, über Benutzergruppen die Administration zu vereinfachen. Wie dieser Artikel zeigt, lässt sich jede Phase mit etwas eigenem Code für beinahe beliebige Zwecke verwenden.

Denken Sie aber daran, dass alle diese Methoden das Passwort im Klartext über die Leitung schicken, wenn die Verbindung nicht mit SSL verschlüsselt ist. Der Einsatz von SSL sei deshalb mit Nachdruck ans Herz gelegt. Alle aufgeführten Beispiele wurden mit Apache 2.2.8 getestet. Bei früheren Versionen können wichtige Features eventuell fehlen.

Datei-basiert

Die dateibasierte Authentifizierung, im Apache-Jargon auch als Basic Auth oder Htpasswd Auth bekannt, ist die meist verwendete Technik, Seiten über ein User-Login abzusichern. Wenn Sie zum Beispiel den Admin-Bereich einer Seite vor Neugierigen verstecken möchten, fügen Sie einfach den Code aus Listing 1 in die Apache-Konfiguration ein.

Listing 1

Htpasswd-Sicherheit

<Location /admin>
AuthType Basic
AuthName "Admin Pages"
AuthUserFile /Pfad/zum/Password-File
AuthBasicProvider file
Require valid-user
</Location>

Je nach eingesetzter Distribution befindet sich die Apache-Konfiguration an anderer Stelle und ist auch unterschiedlich in einzelne Dateien aufgeteilt. Auf Red Hat/Fedora ist es »/etc/httpd/conf/httpd.conf« , bei Ubuntu »/etc/apache2/apache2.conf« . Beachten Sie, dass sie bei Apache 2 die Direktive »AuthBasicProvider« weglassen müssen.

Nachdem der »AuthType« in Listing 1 auf »Basic« gesetzt ist, vergibt die folgende Zeile einen Namen, sodass die Benutzer wissen, wo sie sich überhaupt einloggen. Schließlich muss Apache den Ort der Passwort-Datei erfahren (Zeile 4). Der letzte Schritt ist die Require-Zeile, die Apache anweist, jeden authentifizierten Benutzer hereinzulassen.

Die Apache-Distribution bringt ein Programm namens »htpasswd« (bei Apache 2 häufig auch »htpasswd2« ) mit, das beim Anlegen und Verwalten der speziellen Passwort-Datei hilft. Zu Beginn legen Sie die Datei so an:

htpasswd -c Passwort-Datei Benutzer

Wollen Sie zur existierenden Datei neue Benutzer hinzufügen oder Passwörter ändern, verwenden Sie das gleiche Programm, aber mit der Option »-c« . Wenn Sie einen Benutzer entfernen wollen, editieren Sie die Datei entweder von Hand oder Sie verwenden »htpasswd« mit der Option »-D« .

Sie können Basic Auth (wie auch die weiter unten vorgestellten Methoden) mit Apache-Direktiven wie »Directory« , »DirectoryMatch« , »LocationMatch« und »FilesMatch« verwenden. Zum Beispiel sichert der Code in Listing 2 alle PDF-Dateien einer Site ab.

Listing 2

Htpasswd und <C>FilesMatch<C>

<FilesMatch "\.gif$">
   AuthType Basic
   AuthName "Login für PDFs nötig"
   AuthUserFile /Pfad/zum/Password-File
   AuthBasicProvider file
   Require valid-user
</FilesMatch>

Statt allen Benutzern in einer Passwort-Datei den Zugang zu gewähren, können Sie ihn auch auf einzelne Anwender beschränken. Das Konfigurationsfragment in Listing 3 erlaubt nur »steve« und »bob« den Zugang zum Verzeichnis »/admin« , während alle anderen authentifizierten Benutzer auf »/content« zugreifen dürfen. Wie man sieht, folgen dem Eintrag »user« die erlaubten Benutzernamen, durch Leerzeichen getrennt.

Listing 3

Userspezifischer Zugang

<Location />
   AuthType Basic
   Authname "Meine Site"
   AuthBasicProvider file
   AuthUserFile /Pfad/zum/Password-File
</Location>
<Location /admin>
   Require user steve bob
</Location>
<Location /content>
   Require valid-user
</Location>

Ein anderes praktisches Feature ist, ganzen Gruppen statt einzelner User den Zugang zu erlauben. Dazu muss eine Gruppendatei existieren. Listing 4 zeigt ein Beispiel.

Listing 4

Working with Groups

<Location />
   AuthType Basic
   AuthName "My Site"
   AuthBasicProvider file
   AuthUserFile /Pfad/zum/Password-File
   AuthGroupFile /Pfad/zum/Group-File
</Location>
<Location /admin>
   Require group admin
</Location>
<Location /content>
   Require valid-user
</Location>

Die Group-Datei ist sehr einfach aufgebaut:

Gruppenname: Benutzer1, Benutzer2, ...

Für das obige Beispiel würde darin also einfach stehen: »admin: steve bob« . Jede Group-Datei darf beliebig viele Gruppen enthalten, immer eine pro Zeile. Gruppen sind ein guter Weg, die Konfiguration klar zu strukturieren und damit einfacher lesbar zu machen. Denken Sie daran, die Htpasswd- und die Group-Datei außerhalb des Apache-Documentroot zu platzieren, damit niemand sie einfach herunterladen kann.

comments powered by Disqus

Artikel der Woche

Systeme mit Vamigru verwalten

Auch wer nur kleine Flotten von Linux-Servern verwaltet, freut sich über Werkzeuge, die ihm diese Arbeit erleichtern. Vamigru tritt mit diesem Versprechen an. Wir verraten, was es leistet und wie Sie es in der eigenen Umgebung in Betrieb nehmen. (mehr)
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Container

Wie setzen Sie Container ein?

  • Gar nicht
  • Docker standalone
  • Docker mit Kubernetes
  • Docker mit Swarm
  • Docker mit anderem Management
  • LXC/LXD
  • Rocket
  • CRI-O auf Kubernetes
  • Container auf vSphere
  • Andere (siehe Kommentare auf der Ergebnisseite)

Google+

Ausgabe /2018

Microsite