GNU/Linux >> LINUX-Kenntnisse >  >> Debian

Wie man Verzeichnisse mit mod_authn_dbd und MySQL auf Apache (Debian 8) mit einem Passwort schützt

Diese Anleitung erklärt, wie man Webverzeichnisse (mit Benutzern aus einer MySQL-Datenbank) mit mod_authn_dbd auf Apache2 auf einem Debian 8 (Jessie)-Server mit einem Passwort schützt. Es ist eine Alternative zu den Klartext-Passwortdateien, die von mod_auth bereitgestellt werden, und ermöglicht Ihnen die Verwendung der normalen SQL-Syntax zum Erstellen/Ändern von Löschbenutzern. Sie können mod_authn_dbd auch konfigurieren, um sich bei einer vorhandenen MySQL-Benutzertabelle zu authentifizieren. Der Apache mod_authn_dbd ist ein Ersatz für mod_auth_mysql.

1 Vorbemerkung

Ich verwende hier den vhost http://www.example.com mit der vhost-Konfigurationsdatei /etc/apache2/sites-available/example.com.vhost und dem Document Root /var/www/www.example.com/web. Ich möchte das Verzeichnis /var/www/example.com/web/protecteddir in diesem Tutorial mit einem Passwort schützen (übersetzt zu http://www.example.com/protecteddir/).

Sie können diese Anleitung für den einfachen LAMP-Server verwenden, wenn Sie Apache noch nicht installiert haben.

2 Installation von MySQL oder MariaDB

Ich werde MariaDB, einen MySQL-Fork, hier anstelle von MySQL verwenden. Aber MySQL funktioniert auch, wenn Sie das bevorzugen. Um MariaDB zu installieren, führen wir Folgendes aus:

apt-get -y install mariadb-server mariadb-client

Sie werden aufgefordert, ein Passwort für den MySQL-Root-Benutzer anzugeben:

Neues Passwort für den „root“-Benutzer von MariaDB:<-- yourrootsqlpassword
Wiederholen Sie das Passwort für den „root“-Benutzer von MariaDB:<-- yourrootsqlpassword

Installieren Sie das DBD-MySQL-Modul:

 apt-get install libaprutil1-dbd-mysql

Aktivieren Sie anschließend das Modul mod_authn_dbd :

a2enmod dbd
a2enmod authn_dbd
authn_socache

Apache neu starten:

service apache2 restart

3 Mod_authn_dbd konfigurieren

Die Dokumentation für mod_authn_dbd finden Sie in der Apache-Dokumentation hier http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html.

Nachdem wir diese beiden Dateien gelesen haben, erstellen wir eine MySQL-Datenbank namens examplecomdb, in der wir die Tabelle mysql_auth erstellen, die unsere Benutzer und Passwörter enthält. Zusätzlich erstellen wir den MySQL-Benutzer examplecom_admin - dieser Benutzer wird später von mod_auth_mysql verwendet, um sich mit MySQL zu verbinden:

mysqladmin -u root -p create examplecomdb
mysql -u root -p
GRANT SELECT, INSERT, UPDATE, DELETE ON examplecomdb.* TO 'examplecom_admin'@'localhost' IDENTIFIED BY 'examplecom_admin_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON examplecomdb.* TO 'examplecom_admin'@'localhost.localdomain' IDENTIFIED BY 'examplecom_admin_password';
FLUSH PRIVILEGES;

(Ersetzen Sie examplecom_admin_password durch ein Passwort Ihrer Wahl.)

USE examplecomdb;
create table mysql_auth (
username varchar(255) not null,
passwd varchar(255),
groups varchar(255),
primary key (username)
);

(Natürlich können Sie auch vorhandene Tabellen verwenden, die Ihre Benutzerdaten enthalten, und Sie können auch zusätzliche Felder in der Tabelle haben, wie zum Beispiel ein Feld, das definiert, ob ein Benutzer aktiv ist oder nicht.)

Jetzt fügen wir den Benutzertest mit dem Passworttest in unsere mysql_auth-Tabelle ein; dieser Benutzer gehört zur Gruppe testgroup.

