Debian LDAP
Allgemein
Mittels LDAP (Lightweigh Directory Access Protocol) können User-Informationen in einer zentralen, hierarchischen Datenbank abgelegt werden, die unter anderem Netzwerkweit zur User-Authentifizierung verwendet werden kann. Dadurch müssen einzelne User nur einmalig angelegt und gepflegt werden und stehen auf allen mit dem LDAP-Server verbundenen Systemen zur Verfügung. Die Userinformationen können nicht nur zur Userauthentifizierung für die Linux-Shell, sondern auch für zahlreiche weitere Dienste wie Email, FTP, Webserver, Groupware, usw. verwendet werden.
In der LDAP Datenbank werden die Daten hierarchisch in Baumform angelegt.
- Die Basis (dn: Distinguished Name) des LDAP Directories wird üblicherweise vom Domainnamen abgeleitet. Z.B. die Domain test.homelinux.org wird in LDAP folgendermaßen abgebildet: LDAP_Base: dc=test,dc=homelinux,dc=org.
- Elemente darunter könnten z.B. User (People) und Gruppen (Groups) sein, in denen die jeweiligen Linux-User und Gruppen definiert werden. Diese sog. Organizational Units (ou) werden folgendermaßen in LDAP abgebildet: ou=People,dc=test,dc=homelinux,dc=org.
- Ein User Tux könnte dann z.B. folgendermaßen angesprochen werden: uid=tux,ou=People,dc=test,dc=homelinux,dc=org.
- Es können aber auch noch deutlich mehr Ebenen abgebildet werden.
LDAP Server Installation
Installation der Pakete
apt-get install slapd ldap-utils
Folgende Informationen eingeben:
- Administrator password: LDAP_ADMIN_PWD
- Confirm password: LDAP_ADMIN_PWD
Konfiguration
vi /etc/ldap/ldap.conf
Folgende Einstellungen vornehmen:
URI ldap://IP_DES_SERVER BASE LDAP_Base z.B. dc=test,dc=homelinux,dc=org
Informationen werden mit Hilfe von .ldif Files in's LDAP Directory übertragen. Es ist empfehlenswert diese Files zentral in einem eigenen Unterverzeichnis zu verwalten, wobei die Files nach dem Import in die LDAP Datenbank eigentlich gar nicht mehr benötigt werden.
mkdir /root/ldap_ldif
Mit Hilfe von Indizes kann die Suche im LDAP Directory beschleunigt werden.
vi /root/ldap_ldif/index.ldif
Folgende Zeilen einfügen (ohne zusätzliche Leerzeilen zwischen den Informationen):
dn: olcDatabase={1}hdb,cn=config changetype: modify add: olcDbIndex olcDbIndex: uid eq - add: olcDbIndex olcDbIndex: cn eq - add: olcDbIndex olcDbIndex: ou eq - add: olcDbIndex olcDbIndex: dc eq - add: olcDbIndex olcDbIndex: memberUid eq - add: olcDbIndex olcDbIndex: member eq - add: olcDbIndex olcDbIndex: gidNumber eq
Die Informationen ins LDAP Directory übernehmen:
ldapmodify -QY EXTERNAL -H ldapi:/// -f /root/ldap_ldif/index.ldif
Üblicherweise werden User und Gruppen in Organisational Units (ou) innerhalb von LDAP verwaltet. Um die Units anzulegen, folgendermaßen vorgehen:
vi /root/ldap_ldif/tree.ldif
Folgende Zeilen einfügen (incl. Leezeile zwischen people und groups OU):
dn: ou=people,dc=test,dc=homelinux,dc=org ou: people objectClass: organizationalUnit dn: ou=groups,dc=test,dc=homelinux,dc=org ou: groups objectClass: organizationalUnit
Die Informationen ins LDAP Directory übernehmen:
ldapadd -cxWD cn=admin,dc=test,dc=homelinux,dc=org -f /root/ldap_ldif/tree.ldif
Loglevel
Standardmäßig konfiguriert Debian LDAP, sodass keine Logausgaben erfolgen. Zur Fehlersuche sind aber Loginforamtionen meist sehr hilfreich. Evtl. Logausgaben werden im Syslog (/var/log/syslog) ausgegeben. Loginformationen können folgendermaßen ein- und ach wieder deaktiviert werden:
vi /root/ldap_ldif/loglevel.ldif
Logausgaben aktivieren:
Folgende Zeilen einfügen:
dn: cn=config changetype: modify replace: olcLogLevel olcLogLevel: stats
Logausgaben deaktivieren:
Folgende Zeilen einfügen:
dn: cn=config changetype: modify replace: olcLogLevel olcLogLevel: none
Die Informationen ins LDAP Directory übernehmen:
ldapmodify -QY EXTERNAL -H ldapi:/// -f /root/ldap_ldif/loglevel.ldif
Funktionstest Server
Mit dem Befehl slapcat werden zahlreiche Informationen des LDAP-Directories ausgegeben.
slapcat
Die Ausgabe könnte folgendermaßen aussehen:
dn: dc=test,dc=homelinux,dc=org objectClass: top objectClass: dcObject objectClass: organization o: test.homelinux.org dc: test structuralObjectClass: organization entryUUID: 95bcb4b4-9eab-1031-9b24-5d17a552c400 creatorsName: cn=admin,dc=test,dc=homelinux,dc=org createTimestamp: 20120929180232Z entryCSN: 20120929180232.259042Z#000000#000#000000 modifiersName: cn=admin,dc=test,dc=homelinux,dc=org ...
Directory durchsuchen:
ldapsearch -xLLL
Die Ausgabe könnte folgendermaßen aussehen:
dn: dc=test,dc=homelinux,dc=org objectClass: top objectClass: dcObject objectClass: organization o: test.homelinux.org dc: test dn: cn=admin,dc=test,dc=homelinux,dc=org objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator dn: ou=people,dc=test,dc=homelinux,dc=org ou: people objectClass: organizationalUnit dn: ou=groups,dc=test,dc=homelinux,dc=org ou: groups objectClass: organizationalUnit
User und Gruppen anlegen
Gruppe
Um eine Gruppe GROUP mit der ID GID anzulegen folgendermaßen vorgehen (GROUP und ID müssen eindeutig sein):
vi /root/ldap_ldif/group.ldif
Folgende Zeilen einfügen und anpassen:
dn: cn=GROUP,ou=groups,dc=test,dc=homelinux,dc=org cn: GROUP gidNumber: GID objectClass: top objectClass: posixGroup
ldapadd -cxWD cn=admin,dc=test,dc=homelinux,dc=org -f /root/ldap_ldif/group.ldif
User
Um einen User USER mit der ID UID, der zur Gruppe mit ID GID gehört, folgendermaßen vorgehen (USER, GROUP und ID müssen eindeutig sein):
vi /root/ldap_ldif/user.ldif
Folgende Zeilen einfügen und anpassen:
dn: uid=USER,ou=people,dc=test,dc=homelinux,dc=org uid: ccolumbus uidNumber: UID gidNumber: GID cn: Christopher sn: Columbus objectClass: top objectClass: inetOrgPerson objectClass: person objectClass: posixAccount objectClass: shadowAccount loginShell: /bin/bash homeDirectory: /home/USER
ldapadd -cxWD cn=admin,dc=test,dc=homelinux,dc=org -f /root/ldap_ldif/ueser.ldif
Passwort für den User USER vergeben:
ldappasswd -x -D cn=admin,dc=test,dc=hoemlinux,dc=org -W -S uid=USER,ou=people,dc=test,dc=homelinux,dc=org
Optional: SSL Verschlüsselung serverseitig akzeptieren
Die Übertragung der LDAP-Daten (z.B. User und Passwort-Hashes) kann mittels SSL-Vershlüsselung abgesichert werden.
Voraussetzung: CA-Root Zertifikat (cacert.pem) und Keyfile (ldap-server.key) und Serverzertifikat (ldap-server-cert.pem), das die IP-Adresse oder den Hostnamen des LDAP-Serers enthält. Diese evtl. erst erstellen (siehe hier: Debian_OpenSSL).
Zertifikate ablegen
Zertifikate in die entsprechenden Ordner kopieren:
mkdir /etc/ldap/ssl cp /etc/ssl/CA/cacert.pem /etc/ldap/ssl cp /etc/ssl/CA/keys/ldap-server.key /etc/ldap/ssl cp /etc/ssl/CA/certs/ldap-server-cert.pem /etc/ldap/ssl chown -R root:openldap /etc/ldap/ssl chmod -R o-rwx /etc/ldap/ssl
Konfiguration
OpenLDAP ldif-File erstellen:
vi /root/ldap_ldif/tls.ldif
Folgende Zeilen einfügen:
dn: cn=config add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/ldap/ssl/cacert.pem - add: olcTLSCertificateFile olcTLSCertificateFile: /etc/ldap/ssl/ldap-server-cert.pem - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ldap/ssl/ldap-server.key
TLS-Konfiguration ins LDAP Directory einbinden:
ldapmodify -QY EXTERNAL -H ldapi:/// -f /root/ldap_ldif/tls.ldif
SSL aktivieren (ldaps://):
vi /etc/default/slapd
Die Zeile
SLAPD_SERVICES="ldap:/// ldapi:///"
folgendermaßen erweitern:
SLAPD_SERVICES="ldap:/// ldaps:/// ldapi:///"
LDAP-Konfig-File:
vi /etc/ldap/ldap.conf
Folgende Einstellungen vornehmen:
URI ldaps://IP_DES_SERVER BASE LDAP_Base z.B. dc=test,dc=homelinux,dc=org TLS_CACERT /etc/ldap/ssl/cacert.pem TLS_REQCERT never
OpenLDAP neu starten:
/etc/init.d/slapd restart
Funktionstest Server SSL
ldapsearch -xLLL
Ausgaben analog zu LDAP Funktionscheck
Optional: Grafisches Usser Account Admin Tool
Im folgenden wird der LDAP Acccount Manager (LAM) näher beschrieben, mit dessen Hilfe Linux User/Gruppen, Samba User Details usw. auf relativ einfache Art-und Weise grafisch im Webbrowser administriert werden können. Dies ist erheblich einfacher und weniger fehleranfällig, als oben beschriebene Vorgehensweise mittels .lidif File.
Hinweis: | |
Der LDAP Account Manager kann, muss aber nicht zwingend auf dem selben Server installiert werden, wie der LDAP-Server. |
Installation
apt-get install ldap-account-manager
Konfiguration
- Webbrowser öffnen und http://IP_DES_SERVER/lam eingeben
General Settings
- Links oben auf den Link LAM configuration" klicken
- Edit general settings anwählen
- Passwort eingeben (LAM_MASTER_PWD Standardmäßig nach der Installation: lam)
- Hier können je nach Bedarf eingie Einstellungen vorgenommen werden:
- Session Timeout: Nach längerer Inaktivität (Session Timeout in Minuten) muss das Passwort erneut eingegeben werden.
- Allowed Hosts: Zugriffsbeschränkung auf bestimmte IP-Adressen/Hosts
- Password Policy: Beschränkungen für Passwörter.
- Logging: Falls Probleme mit LAM auftauchen kann es evtl. hilfreich sein, den Loglevel zu erhöhen (z.B. auf Debug), um mehr Hinweise zu erhalten
- Es kann auch hilfreich sein, die Logausgaben in ein eigenes File (z.B. /var/log/lam.log) ausgeben zu lassen. Dieses muss mit touch /var/log/lam.log angelegt und die Zugriffsrechte mit chmod 777 /var/log/lam.log erhöht werden.
- Change master Password (LAM_MASTER_PWD): Setzt ein neues Masterpasswort, das den Zugriff auf die LAM-Settings schützt (nicht das Zugriffspasswort auf das LDAP Directory).
- Nachdem alle Einstellungen vorgenommen sind, den Button Ok anklicken
- Anschließend kehrt LAM zum Login-Bildschirm rurück
Server Profiles
- Links oben auf den Link LAM configuration" klicken
- Edit server profiles anwählen
- Passwort eingeben (LAM_MASTER_PWD)
- General Settings
- Server Adress: ldap://localhost:389 bzw. ldaps://localhost falls SSL-Verschlüsselung eingerichtet ist. Falls der LDAP-Server nicht auf dem selben Server läuft, entsprechend die IP-Adresse bzw. Hostname des LDAP-Servers eintragen.
- Activate TLS: Sollte nicht zusammen mit ldaps:// (Port 636) verwendet werden, da dieses Protokoll bereits SSL-verschlüsselt ist. TLS kann zusammen mit ldap:// (Port 389)verwendet werden, wenn die voraussetzungen für SSL gegeben sind.
- Tree suffis: LDAP_Base z.B. dc=test,dc=homelinux,dc=org
- Default language: Hier kann die Sprache auf Deutsch umgestellt werden. Im folgenden werden trotzdem die englischen Begriffe verwendet.
- list of Valid Users: cn=admin,LDAP_Base z.B. cn=admin,dc=test,dc=homelinux,dc=org
- Account Types
- Users LDAP suffix: ou=people,LDAP_Base z.B. ou=people,dc=test,dc=homelinux,dc=org
- Grups LDAP suffix: ou=groups,LDAP_Base z.B. ou=groups,dc=test,dc=homelinux,dc=org
- Hosts LDAP suffix: ou=computers,LDAP_Base z.B. ou=computers,dc=test,dc=homelinux,dc=org
- Samba Domains LDAP suffix: LDAP_Base z.B. dc=test,dc=homelinux,dc=org
- Modules
- Es sollten nur diejenigen Module aktiviert werden, die auch installiert und für LDAP eingerichtet sind (z.B. Samba), da es ansosten zu Fehlern beim Anlegen bzw. Ändern von Accounts kommt.
- Module Settings
- Minimale und maximale Grenzen für UID und GID Einträge evtl. anpassen.
- Mit Save sämtliche Änderungen übernehmen
LDAP Login
- Webbrowser öffnen und http://IP_DES_SERVER/lam eingeben
- Passwort des LDAP-Adimin Unsers (LDAP_ADMIN_PWD) eingeben.
- Button Login anklicken
Hinweis: | |
Falls eine Org-Einheit im LDAP fehlen sollte, erscheint ein Hinweis, um den entsprechenden ou-Eintrag zu erzeugen. |
Die weitere Bedienung sollte selbsterklärend sein.
Client Installation
Installation der Pakete
apt-get install libnss-ldap nscd
Folgende Fragen beantworten:
- LDAP Server URI: ldap://IP_DES_LDAP_SERVER (LDAP SSL) (ldapi:// nur verwenden, wenn Client und Server auf dem selben System laufen, da ldapi nur lokal via Unix-Socket und nicht via Netzwerk funktioniert)
- Distinguished name of the search base: LDAP_BASE z.B. dc=test,dc=homelinux,dc=org
- LDAP Version: 3
- LDAP account for root: cn=admin,dc=test,dc=homelinux,dc=org
- LDAP root account password: LDAP_ADMIN_PWD
- Allow LDAP admin account to behave like local root: yes
- Does the LDAP Database require login: no
- LDAP administrative account: cn=admin,dc=test,dc=homelinux,dc=org
- LDAP administrative Password: LDAP_root_PWD
Konfiguration
vi /etc/nsswitch.conf
ldap in folgenden Einträgen ergänzen:
passwd: compat ldap group: compat ldap shadow: compat ldap
In der Standard Debian6 Konfiguration kann der User sein Passwort nicht ändern. Um dies zu ermöglichen, muss folgende Änderung durchgeführt werden:
vi /etc/pam.d/common-password
In folgender Zeile use_authtok löschen:
password [success=1 user_unknown=ignore default=die] pam_ldap.so use_authtok try_first_pass
Die Zeile sollte dann folgendermaßen aussehen:
password [success=1 user_unknown=ignore default=die] pam_ldap.so try_first_pass
Standardmäßig werden User und Gruppen von der Basis aus gesucht. Die Suche kann etwas beschleunigt werden, wenn User automatisch in der OU=people und die Gruppen in der OU=groups gesucht werden. Dazu müssen folgende Änderungen in den Konfigfiles /etc/libnss-ldap.conf und /etc/pam_ldap.conf durchgeführt werden.
vi /etc/libnss-ldap.conf
Folgende Änderungen durchführen:
nss_base_passwd ou=people,dc=test,dc=homelinux,dc=org?one nss_base_shadow ou=people,dc=test,dc=homelinux,dc=org?one nss_base_group ou=groups,dc=test,dc=homelinux,dc=org?one
vi /etc/pam_ldap.conf
Folgende Änderungen durchführen:
nss_base_passwd ou=people,dc=test,dc=homelinux,dc=org?one nss_base_shadow ou=people,dc=test,dc=homelinux,dc=org?one nss_base_group ou=groups,dc=test,dc=homelinux,dc=org?one
Funktionstest Client
Voraussetzung:
- User (LDAP_USER) im LDAP-Server angelegt.
- Der User sollte nicht lokal angelegt sein, da ansonsten die Informationen aus /etc/passwd und /etc/groups ausgegeben werden.
Der Daemon nscd, der Login- und Userinformationen cached sollte während der funktionschecks deaktiviert werden, um sicherzustellen, dass tatsächlich die Anfragen an den LDAP-Server gerichtet und von dort beantwortet werden.
/etc/init.d/nscd stop
id ldap_user
Es sollten Infos wie UserID, GroupID und Gruppenzugehörigkeit zum User ausgegeben werden. Falls der User im LDAP Directory nicht existiert bzw. Konfigurationsfehler im LDAP-Server bzw. Client vorliegen, wird "No such user" ausgegeben
Wenn der User Loginberechtigt ist, dann via ssh mit Usernamen und Passwort versuchen sich einzuloggen. Falls alles korrekt funktioniert, sollte der Login möglich sein.
Waren die Funktionschecks erfolgreich empfiehlt es sich den Cache Daemon nscd wieder zu starten, um den LDAP-Server von Anfragen zu entlasten.
/etc/init.d/nscd start
Funktionstest wiederholen, um sicherzustellen, dass auch der nscd Daemon korrekt arbeitet.
User migrieren
Clientseitig können User, die in /etc/passwd eingetragen sind und solche, die via LDAP authorisiert werden, beliebig gemischt werden. Es sollte jedoch vermieden werden, dass User sowohl in /etc/passwd als auch via LDAP verfügbar sind. Selbes gilt für Gruppen (/etc/groups).
User, die bisher lokal verfügbar waren (via /etc/passwd) und auf LDAP migriert werden sollen, haben höchst wahrscheinlich unterschiedliche User ID. Selbes gilt für die Gruppen ID's. Um die ID's anzupassen folgendermaßen vorgehen:
- UID_ALT : User ID aus /etc/passwd
- UID_LDAP: LDAP User ID
- GID_ALT: Gruppen ID aus /etc/passwd
- GID_LDAP: LDAP Gruppen ID.
z.B. /etc/passwd
tux:x:1001:2002:,,,:/home/tux:/bin/bash UID_LDAP=2000 GID_DAP=3000
=> UID_ALT=1001 => GID_ALT=2002
Eigentümerrechte der Files anpassen:
find / -uid UID_ALT -exec chown UID_LDAP {} \; find / -gid GID_ALT -exec chgrp GID_LDAP {} \;
z.B.
find / -uid 1001 -exec chown 2000 {} \; find / -gid 2002 -exec chgrp 3000 {} \;
User in /etc/passwd deaktiveren:
vi /etc/passwd
Kommentarzeichen vor den User tux setzen:
#tux:x:1001:2002:,,,:/home/tux:/bin/bash
Optional: SSL-Verschlüsselung
Um die Client-Anfragen auf SSL umzustellen, folgendermaßen vorgehen:
CA Root Zertifikat (cacert.pem) auf dem Client ablegen z.B. im Verzeichnis /etc/ssl/certs oder /etc/ssl/CA/ oder /etc/ldap/ssl/ (CACERT_DIR).
Zugriffsrechte anpassen:
chmod 751 CACERT_DIR chmod 644 CACERT_DIR/cacert.pem
vi /etc/ldap/ldap.conf
Folgende Änderungen durchführen:
URI ldaps://IP_DES_SERVER BASE LDAP_Base z.B. dc=test,dc=homelinux,dc=org TLS_CACERT CACERT_DIR/cacert.pem TLS_REQCERT never
vi /etc/libnss-ldap.conf
Die URI abändern:
uri ldaps://IP_DES_SERVER
Und die selbe Änderung in folgendem File
vi /etc/pam-ldap.conf
Die URI abändern:
uri ldaps://IP_DES_SERVER
Funktionstest siehe Funktionstest Client