LDAP Server

Falls der LDAP-Daemon nicht automatisch startet:

update-rc.d slapd defaults

Verzeichnis vorbereiten

Um einen Eintrag manuell zu erstellen, verwendet man bequemerweise einen LDAP-Browser, wie phpLDAPadmin (Installation siehe unten).

Wenn bei der Installation des LDAP-Servers keine andersweitigen Angaben gemacht wurden, so existiert im Verzeichnis als root der Eintrag dc=localdomain und darunter cn=admin. Wir werden cn=admin,dc=localdomain als LDAP-Administrator verwenden.

Auf der obersten Ebene, unterhalb der dc’s, erzeugen wir folgende ‘Organisation Units’:

ou=aliases
ou=computers
ou=domain
ou=groups
ou=people
ou=sambaGroups

NSSwitch und PAM konfigurieren

Mit dem nsswitch können wir dem System mitteilen, dass Benutzerdaten nicht nur aus den Dateien /etc/passwd, /etc/shadow und /etc/group kommen, sondern zusätzlich auch auf dem LDAP-Server nachgeschaut werden muss. Mit pam_ldap lassen sich die Benutzer über den LDAP-Server authentisieren.

Leider haben sich die Jungs von Debian wieder eine kleine Änderung einfallen lassen. Anstelle der gemeinsamen Datei /etc/ldap.conf, verwenden die beiden Module /etc/pam_ldap.conf und /etc/libnss-ldap.conf. Es muss unbedingt darauf geachtet werden. dass die entsprechenden Einträge nicht in der falschen Datei vorhanden sind.

Falls die Datei /lib/security/pam_ldap.so nicht existiert:

apt-get install libpam-ldap libnss-ldap

pam.d

Im Verzeichnis /etc/pam.d befinden sich die Konfigurationsdateien für die einzelnen Dienste welche PAM verwenden. Für uns interessant sind im Moment:

imap, pop, smtp, sieve - für den Mailserver
login, ssh - für die Konsole
corvent - für Webapplikationen
proftpd - für den FTP-Server (dieser hat die LDAP Unterstützung integriert)

Um die Sache zu vereinfachen gibt es unter Debian folgende Dateien, welche von den Konfigurtionsdateien nachgeladen werden:

common-auth, common-account, common-session, common-password

Wir können diese Dateien verwenden oder die entsprechenden Abschnitte direkt in die einzelnen Dienstdateien kopieren.

auth sufficient pam_ldap.so
auth required pam_unix.so nullok_secure try_first_pass

account         sufficient      pam_ldap.so
account         required        pam_unix.so try_first_pass

session         sufficient      pam_ldap.so
session         required        pam_unix.so try_first_pass

password   sufficient pam_ldap.so
password   sufficient pam_unix.so try_first_pass nullok obscure min=4 max=8 md5

Bei Verwendenung der common-Dateien sieht eine entsprechende Datei wie folgt aus:

# Standard Un*x authentication.
@include common-auth

# Standard Un*x authorization.
@include common-account

# Standard Un*x session setup and teardown.
@include common-session

Ohne diese Unterstützung müssen die Abschnitte in jede Datei eingefügt werden, welche über LDAP laufen soll. z.B.:

imap
auth    sufficient      pam_ldap.so
auth    required        pam_smb_auth.so use_first_pass
account required        pam_permit.so

oder nur LDAP:
auth    required        pam_ldap.so
account required        pam_ldap.so

pam_ldap.conf

ldap_version 3
base    dc=nodomain
host    127.0.0.1

#wird nur benötigt, wenn die passwörter geändertet werden sollen.
#rootbinddn cn=admin,dc=nodomain

pam_login_attribute     uid
pam_filter              objectclass=posixAccount

libnss-ldap.conf

ldap_version 3
base    dc=localdomain
host    127.0.0.1

#wird nur benötigt, wenn die passwörter geändertet werden sollen.
#rootbinddn cn=admin,dc=nodomain

nss_base_passwd ou=people,dc=localdomain?one
nss_base_shadow ou=people,dc=localdomain?one
nss_base_group  ou=groups,dc=localdomain?one

pam_login_attribute     uid
pam_filter              objectclass=posixAccount

ldap.secret

Falls über PAM auch Passwörter geändert werden sollen, so muss in /etc/ldap.secret das Passwort für den Zugriff auf LDAP plain abgespeichert werden. Die Datei darf nur für root lesbar sein.

nsswitch.conf

passwd:         files ldap
group:          files ldap
shadow:         files ldap

