Stand: 31.12.2008 Aktuelle Dokumentation unter: http://www.open-news-network.org/wiki/LDAP-Authentication Nutzerauthentifizierung ist erforderlich, um nur berechtigten Nutzern den Zugang zum Open News Network zu gestatten. Dazu verwendet das Netzwerk eine replizierte LDAP Nutzerdatenbank. Es sind auch andere Anbindungen an auth.open-news-network.org vorstellbar, wenn zum Beispiel schon ein radius-Server vorhanden ist. INN stellt für die Authentifizierung zwei Mechanismen zur Verfügung: * externes Programm, das über stdin/stdout kommuniziert, konfiguriert durch die Anweisung auth * Funktion in einer Skript-Sprache, konfiguriert durch die Anweisung perl_auth oder python_auth === inn-ldapcheck === Dieses Tutorial beschreibt die Installation und Einbindung des externen Programms inn-ldapcheck. Voraussetzung ist das Vorhandensein einer lokale LDAP-Installation, z.B. OpenLDAP (http://www.openldap.org). Benötigt werden unter anderem /usr/include/ldap.h und libldap.so. Distribution Paket Debian 4 libldap2-dev Fedora 10 openldap-devel Ubuntu 8.04 libldap2-dev inn-ldapcheck herunterladen Die Original-Version gibt es unter http://ftp.isc.org/isc/inn/contrib/ Allerdings sind zum Übersetzen auf zeitgenössischem Linux einige Änderungen notwendig. Eine angepasste Version gibt es hier: README lesen und ggf. verstehen config.h anpassen Dieser Schritt ist nur für die Original-Version des ISC notwendig. Dort stehen in config.h nämlich folgende Zeilen: BINDDN und CRED dienen dazu, zunächst einen Bind mit einem Administrator-Account durchzuführen. Diese muss man gegen die Zugangsdaten des LDAP-Newsmaster austauschen. Das könnte dann z.B. so aussehen: meine-kennung und sehr-geheimes-passwort werden von einem der LDAP Administratoren auf Anfrage zugewiesen. Wie gesagt, ist dieser Schritt für die angepasste Version aus dem Subversion-Repository nicht notwendig. ldapchchek übersetzen 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. inn-ldapcheck testen INN kommuniziert mit externen Authentifizierungsprogrammen über stdin/stdout. Um so ein Programm ohne INN zu testen muss man dessen Eingabe nachbauen. Ohne Debug-Ausgaben sieht ein erfolgreicher Test mit korrektem Login so aus: Binary die richtigen Rechte/User verpassen chmod +x ldapcheck chown news:news ldapcheck Programm an die richtige Stelle kopieren Distribution Verzeichnis Debian 4 /usr/lib/news/bin/auth/passwd/ Fedora 10 /usr/lib/news/bin/auth/passwd/ Ubuntu 8.04 /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 ckpasswd liegt. 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. Mit folgendem Patch entfällt der Auth-Bind, so daß keine LDAP-Admin Daten erforderlich sind. Als Nebeneffekt ergibt sich auch eine Beschleunigung des Authentifizierungsvorgangs: Patch inn-ldapcheck.pl inn-ldapcheck.pl ist Michaels Portierung von inn-ldapcheck nach Perl. Notwendige Pakete Distribution Paket Debian 4 libnet-ldap-perl Fedora 10 perl-LDAP Ubuntu 8.04 libnet-ldap-perl AuthLDAP.pm Auf News.albasani.net läuft eine Authentisierungsfunktion für perl_auth:. Vorteil dieser Methode ist, dass man über globale Variablen Daten an perl_access: und filter_nnrpd.pl weiterreichen kann. * http://albasani.net/viewvc.cgi/trunk/lib/Schnuerpel/INN/ * http://albasani.net/viewvc.cgi/trunk/etc/auth/ * http://albasani.net/viewvc.cgi/trunk/etc/filter/