Cyrus-SASL
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 22.04 Jammy Jellyfish
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Cyrus-SASL ist eine Implementierung des SASL-Verfahrens (RFC 4422 🇬🇧). Ziel von SASL ist die Entkopplung des Serverdienstes von der Authentifizierung, um den Programmieraufwand zu verringern. Ein Serverdienst muss nur eine Verbindung zum SASL-Dienst herstellen, jedoch nicht zum Authentifizierungs-Backend wie MySQL.
Installation¶
sasl2-bin
Befehl zum Installieren der Pakete:
sudo apt-get install sasl2-bin
Oder mit apturl installieren, Link: apt://sasl2-bin
Anschließend muss die Datei /etc/default/saslauthd bearbeitet werden. Folgende Zeile muss hinzugefügt werden:
START=yes
Möchte man für Diagnosezwecke Logging (standardmäßig nach /var/log/auth.log) aktivieren, kann man -V im Startbefehl ergänzen:
OPTIONS="-c -m /var/run/saslauthd -V"
Nach einem Neustart des Dienstes saslauthd ist Cyrus-sasld auch schon betriebsbereit, er authentifiziert gegenüber den im System vorhandenen Konten über PAM.
sudo systemctl restart saslauthd
Soll der Dienst beim Systemstart starten, muss man die Unit noch aktivieren:
sudo systemctl enable saslauthd
Anschließend kann die Funktion getestet werden:
m@jammy:~$ sudo testsaslauthd -u BENUTZER -p KENNWORT 0: OK "Success." m@jammy:~$
sasldb2¶
Die sasldb2 ist eine Berkeley-Datenbank, welche die Benutzer und Kennwörter enthält. Sie ist getrennt von der Benutzerverwaltung im Linux-System. Diese liegt unter /etc/sasldb2.
Um diese nutzen zu können, muss in der Datei /etc/default/saslauthd die Methode geändert werden:
MECHANISMS="sasldb"
Verwaltet wird diese mit der Software saslpasswd2.
Benutzer hinzufügen:
m@jammy:/etc$ sudo saslpasswd2 -c BENUTZER Password: Again (for verification): m@jammy:/etc$
Benutzer löschen:
sudo saslpasswd2 -d BENUTZER
Benutzer anzeigen:
m@jammy:/etc$ sudo sasldblistusers2 test@jammy: userPassword m@jammy:/etc$
MySQL¶
Cyrus-SASL kann mittels PAM nicht nur gegen die Unix-Benutzer, sondern auch gegen einen MySQL-Datenbank authentifizieren.
libpam-mysql
Befehl zum Installieren der Pakete:
sudo apt-get install libpam-mysql
Oder mit apturl installieren, Link: apt://libpam-mysql
Anschließend muss eine Konfigurationsdatei erstellt werden, z.B. /etc/mail-pam-mysql.conf. Diese muss folgenden Inhalt haben (die Daten müssen an die Datenbank angepasst werden):
1 2 3 4 5 6 7 8 9 10 11 | verbose = 0; users.host = IP-oder-Hostname; users.database = Name_der_DB; users.db_user = Datenbankbenutzer; users.db_passwd = DB-Kennwort; users.password_crypt = 1; users.md5 = true; users.table = mail_users; users.where_clause = active = 1; users.user_column = username; users.password_column = password; |
Die Datenbank selbst kann mit folgendem SQL-Befehl angelegt werden:
1 2 3 4 5 6 7 8 9 10 11 12 | CREATE DATABASE db_mail; GRANT SELECT ON db_mail.* TO 'db_mail_user'@'localhost' IDENTIFIED BY 'db_mail_password'; USE db_mail; CREATE TABLE mail_users ( username VARCHAR(200) NOT NULL, password VARCHAR(40) NOT NULL, active TINYINT(1) NOT NULL DEFAULT 1, INDEX username_idx(username) ); |
Ein Benutzer kann mit folgendem SQL-Befehl angelegt werden, das 2. Argument ist ein Salt:
1 2 | INSERT INTO mail_users SET username='mustermann', password=ENCRYPT('Kennwort','$1$1234abcd'), active=1; |
Anschließend muss eine Datei unter /etc/pam.d erstellt werden, die den Namen des Services hat, den die SASL-Applikation nutzt, z.B. test oder imap. Die Applikation (z.B. der IMAP-Server Cyrus-IMAPd) muss diesen Service-Namen übergeben, damit auch diese Variante genutzt wird. Beispielsweise die Datei /etc/pam.d/test
auth sufficient pam_mysql.so config_file=/etc/mail-pam-mysql.conf account sufficient pam_mysql.so config_file=/etc/mail-pam-mysql.conf
Hier wird die oben erstelle Konfigurationsdatei genutzt, für unterschiedliche Dienste könnten hier z.B. unterschiedliche Datenbanken genutzt werden.
Aktiviert man verbose-Logging in saslauthd, kann man den genutzten Service-Namen im Log sehen:
Aug 2 13:23:36 jammy saslauthd[7340]: : [login=mustermann] [service=test] [realm=]: not found, update pending
Entsprechend kann man auch testen:
m@jammy:/etc/pam.d$ sudo testsaslauthd -u mustermann -p Kennwort -s test 0: OK "Success." m@jammy:/etc/pam.d$
Ohne Angabe von -s wird imap genommen.
Links¶