[[Vorlage(Getestet, jammy)]]

## Bitte hier alle wesentlichen Wikiartikel auflisten, deren Kenntnis vorausgesetzt wird.
{{{#!vorlage Wissen
[:Pakete installieren: Installation von Programmen]
[:Programme_starten: Starten von Programmen]
[:Terminal: Ein Terminal öffnen]
[:mit Root-Rechten arbeiten:]
[:systemd/systemctl:]
[:MySQL:] (optional)
}}}

[[Inhaltsverzeichnis()]]
Cyrus-SASL ist eine Implementierung des SASL-Verfahrens ([https://datatracker.ietf.org/doc/html/rfc4422 RFC 4422] {en}). 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 =
{{{#!vorlage Paketinstallation
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.
{{{#!vorlage Befehl
sudo systemctl restart saslauthd
}}}

Soll der Dienst beim Systemstart starten, muss man die Unit noch aktivieren:
{{{#!vorlage Befehl
sudo systemctl enable saslauthd
}}}

Anschließend kann die Funktion getestet werden:
{{{#!vorlage Befehl

m@jammy:~$ sudo testsaslauthd -u BENUTZER -p KENNWORT
0: OK "Success."
m@jammy:~$ 
}}}

== sasldb2 ==
Die sasldb2 ist eine [wikipedia:Berkeley-DB: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:
{{{#!vorlage Befehl
m@jammy:/etc$ sudo saslpasswd2 -c BENUTZER
Password: 
Again (for verification): 
m@jammy:/etc$ 
}}}
Benutzer löschen:
{{{#!vorlage Befehl
sudo saslpasswd2 -d BENUTZER
}}}
Benutzer anzeigen:
{{{#!vorlage Befehl
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.
{{{#!vorlage Paketinstallation
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):
{{{#!code ini
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:
{{{#!code sql
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 [wikipedia:Salt_(Kryptologie):Salt]:
{{{#!code sql
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:
{{{#!vorlage Befehl
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 =
 * [https://www.cyrusimap.org/sasl/ Homepage von Cyrus-SASL] {en}
 * [https://www.cyrusimap.org/imap/concepts/features/authentication-sql.html Authentifizierung mit SQL] {en}

#tag: Netzwerk, Ubuntu, Internet, System, Sicherheit, Server