Haftungsausschluss:
Dieses Dokument wird aktiv bearbeitet, es sollte noch nicht als offiziell angesehen werden.
|
Gentoo Leitfaden zur OpenLDAP Authentifikation
1.
Starten mit OpenLDAP
Was ist LDAP?
LDAP steht für Lightweight Directory Access Protocol. Da es auf X.500
basiert, enthält es die meisten primären Funktionen dieses, aber die meisten
esoterischen Funktionen, die das X.500 hat, fehlen. Also was ist dieses X.500
und warum gibt es ein LDAP?
X.500 ist ein Modell für Verzeichnisdienste im OSI-Konzept. Es enthält
Namensraumdefinitionen und die Protokollle zum Abfragen und Updaten des
Verzeichnisses. Jedoch fand man, dass X.500 in vielen Situationen zu viel des
Guten war. Anfang des LDAP. Wie X.500 verfügt es sowohl über ein
Datei-/Namensraummodell, sowie ein Protokoll für die Verzeichnisse. Jedoch ist
LDAP dazu ausgerichtet, direkt über den TCP/IP-Stack zu laufen. Kurz gesagt ist
LDAP eine schlankere Version von X.500.
Ich versteh's nicht. Was ist ein Verzeichnis?
Ein Verzeichnis ist eine spezialisierte Datenbank, die für häufige Abfragen,
aber wenige Updates entworfen ist. Im Gegensatz zu generellen Datenbanken
enthalten diese keine Unterstützung für Transaktionen und keine
Roll-Back-Funktionalität. Um die Verfügbarkeit und die Zuverlässigkeit zu
erhöhen, werden Verzeichnisse einfach repliziert. Beim Replizieren sind
temporäre Inkonsistenzen erlaubt, solange sie schließlich synchronisiert werden.
Wie sind Informationen strukturiert?
Alle Informationen in einem Verzeichnis sind hierarchisch strukturiert. Und noch
mehr: Wenn Sie Daten in einem Verzeichnis öffnen wollen, muss das Verzeichnis
wissen, wie man die Daten innerhalb eines Baumes ablegt. Lassen Sie uns einen
Blick auf eine erfundene Firma und einen Internet-ähnlichen Baum werfen:
Befehlsauflistung 1.1: Organisatorische Struktur für GenFic, eine fiktionale Gentoo Firma |
dc: com
|
dc: genfic
/ \
ou: People servers
/ \ ..
uid: .. John
|
Jeder Knoten von so einem Baum muss definiert sein, da man eine Datenbank nicht
wie in diesem ascii-art Beispiel mit Daten füttert. Um solche Knoten zu
benennen, benutzt LDAP ein Benennungsschema. Die meisten LDAP-Distributionen
(einschließlich OpenLDAP) enthalten schon eine große Anzahl vordefinierter (und
generell zugelassene) Schemata, solche wie das inetorgperson-Schema, ein häufig
benutztes Schema, um Benutzer zu definieren.
Interessierte Benutzer werden dazu ermutigt, OpenLDAP Admin Guide zu lesen.
Also...Wozu dient es?
LDAP kann für verschiedene Dinge benutzt werden. Dieses Dokument fokussiert sich
auf die zentralisierte Benutzerverwaltung, das Sammeln aller Konten an einem
einzigen LDAP-Ort(was nicht bedeutet, dass es auf einem einzigen Server liegen
muss, LDAP unterstützt eine hohe Verfügbarkeit und Redundanz), dennoch können
durch Benutzen von LDAP auch andere Ziele erreicht werden.
- Öffentliche Schlüssel Infrastruktur
- Gemeinsame Kalender
- Gemeinsame Adressbücher
- Speicher für DHCP, DNS, ...
-
System Class Configuration Directives (Mehrere Serverkonfigurationen im Auge
behalten)
- ...
2.
Konfiguration von OpenLDAP
Einleitende Konfiguration
Notiz:
In diesem Dokument benutzen wir die Adresse genfic.com als ein Beispiel. Sie
werden das natürlich ändern müssen. Jedoch sollten Sie sicher stellen, dass der
oberste Knoten eine offizielle Top-Level-Domain (net, com, cc, be, ...) ist.
|
Als Erstes emergen wir OpenLDAP:
Befehlsauflistung 2.1: Installation von OpenLDAP |
# emerge openldap
|
Nun generieren wir ein verschlüsseltes Passwort, welches wir später benutzen
werden:
Befehlsauflistung 2.2: Passwort generieren |
# slappasswd
New password: my-password
Re-enter new password: my-password
{SSHA}EzP6I82DZRnW+ou6lyiXHGxSpSOw2XO4
|
Ändern Sie jetzt die LDAP-Server-Konfiguration unter
/etc/openldap/slapd.conf:
Befehlsauflistung 2.3: /etc/openldap/slapd.conf |
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
# Load dynamic backend modules:
modulepath /usr/lib/openldap/openldap
# moduleload back_shell.so
# moduleload back_relay.so
# moduleload back_perl.so
# moduleload back_passwd.so
# moduleload back_null.so
# moduleload back_monitor.so
# moduleload back_meta.so
moduleload back_hdb.so
# moduleload back_dnssrv.so
access to dn.base="" by * read
access to dn.base="cn=Subschema" by * read
access to *
by self write
by users read
by anonymous auth
Datenbank hdb
suffix "dc=genfic,dc=com"
checkpoint 32 30 # <kbyte> <min>
rootdn "cn=Manager,dc=genfic,dc=com"
rootpw {SSHA}EzP6I82DZRnW+ou6lyiXHGxSpSOw2XO4
directory /var/lib/openldap-ldbm
index objectClass eq
|
Als Nächstes ändern wir die LDAP-Client-Konfigurationsdatei:
Befehlsauflistung 2.4: /etc/openldap/ldap.conf |
# nano -w /etc/openldap/ldap.conf
BASE dc=genfic, dc=com
URI ldap://auth.genfic.com:389/
TLS_REQCERT allow
|
Nun bearbeiten Sie /etc/conf.d/slapd und fügen Folgendes hinzu,
wobei Sie die existierenden Zeilen auskommentieren:
Befehlsauflistung 2.5: /etc/conf.d/slapd |
OPTS="-h 'ldap:// ldapi://%2fvar%2frun%2fopenldap%2fslapd.sock'"
|
Start von slapd:
Befehlsauflistung 2.6: Starten von SLAPd |
# /etc/init.d/slapd start
|
Sie können es mit dem folgenden Befehl testen:
Befehlsauflistung 2.7: Testen des SLAPd-Daemons |
# ldapsearch -x -D "cn=Manager,dc=genfic,dc=com" -W
|
Falls Sie einen Fehler erhalten, versuchen Sie, -d 255 hinzuzufügen, um
ausführlichere Meldungen zu erhalten und das Problem, das Sie haben, zu lösen.
3.
Clientkonfiguration
Migrieren der existierenden Daten zu ldap
Gehen sie auf http://www.padl.com/OSS/MigrationTools.html
und laden Sie die Skripte von dort herunter. Die Konfiguration wird auf der
Seite erklärt. Wir unterstützen diese nicht mehr, da diese Skripte eine
potenzielle Sicherheitslücke sind, wenn man sie nach dem Portieren auf dem
System behält. Wenn Sie damit fertig sind, Ihre Daten zu migrieren, fahren Sie
mit dem nächsten Abschnitt fort.
Konfiguration von PAM
Als Erstes werden wir PAM so konfigurieren, dass es die LDAP-Authorisation
zulässt. Installieren Sie sys-auth/pam_ldap, so dass PAM die
LDAP-Authorisation unterstützt, und sys-auth/nss_ldap, so dass Ihr System
mit LDAP-Servern für zusätzliche Informationen zurechtkommt (benutzt von
nsswitch.conf).
Befehlsauflistung 3.1: Installieren von pam_ldap und nss_ldap |
# emerge pam_ldap nss_ldap
|
Nun fügen Sie die folgenden Zeilen an die richtigen Stellen in
/etc/pam.d/system-auth hinzu:
Befehlsauflistung 3.2: /etc/pam.d/system-auth |
auth sufficient pam_ldap.so use_first_pass
account sufficient pam_ldap.so
password sufficient pam_ldap.so use_authtok use_first_pass
session optional pam_ldap.so
#%PAM-1.0
auth required pam_env.so
auth sufficient pam_unix.so try_first_pass likeauth nullok
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so
account sufficient pam_ldap.so
account required pam_unix.so
password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 try_first_pass retry=3
password sufficient pam_unix.so try_first_pass use_authtok nullok md5 shadow
password sufficient pam_ldap.so use_authtok use_first_pass
password required pam_deny.so
session required pam_limits.so
session required pam_unix.so
session optional pam_ldap.so
|
Ändern Sie nun /etc/ldap.conf, so dass sie Folgendes enthält:
Befehlsauflistung 3.3: /etc/ldap.conf |
suffix "dc=genfic,dc=com"
uri ldap://auth.genfic.com/
pam_password exop
ldap_version 3
pam_filter objectclass=posixAccount
pam_login_attribute uid
pam_member_attribute memberuid
nss_base_passwd ou=People,dc=genfic,dc=com
nss_base_shadow ou=People,dc=genfic,dc=com
nss_base_group ou=Group,dc=genfic,dc=com
nss_base_hosts ou=Hosts,dc=genfic,dc=com
scope one
|
Als Nächstes kopieren Sie die (OpenLDAP) Datei ldap.conf vom Server
zum Client, so dass die Clients von der LDAP-Umgebung Bescheid wissen:
Befehlsauflistung 3.4: Herüberkopieren der OpenLDAP ldap.conf |
# scp ldap-server:/etc/openldap/ldap.conf /etc/openldap
|
Schließlich konfigurieren Sie Ihre Clients so, dass sie im LDAP nach
Systemkonten schauen:
Befehlsauflistung 3.5: /etc/nsswitch.conf |
passwd: files ldap
group: files ldap
shadow: files ldap
|
Um die Änderungen zu testen, geben Sie Folgendes ein:
Befehlsauflistung 3.6: Testing LDAP Auth |
# getent passwd|grep 0:0
root:x:0:0:root:/root:/bin/bash
root:x:0:0:root:/root:/bin/bash
|
Falls Sie bemerkt haben, dass eine der Zeilen, die Sie in Ihre
/etc/ldap.conf kopiert haben, auskommentiert war (die
rootbinddn Zeile): Sie brauchen sie nicht, außer Sie wollen das Passwort
eines Benutzers als Superuser ändern. In diesem Fall müssen Sie das
root-Passwort im Klartext in die Datei /etc/ldap.secret schreiben.
Dies ist GEFÄHRLICH und sollte chmod 600 erhalten. Was ich mache:
Ich lasse diese Datei leer und wenn ich von jemandem das Passwort ändern muss,
welches sich sowohl in LDAP, als auch in /etc/passwd befindet,
füge ich das Passwort für 10 Sekunden hinein, während ich es ändere, und lösche
es, wenn ich fertig bin.
4.
LDAP-Serversicherheitseinstellungen
OpenLDAP Berechtigungen
Wenn wir einen Blick in /etc/openldap/slapd.conf werfen, werden Sie
sehen, dass Sie die ACLs (Berechtigungen, wenn sie so wollen) spezifizieren
können, welche bestimmen, welche Daten Benutzer lesen und/oder schreiben können:
Befehlsauflistung 4.1: /etc/openldap/slapd.conf |
access to *
by dn="uid=root,ou=People,dc=genfic,dc=com" write
by users read
by anonymous auth
access to attrs=userPassword,gecos,description,loginShell
by self write
|
Das gibt Ihnen Zugriff auf Alles, was ein Benutzer ändern können sollte. Wenn
das Ihre Informationen sind, dann haben Sie Schreibzugriff; wenn es von anderen
ist, können Sie sie lesen; Anonyme Leute können ein Login/Passwort senden, um
sich einzuloggen. Es gibt vier Stufen, geordnet von der tiefsten zur höchsten:
auth search read write.
Die nächste ACL ist ein wenig sicherer, da es normale Benutzer daran hindert,
anderer Leute "shadowed" Passwörter zu lesen:
Befehlsauflistung 4.2: /etc/openldap/slapd.conf |
access to attrs="userPassword"
by dn="uid=root,ou=People,dc=genfic,dc=com" write
by dn="uid=John,ou=People,dc=genfic,dc=com" write
by anonymous auth
by self write
by * none
access to *
by dn="uid=root,ou=People,dc=genfic,dc=com" write
by dn="uid=John,ou=People,dc=genfic,dc=com" write
by * search
|
Dieses Beispiel gibt root und John Zugriff zum Lesen/Schreiben/Suchen für alles
im Baum unter dc=genfic,dc=com. Dies lässt Benutzer ihre eigenen
userPasswords ändern. Als letzte Aussage hat jeder die Fähigkeit
suchen zu können, was bedeutet, dass sie einen Suchfilter ausfüllen können, aber
die Suchresultate nicht lesen können. Nun können Sie mehrere ACLs haben, aber
die wichtigste Regel ist, dass sie von unten nach oben abgearbeitet werden,
somit sollte Ihre höchste Stufe die restriktivste sein.
5.
Arbeiten mit OpenLDAP
Warten des Verzeichnisses
Sie können damit anfangen, das Verzeichnis zu benutzen, um Benutzer in
apache/proftpd/qmail/samba zu authentifizieren. Sie können es mit Webmin
verwalten, welches eine einfache Verwaltungsschnittstelle bereitstellt. Sie
können auch phpldapadmin, diradm, jxplorer oder lat verwenden.
6.
Dank
Wir möchten Matt Heler dafür danken, dass er uns seinen Rechner für die Zwecke
dieses Leitfadens bereitgestellt hat. Ein Dank geht außerdem an die coolen Typen
in #ldap @ irc.freenode.net
Die Inhalte dieses Dokuments sind, sofern nicht explizit
anders genannt, unter der Creative Commons -
Namensnennung / Weitergabe Lizenz lizenziert. Die Gentoo Name and Logo
Usage Guidelines treffen zu.
|