Gentoo Logo

Haftungsausschluss: Dieses Dokument wird aktiv bearbeitet, es sollte noch nicht als offiziell angesehen werden.


Gentoo Leitfaden zur OpenLDAP Authentifikation

Inhalt:

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        (Organisation)
          /      \
ou:  People  servers    (Organisatorische Einheiten)
      /    \    ..
uid: ..  John            (OE-spezifische Daten)

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

# Fügen Sie das benötigte Datenschmea unter core.schema ein
include        /etc/openldap/schema/cosine.schema
include        /etc/openldap/schema/inetorgperson.schema
include        /etc/openldap/schema/nis.schema

Entfernen Sie die Kommentarzeichen der Module modulepath und hdb
# 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

# Entfernen Sie die Kommentarzeichen bei sample access restrictions (Beachten Sie, dass Sie die Einrückung beibehalten!)
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


# BDB Datenbankdefinition

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
(Fügen sie Folgendes hinzu...)

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

# Beachten Sie, dass wir cn=config hier nicht benutzen, also bleiben Sie bei dieser Zeile:
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

# Beachten Sie, dass Sie diese nur hinzufügen. Löschen Sie nichts oder Ihr Rechner lässt Sie sich nicht mehr einloggen!

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

# Beispieldatei:
#%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

#host 127.0.0.1
#base dc=padl,dc=com

suffix          "dc=genfic,dc=com"
#rootbinddn uid=root,ou=People,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

(Ersetzen Sie ldap-server durrch Ihren LDAP-Servername)
# 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

(Sie sollten zwei Einträge zurückbekommen:)
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



Drucken

Seite aktualisiert 22. Februar 2010

Die Originalversion dieses Dokuments wurde zuletzt am 15. August 2011 aktualisiert

Zusammenfassung: Dieser Leitfaden stellt die Grundlagen von LDAP vor und zeigt Ihnen, wie Sie OpenLDAP für Authentifizierungszwecke zwischen einer Gruppe von Gentoo-Rechnern installieren.

Benjamin Coles
Autor

Sven Vermeulen
Bearbeiter

Brandon Hale
Bearbeiter

Benny Chuang
Bearbeiter

Markus Ullmann
Bearbeiter

Joshua Saddler
Bearbeiter

Tobias Heinlein
Übersetzer

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.