hosts:          files dns
...

Der Abschnitt für die Hosteinträge habe ich noch nicht verifiziert.

Benutzer und Gruppen auf LDAP übertragen

Bestehende Benutzer in /etc/passwd und /etc/shadow haben weiterhin zugriff. Damit es nicht zu einem Durcheinander kommt, sollten alle Benutzer aus diesen Dateien auf den LDAP-Server übertragen werden und danach aus den Datei gelöscht werden.

Systembenutzer wie cyrus, root, www-data etc. nicht verschieben.

Damit das automatisch geht, gibt es von padl Migrations-Skripts.

Manuelle übertragen

Wähle ‘Neuen Eintrag hinzufügen’ und erzeuge ein User Account.

ToDo

3. Mailserver
-------------
Für Cyrus müssen nur die entsprechenden Dateien im Verzeichnis /etc/pam.d angepasst werden.

3.1. Postfix
------------


3.1.1 LDAP-Server vorbereiten
-----------------------------
Für den Postfixserver verwenden wir einen eigenen Schematyp. Das müsste nicht sein, da Postfix mit allen Spalten entsprechend verbunden werden kann, aber es entstehen dann ziemlich unsaubere Einträge im LDAP. Die Schemadatei stammt ursprünglich vom qmail.schema und  wurde von mir entsprechend angepasst und verändert:

/etc/ldap/schema/mail.schema
----------------------------
attributetype ( 1.3.6.1.4.1.7914.1.2.1.4 NAME 'mailAlternateAddress'
 DESC 'Secondary (alias) mailaddresses for the same user'
 EQUALITY caseIgnoreIA5Match
 SUBSTR caseIgnoreIA5SubstringsMatch
 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )

attributetype ( 1.3.6.1.4.1.7914.1.2.1.5 NAME 'mailDrop'
        DESC 'Where to drop or send the message'
        EQUALITY caseIgnoreIA5Match
        SUBSTR caseIgnoreIA5SubstringsMatch
        SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 SINGLE-VALUE )

attributetype ( 1.3.6.1.4.1.7914.1.2.1.7 NAME 'mailForwardingAddress'
 DESC 'Address(es) to forward all incoming messages to.'
 EQUALITY caseIgnoreIA5Match
 SUBSTR caseIgnoreIA5SubstringsMatch
 SYNTAX 1.3.6.1.4.1.1466.115.121.1.26{256} )

# Object Class Definitions

objectclass ( 1.3.6.1.4.1.7914.1.2.2.1 NAME 'mailUser'
 DESC 'Mail-LDAP User'
 SUP top
 AUXILIARY
 MUST ( cn $ mail )
 MAY ( uid $ userPassword $ mailAlternateAddress $
       mailForwardingAddress $ mailDrop ) )

Um das Schema verwenden zu können muss in der Datei /etc/ldap/slapd.conf die Schemadatei hinzugefügt werden.

include         /etc/ldap/schema/mail.schema

Danach muss der LDAP-Server neu gestartet werden. (phpLDAPadmin bekommt Schemaänderungen nur mit, wenn das Browserfenster zwischendurch geschlossen wurde)
3.1.2 Postfix konfiguriern
--------------------------

apt-get install postfix-ldap

Installiert das Postfix-LDAP-Modul, ohne dieses ist Postfix nicht fähig mit dem LDAP-Server zu komunizieren.

Damit keine 'anything'-Einträge in der Virtualtable mehr gemacht werden müssen, fügen wir in /etc/postfix/main.cf folgende Zeile hinzu:

virtual_alias_domains = ldap:/etc/postfix/ldap-domain.cf

Für die Virtualtable, ersetzen wir die Zeile

virtual_alias_maps = hash:/etc/postfix/virtual

mit

virtual_alias_maps = ldap:/etc/postfix/ldap-virtual.cf

Es kann natürlich auch die Aliastable in den LDAP-Server verschoben werden.

alias_maps = ldap:/etc/postfix/ldap-aliases.cf

Die Konfigurationsdateien für die entsprechenden Zugriffe können auch anders benannt werden.

ldap-domain.cf
--------------
server_host = localhost
version = 3
search_base = ou=domain,dc=nodomain
#query_filter = (associatedDomain=%s)
#result_attribute = associatedDomain
query_filter = (dnsDomain=%s)
result_attribute = dc

ldap-virtual.cf
---------------
server_host = localhost
version = 3
search_base = ou=people,dc=nodomain
query_filter = (|(mail=%s)(mailAlternateAddress=%s))
result_attribute = uid, mailDrop, mailForwardingAddress

