Falls der LDAP-Daemon nicht automatisch startet:
update-rc.d slapd defaults
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
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
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
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
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
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.
passwd: files ldap group: files ldap shadow: files ldap hosts: files dns ...
Der Abschnitt für die Hosteinträge habe ich noch nicht verifiziert.
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.
Wähle ‘Neuen Eintrag hinzufügen’ und erzeuge ein User Account.
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...