LDAP User Authentifizierung

Installation und Einbindung der Nutzerauthentifikation über LDAP

Nutzerauthentifizierung ist erforderlich, um nur berechtigten Nutzern den Zugang zum Open News Network zu gestatten. Dazu verwendet das Netzwerk eine replizierte LDAP Nutzerdatenbank. Für INN ist allerdings ein externes Tool für die Verifikation der user credentials erforderlich.

Es sind auch andere Anbindungen an auth.open-news-network.org vorstellbar, wenn zum Beispiel schon ein radius-Server vorhanden ist.

Dieses Tutorial beschreibt die Installation und Einbindung von inn-ldapcheck für diesen Zweck. Dazu ist das Vorhandensein einer lokale LDAP Installation erforderlich, z.B. OpenLDAP (www.OpenLDAP.org).

Schritt 1: inn-ldapcheck herunterladen.

cd /usr/src/
wget
http://soft-gems.net/WebSVN/dl.php?repname=Open%20News%20Network%20Proje...

Schritt 2: inn-ldapcheck entpacken.

tar -xvzf inn-ldapcheck.tar.gz

Schritt 3: README lesen und ggf. verstehen.

cd inn-ldapcheck
less README

Schrit 4: config.h muss angepasst werden, bevor ldapcheck kompiliert werden kann.

Hier müssen die Zeilen, das stimmt nur noch wenn die
Version von ftp.isc.org heruntergeladen wurde. Die Version aus dem Repository von soft-gems.net muss nicht modifiziert werden.

#define LDAPSEARCH_BINDDN "cn=Manager,dc=example,dc=com"
#define LDAPSEARCH_BIND_CRED "secret"
#define LDAPSEARCH_BASE "dc=example,dc=com"

gegen den Login ausgetauscht werden, den ich dem geneigten LDAP-Newsmaster
zuteilen werde. Das könnte dann z.B. so aussehen:

#define LDAPSEARCH_BINDDN "cn=meine-kennung,dc=open-news-network,dc=org"
#define LDAPSEARCH_BIND_CRED "sehr-geheimes-passwort"
#define LDAPSEARCH_BASE "dc=open-news-network,dc=org"

meine-kennung und sehr-geheimes-passwort werden von einem der LDAP Administratoren auf Anfrage zugewiesen. Diese Modifikationen sind nur erforderlich, wenn inn-ldapcheck von ftp.isc.org verwendet wird. Die Version aus dem Repository hat noch einen extra Patch für das Logen der User.

Schritt 5: ldapchchek übersetzen. Zum kompilieren benötigst du die OpenLDAP-Header-Files, die du normalerweise im Development-Paket findest (Debian Sarge: libldap2-dev).

make

An dieser Stelle können einige Warnungen erscheinen. Zum einen ist das ein redefiniertes Makro und zum anderen die Inkludierung eines Systemverzeichnisses (/usr/include). Diese Warnungen können getrost ignoriert werden. Unter Umständen kommt es aber auch zu Fehlern, etwa wenn die OpenLDAP-Header-Files nicht installiert sind. Fehler können nicht ignoriert werden.

Ein Anhaltspunkt, wie die erfolgreiche Übersetzung mit harmlosen Warnungen aussieht:

$ nice make
cc -g -I/usr/include -o ldapcheck main.c ldap_pwd_ok.c -L/usr/lib -lldap -llber -lpthread
In file included from ldap_pwd_ok.c:10:
config.h:14:1: warning: "LDAP_SUCCESS" redefined
In file included from ldap_pwd_ok.c:7:
/usr/include/ldap.h:348:1: warning: this is the location of the previous definition

Oder, wer es perfekt machen will, der kann den überflüssigen Includepfad aus dem Makefile und das Makro aus config.h entfernen. Danach sollte die Kompilierung ohne Meldungen durchgehen.

Wie oben schon geschrieben ist, ist die Version aus dem Repository bereits geändert.

Schritt 6: Binary die richten Rechte/User verpassen

chmod +x ldapcheck
chown news:news ldapcheck

Schritt 7: Programm an die richtige Stelle kopieren. Bei Debian und SuSE wäre das z.B.

cp ldapcheck /usr/lib/news/bin/auth/passwd/

Bei anderen Distributionen/Unices kann der Pfad natürlich auch woanders liegen. Jedenfalls muss das Ding dorthin wo auch die ckpasswd liegt.

An dieser Stelle sind wir nun soweit, die LDAP Authentifizierung in INN einzubauen. Dazu ist notwendig:

Schritt 8: readers.conf anpassen

Eine Beispiel-Readers.conf wird bereits mitgeliefert. Wer schonmal mit readers.conf gearbeitet hat, dürfte damit kein Problem haben. Wichtig ist nur, ldapcheck mit -s $hostname den richten Hostnamen des LDAP-Servers mitzugeben. Wenn kein eigener (replizierender) LDAP-Server läuft, kann man sich an den DNS-Round-Robin halten (wie im Beispiel angegeben). In LDAP ist das genauer beschrieben.

auth "opennewsldap" {
hosts: "*"
key: "opennewsldap"
auth: "ldapcheck -s auth.open-news-network.org"
}

access "opennewsldap" {
users: *
key: "opennewsldap"
newsgroups: "!control,!junk,news.*,at.*,oesterreich.*,ch.*,hamster.*,de.*,!de.alt.dateien,opennews.*,open-nntp.*,newbie-net.*,bwnet.test,hamburg.*"
access: RPA
}

INN übernimmt automatisch Änderungen an readers.conf, muss also deshalb nicht extra dafür reloaded werden. Wichtig ist an dieser Stelle noch, dass die Reihenfolge in readers.conf eine entscheidende Rolle spielt. Es wird immer von unten nach oben validiert. Dass bedeutet, man sollte die am meisten spezialisierten Logins/Authentifizierungen ans Ende der Datei verlegen. Also beispielsweise:

access "everyone"{
...
}

auth "localusers"{
...
auth:...
}

access "localusers" {
...
}

auth "opennewsldap"{
...
auth: "ldapcheck -s ldap1.open-news-network.org"
}

access "opennewsldap" {
users: *
...
access: RP
}

auth "Admin"{
...
auth: "ckpasswd -f /usr/lib/news/etc/authentication/.htpasswd"
}

access "Administrator" {
users: ...
...
newsgroups: "*"
access: RPALN
}

Zusammengehörende auth und access Einträge können ohne Probleme direkt bei einander stehen.

Nicht definiert