3.1.3 Mailkonten hinzufügen
---------------------------
Im Abschnitt ou=people,dc=nodomain können die entsprechenden Zuweisungen vorgenommen werden. Für bestehende Benutzer muss lediglich die Objektlasse mailUser und das Attribut mail hinzugefügt werden. Für einen neuen Benutzer benötigt man folgende Klassen:

person, mailUser, posixAccount

Wenn die Mails nur weitergeleitet werden müssen, also keine Authentisierung für Cyrus stattfindet, kann posixAccount weggelassen werden.

3.1.4 Domäne hinzufügen
-----------------------

Für Maildomänen ist der Abschnitt ou=domain,dc=nodomain vorgesehen. Für eine Domäne, wird nur die Klasse dnsDomain benötigt.



4. Samba auf LDAP migrieren
------------------------

Vor dem migrieren die SID mit dem Befehl "net getlocalsid" notieren, es kann sein, dass sich nach der Umstellung die SID geändert hat, oder dies nicht mehr vorhanden ist.

4.1 LDAP-Server vorbereiten
---------------------------

Auch Samba benötigt eigene Schemas. Diese befinden sich im Paket samba-doc. Nach der Installation kann man sie wie folgt an kopieren:

cp /usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz /tmp
gunzip /tmp/samba.schema.gz
mv /tmp/samba.schema /etc/ldap/schema/

Die Schemadatei muss auch in /etc/ldap/slapd.conf eingetragen werden:

include         /etc/ldap/schema/samba.schema

Danach muss der LDAP-Server neu gestartet werden. (phpLDAPadmin bekommt Schemaänderungen nur mit, wenn das Browserfenster zwischendurch geschlossen wurde)


Unter /usr/share/doc/samba-doc/examples/LDAP/smbldap-tools finden Sich noch zahlreiche tools zum migrieren.

4.2 Samba für LDAP konfigurieren
--------------------------------

In der Datei /etc/samba/smb.conf folgende Zeile

passdb backend = smbpasswd:/etc/samba/smbpasswd

mit diesem Abschnitt ersetzen:

passdb backend = ldapsam:ldap://localhost
ldap admin dn = "cn=admin,dc=nodomain"
ldap delete dn = no
ldap passwd sync = Yes
ldap suffix = dc=nodomain
ldap user suffix = ou=people
ldap group suffix = ou=sambagroups
ldap machine suffix = ou=computers


Samba neu starten: /etc/init.d/samba restart
Damit Samba auf den LDAP-Server zugreifen kann, muss ein LDAP-Passwort angegeben werden:
smbpasswd -w secret

4.3. Benutzer- und Maschinen-Konten übertragen
----------------------------------------------

pdbedit -i smbpasswd:/etc/smbpasswd

Überträgt sämtliche Benutzer- und Maschinen-konten auf den LDAP-Server.

Allerdings sollten die Einträge noch aus den Dateien /etc/passwd und /etc/shadow gelöscht werden.


4.4. Probleme
-------------

Falls nach der Umstellung auf LDAP die SID fehlt:

net setlocalsid <SID>

Neue SID erstellen:
-------------------
stop smbd, nmbd, winbindd
rm secrets.tdb and sambaDomain object
restart smbd and you will have a new domain sid

Groupmapping
------------

Nach der Umstellung überprüfen, ob die Windowsgruppen noch vorhanden sind:

net groupmap list

net groupmap add rid=512 ntgroup="Domain Admins" unixgroup=domadm

#net groupmap add rid=513 ntgroup="Domain Users" unixgroup=-1
#net groupmap add rid=514 ntgroup="Domain Users" unixgroup=-1

Domain Admins -> Domänen Administratoren
Domain Users -> Domänen Benutzer
Domain Guests -> Domänen Gäste


5. phpLDAPadmin
---------------

runterladen von Sourceforge

mv config.php.example config.php

folgende zeilen anpassen:

$servers[$i]['host'] = 'localhost';
$servers[$i]['base'] = 'dc=nodomain';
$servers[$i]['auth_type'] = 'cookie';
$servers[$i]['login_dn'] = 'cn=admin,dc=nodomain';


http://debian.home-dn.net/sarge/smbldap-tools/smbldap-tools_0.8.4-1_all.deb
http://www.mami.net/univr/tng-ldap/howto/mkntpwd

Das war's...

 
linux/ldap.txt · Zuletzt geändert: 10.11.2005 21:14 von tangst