E-Mail-Server 1: OpenLDAP (Debian Wheezy)
Entscheidet man sich für einen eigenen Mailserver so bleibt es nicht bei der Auswahl eines einzelnen Programms. In der Regel benötigt man mindestens zwei Pakete, den eigentlichen Mailserver-Transport-Agent (MTA) genannt und den Mail-Delivery-Agent (MDA). Aber meist kommen noch weitere Pakete hinzu, z.B. zur SPAM-Abwehr.
Die hier durchgeführte LDAP-Installation kann natürlich auch ohne einen Mailserver betrieben werden. An der grundsätzlichen Vorgehensweise ändert sich hierbei nichts. Auch die PAM
-Anbindung ist unabhängig vom Mailserver. Das Script mkhomedir.php
sollte dann jedoch so angepasst werden dass die Rechte nicht für die Gruppe dovecot
gesetzt werden.Im folgenden wollen wir uns alle Komponenten ansehen, die zur Verwaltung und zum Betrieb eines Full-Featured-Mailserver gehören. Wir beginnen mit der Verwaltung der E-Mailbenutzer. Diese soll per LDAP erfolgen:
LDAP
Bei LDAP handelt es sich um einen sogenannten Verzeichnisdienst. In einer hierarchischen Struktur können Objekte und Felder angelegt werden und so z.B. Nutzer- und Gruppenverzeichnisse erzeugt werden. Zahlreiche Programme unterstützen die Datenabfrage per LDAP und so bietet LDAP eine schnelle und einfache Benutzerverwaltung.
Die Installation wird gestartet durch:
apt-get install slapd
```Im Laufe des Installationsprozesses werden einige Fragen gestellt, sollte dies nicht der Fall sein kann dies auch nachträglich erledigt werden:
```bash
dpkg-reconfigure -p low slapd
Die Fragen sollten wie folgt beantwortet werden:
Omit OpenLDAP server configuration: No
DNS domain name : ldap.21x9.org
Organization name : ldap.21x9.org
Administrator password : $ldap_password
Confirm password : $ldap_password
Database backend to use : HDB
Do you want the database to be
removed when slapd is purged : No
Move old database : Yes
Allow LDAPv2 protocol : No
Damit ist die grundlegende Einrichtungsarbeit bereits abgeschlossen. Nun kann man sich mit der Struktur des LDAP-Verzeichnisses befassen. Hierzu bietet es sich an auf eine grafische Oberfläche zurückzugreifen.
Das Basisverzeichnis befindet sich an der Position dc=ldap,dc=21x9,dc=org
und es kann mit dem Benutzer cn=admin,dc=ldap,dc=21x9,dc=org
mit Schreibrechten darauf zugegriffen werden.## LDAP-Account-Manager (LAM) ##
Eine gute Webbasierte Oberfläche steht in Form des LDAP-Account-Managers (LAM) zur Verfügung, über seine Oberfläche kann man Gruppen und Benutzer verwalten. Darüberhinaus bietet er auch eine Baumansicht auf das LDAP-Verzeichnis, was für das bessere Verständnis sehr hilfreich ist.
Die Installation:
apt-get install ldap-account-manager
```Neben dem LAM selbst wird noch ein Apache-Webserver nebst PHP installiert, sofern dies nicht bereits der Fall ist. Anschließend kann der LAM über `http://$serverip/lam` aufgerufen werden.
Bevor der LAM genutzt werden kann ist eine Verbindung mit dem LDAP-Server herzustellen. Oben rechts auf der Loginseite des LAM existiert hierzu der Link `LAM configuration`. Dort wählt man `Edit server profiles`. Die Anmeldung erfolgt mit dem voreingestellten Benutzer und dem Kennwort: `lam`
In dem nun sichtbaren Menü werden folgende Einstellungen vorgenommen:
Server address : ldap://localhost:389
Activate TLS : no
Tree suffix : dc=ldap,dc=21x9,dc=org
LDAP search limit : 5000
Default language : Deutsch (Deutschland)
Server list : bleibt leer
Path to external script: bleibt leer
Rights for the home dir: bleibt unverändert
Login method : Fixed list
List of valid users : cn=admin,dc=ldap,dc=21x9,dc=org
New password : $ldap_password
Reenter password : $ldap_password
Somit ist die Verbindung eingerichtet und dank des `cn=admin`-Benutzers kann auch in das Verzeichnis geschrieben werden.
Die Konfiguration wird nun auf dem Reiter `Account types` fortgesetzt:
Available account types: bleibt unverändert Users/LDAP suffix : ou=people,dc=ldap,dc=21x9,dc=org Users/List attributes : bleibt unverändert Groups/LDAP suffix : ou=groups,dc=ldap,dc=21x9,dc=org Groups/List attributes : bleibt unverändert Hosts : Remove this account type Samba domains : Remove this account type
Die Angaben stellen die Verbindung von Verzeichniseinträgen und ihrer gewünschten Verwendung her. Also `ou=groups` für Benutzergruppen und `ou=people` für die Benutzer selbst. Da wir keinen Samba-Server benötigen entfällt die Konfiguration.Weiter geht es auf dem Reiter `Modules` auf dem aber in der Regel alle Einstellungen unverändert bleiben können, lediglich die eventuell vorhandenen Verweise auf `Samba 3 (sambaSamAccount)` sollten überall entfernt werden. Ebenso wie auf dem folgenden Reiter `Module settings`. Über den Button `Save` können die Einstellungen nun gespeichert werden.
Auf der Loginmaske kann man nun den Benutzer `admin` verwenden und sich mit dem `$ldap_password` anmelden. Der LAM stellt nun folgende Frage:
The following suffixes are missing in LDAP. LAM can create them for you. ou=people,dc=ldap,dc=21x9,dc=org ou=groups,dc=ldap,dc=21x9,dc=org
Die Frage wird mit `Create` beantwortet. Dies sollte mit `All changes were successful.` quittiert werden. Über den Reiter `Groups` können nun Gruppen über den Reiter `Users` können Benutzer angelegt und verwaltet werden. Das Formular für die Gruppen ist sehr übersichtlich und bedarf keiner weiteren Erklärung. Bei der Anlage von Benutzern ist mind. `Last name` anzugeben. Außerdem können beliebig viele `Email address`-Einträge angelegt werden, natürlich nur für Domains die der Mailserver später auch verwalten soll. Auf dem Reiter `Unix` wird der `Last Name` als `User name` übernommen. Hier sollte man überlegen ob der Benutzer unter `Login shell` eine ebensolche erhalten soll. Falls nicht wird hier `/bin/false` eingestellt.
Damit ist die Installation des LAM abgeschlossen. Und es können Gruppen und Benutzer erstellt werden.## PAM-Anbindung ##
Der nun im LDAP-Verzeichnis angelegte Benutzer kann zwar später bereits E-Mails empfangen, wenn er eine Login Shell erhalten hat kann er diese aber noch nicht nutzen. Hierzu muss zunächst der Linux-Anmeldedienst `PAM` über den LDAP-Server informiert werden:
```bash
apt-get install libpam-ldapd
Die hier gestellten Fragen werden wie folgt beantwortet:
LDAP server URI : ldap://localhost/
LDAP server search base : dc=ldap,dc=21x9,dc=org
Name service to configure: group, passwd, shadow
Über den Befehl getent passwd
bzw. getent group
sollte man nun alle lokalen Benutzer inklusive der bereits vorhandenen LDAP-Benutzer und Gruppen aufgelistet bekommen. Anmelden können sich die LDAP-Benutzer mit Shell zwar bereits aber sie besitzen noch kein Home-Directory. Dieses kann automatisch mit folgendem Script angelegt werden:
<?php
/*
mkhomedir.php
Erzeugt Homeverzeichnisse für LDAP-Benutzer, da sonst keine Abwesenheits-
nachrichten und Sieve-Filter möglich sind.
*/
$ds=ldap_connect("localhost");
if ($ds) {
$r=ldap_bind($ds);
$sr=ldap_search($ds,"ou=people,dc=ldap,dc=21x9,dc=org", "sn=*");
$info = ldap_get_entries($ds, $sr);
for ($i=0; $i<$info["count"]; $i++) {
if ($info[$i]["homedirectory"][0]) {
if (!is_dir($info[$i]["homedirectory"][0])) {
mkdir($info[$i]["homedirectory"][0]);
chown($info[$i]["homedirectory"][0],$info[$i]["uid"][0]);
chgrp($info[$i]["homedirectory"][0],"dovecot");
chmod($info[$i]["homedirectory"][0], 0770);
}
}
}
ldap_close($ds);
} else {
echo "<p>Verbindung zum LDAP Server nicht möglich</p>";
}
?>
Das Script wird mit php mkhomedir.php
ausgeführt, gern auch per Cronjob. Alternativ kann man den lamdaemon
konfigurieren, da dieser automatisch auch Homeverzeichnisse anlegen kann.## Problembehebung
Unter Umständen reagiert der LDAP-Server auf Anfragen komisch oder gar nicht. In diesem Fall sollte zunächst der nscd
(Name server caching daemon` unter die Lupe genommen werden. Meist ist dieser für Fehlverhalten verantwortlich.
Er kann mit apt-get remove nscd
deinstalliert werden. Alternativ sollte er per Cronjob mind. stündlich neu gestartet werden.In der aktuellen Konfiguration wird ''slapd'' das Logfile vermutlich mit zahlreichen Fehlermeldungen vollschreiben:
bdb_equality_candidates: (uidNumber) not indexed
bdb_equality_candidates: (uid) not indexed
bdb_equality_candidates: (mail) not indexed
bdb_equality_candidates: (cn) not indexed
etc...
Um die jeweils in den Klammern stehenden Werte in den Index aufzunehmen sollte zunächst ermittelt werden, welche Indexeinstellungen derzeit verwendet werden. Dies geschieht mit:
slapcat -n 0 -l output.ldif
grep olcDbIndex output.ldif
Der ausgegebene Wert wird kopiert und eine Datei ''olcDbIndex.ldif'' erstellt:
dn: olcDatabase={1}hdb,cn=config
changetype: modify
replace: olcDbIndex
olcDbIndex: uid,uidNumber,mail,cn,objectClass,cn eq
Die Zeile ''olcDbIndex'' wird eingefügt und dann um die gewünschten Werte aus den Fehlermeldungen erweitert. Die Einstellungen müssen nun noch importiert werden:
ldapmodify -Y EXTERNAL -H ldapi:/// -f ./olcDbIndex.ldif