Das Passwort muss gehasht werden, ich werde hier einen SHA1-Hash verwenden, der Hash kann mit dem htpasswd-Befehl auf der Linux-Shell erstellt werden:

htpasswd -bns test  test

Das Ergebnis ist folgendes:

test:{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=

Der erste Teil ist der Benutzername "test", getrennt durch ":" und dann kommt das gehashte Passwort. Wir benötigen das gehashte Passwort "{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=" nur, um es in unsere Benutzerdatenbank einzufügen. Die MySQL-Abfrage lautet:

INSERT INTO `mysql_auth` (`username`, `passwd`, `groups`) VALUES('test', '{SHA}qUqP5cyxm6YcTAhz05Hph5gvu9M=', 'testgroup');

Dann verlassen wir die MySQL-Shell:

quit

Die Konfiguration für mod_authn_dbd muss in die vhost-Datei aufgenommen werden, sie darf nicht in einer .htaccess-Datei hinzugefügt werden. Daher bearbeiten wir die vhost-Datei und fügen am Ende der Datei die folgende Konfiguration hinzu:

nano /etc/apache2/sites-available/example.com.vhost
[...]
 # mod_dbd configuration
DBDriver mysql
DBDParams "dbname=examplecomdb user=examplecom_admin pass=examplecom_admin_password"

DBDMin 4
DBDKeep 8
DBDMax 20
DBDExptime 300

<Directory "/var/www/example.com/web/protecteddir">
# mod_authn_core and mod_auth_basic configuration
# for mod_authn_dbd
AuthType Basic
AuthName "My Server"

# To cache credentials, put socache ahead of dbd here
AuthBasicProvider socache dbd

# Also required for caching: tell the cache to cache dbd lookups!
AuthnCacheProvideFor dbd
AuthnCacheContext my-server

# mod_authz_core configuration
Require valid-user

# mod_authn_dbd SQL query to authenticate a user
AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username = %s"
</Directory>

Apache neu laden:

service apache2 reload

Wenn Sie zusätzliche Felder in Ihrer MySQL-Tabelle haben, die definieren, ob sich ein Benutzer anmelden darf oder nicht (z. B. ein Feld namens aktiv), können Sie es wie folgt zur SQL-Benutzerabfrage hinzufügen:

[...]
AuthDBDUserPWQuery "SELECT passwd FROM mysql_auth WHERE username = %s and active = 'yes'"
[...]

Die Richtlinie require valid-user sorgt dafür, dass sich jeder in der mysql_auth-Tabelle aufgeführte Benutzer anmelden kann, solange er/sie das richtige Passwort angibt. Wenn Sie möchten, dass sich nur bestimmte Benutzer anmelden dürfen, verwenden Sie so etwas wie

[...]
require user jane joe
[...]

stattdessen. Und wenn Sie möchten, dass sich nur Mitglieder bestimmter Gruppen anmelden dürfen, verwenden Sie so etwas:

[...]
require group testgroup
[...]

Das ist es! Versuchen Sie nun, auf http://www.example.com/protecteddir/ zuzugreifen, und Sie sollten nach einem Benutzernamen und Passwort gefragt werden:

  • Apache:http://httpd.apache.org/
  • Debian:http://www.debian.org/
  • mod_authn_dbd: http://httpd.apache.org/docs/current/mod/mod_authn_dbd.html

Debian
  1. So installieren und sichern Sie phpMyAdmin mit Apache unter Ubuntu 18.04

  2. So installieren und sichern Sie phpMyAdmin mit Apache unter Debian 9

  3. So installieren und konfigurieren Sie Zabbix unter Debian 9 Linux

  4. Wie man Benutzer unter Debian 9 hinzufügt und löscht

  5. So erstellen und löschen Sie einen Benutzer unter Debian 9

So installieren Sie WordPress mit Apache und Let’s Encrypt SSL unter Debian 11

So installieren und konfigurieren Sie den Apache-Webserver mit virtuellem Host unter Debian 10

Wie man Benutzer in Debian hinzufügt und entfernt

So installieren Sie Apache mit PHP-FPM unter Debian 10

Wie installiere und konfiguriere ich Apache unter Debian 11?

So installieren Sie Drupal mit Apache auf Debian und Ubuntu