Debian LDAP: Unterschied zwischen den Versionen
Erich (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Erich (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
Zeile 321: | Zeile 321: | ||
vi /usr/local/bin/backup_ldap.sh | vi /usr/local/bin/backup_ldap.sh | ||
Folgende Zeilen einfügen ('''DIT_SUFFIX''' anpassen und mit '''LDAP_BASE''' ersetzen): | Folgende Zeilen einfügen ('''DIT_SUFFIX''' anpassen und mit '''LDAP_BASE''' ersetzen; evtl. Backup Verzeichnis '''BACKUP_DIR''' anpassen): | ||
#!/bin/sh | #!/bin/sh | ||
Version vom 6. Mai 2013, 20:03 Uhr
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 User 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.
Installation
Debian Repository
LDAP Account Manager ist in den Debian-Repositories enthalten. Die Version ist allerdings bereits etwas älter, sodass nicht alle Features zur Verfügung stehen.
apt-get install ldap-account-manager
Debian Paket Download und Installation
Neben obiger Version aus den Debian Repositories, kann die jeweils aktuelle stabile Version auch als Debian Paket heruntergeladen und installiert werden. Diese Vorgehensweise ist nur geringfügig aufwändiger als obiges Vorgehen.
cd /usr/local/src wget http://sourceforge.net/projects/lam/files/LAM/4.0.1/ldap-account-manager_4.0.1-1_all.deb apt-get install php5-ldap php-fpdf php5-gd dpkg -i ldap-account-manager_4.0.1-1_all.deb
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.
Backup und Restore
Backup Script
Hier wird ein Backup-Script vorgestellt, das das komplette LDAP Directory incl. sämtlicher Konfig- und Zertifikate-Files sichert. Das Script stammt von folgender Seite: http://itdavid.blogspot.ca/2012/05/howto-openldap-24-backup-recovery-on.html.
vi /usr/local/bin/backup_ldap.sh
Folgende Zeilen einfügen (DIT_SUFFIX anpassen und mit LDAP_BASE ersetzen; evtl. Backup Verzeichnis BACKUP_DIR anpassen):
#!/bin/sh # Backup the OpenLDAP data and configuration as compressed LDIF files. # Also backup the entire OpenLDAP directory and daemon configuration. # # David Robillard, April 23rd, 2012. umask 022 PATH="/bin:/usr/bin:/usr/local/bin:/sbin:/usr/sbin:/usr/local/sbin" export PATH DATE=`date +%Y%m%d` BACKUP_DIR="/home/shares/backup/openldap" BACKUP_DATA_FILENAME="slapd.data.${DATE}.ldif" BACKUP_CONFIG_FILENAME="slapd.config.${DATE}.ldif" BACKUP_TAR_FILENAME="slapd.directory.${DATE}.tar.gz" CA_TLS_CERT="/etc/ldap/ssl/cacert.pem" DIT_CONFIG="cn=config" DIT_SUFFIX="dc=test,dc=homelinux,dc=org" SLAPD_CONFIG_FILENAME="/etc/ldap/ldap.conf" SLAPD_DIR="/etc/ldap" SLAPD_LOG_ROTATION="" SLAPD_TLS_CERT="/etc/ldap/ssl/ldap-server-cert.pem" SLAPD_TLS_KEY="/etc/ldap/ssl/ldap-server.key" SLAPCAT_OPTIONS="-F /etc/ldap/slapd.d" LOGFILE="/var/log/slapd_backup.log" KEEP="30" # Make sure we have a log file. if [ ! -f ${LOGFILE} ]; then touch ${LOGFILE} if [ "$?" -ne "0" ]; then echo "ERROR: could not create the log file." exit 1 fi fi # Check if root is running this script. if [ `id -u` -ne "0" ]; then echo "ERROR: only root can run this script." | tee -a ${LOGFILE} exit 1 fi # Make sure we have a backup directory. if [ ! -d ${BACKUP_DIR} ]; then mkdir -p ${BACKUP_DIR} if [ "$?" -ne "0" ]; then echo "ERROR: could not create the backup directory." | tee -a ${LOGFILE} exit 1 fi fi # Make sure we don't have too much backup files piling up in our backup directory. FILES=`find ${BACKUP_DIR} -type f -name "slapd.*" -print | wc -l` if [ "${FILES}" -gt "${KEEP}" ]; then OVER=`echo ${FILES}-${KEEP} | bc` RMFILES=`find ${BACKUP_DIR} -type f -name "slapd.*" -print | sort -r | tail -${OVER}` echo "NOTE: removing ${RMFILES} from the backup directory." >> ${LOGFILE} rm ${RMFILES} fi # Backup the DIT data. slapcat ${SLAPCAT_OPTIONS} -b ${DIT_SUFFIX} -l ${BACKUP_DIR}/${BACKUP_DATA_FILENAME} >/dev/null 2>&1 if [ "$?" -eq "0" ]; then gzip -f ${BACKUP_DIR}/${BACKUP_DATA_FILENAME} 2>&1 >> ${LOGFILE} if [ "$?" -ne "0" ] ; then echo "ERROR: dump file compression problem." | tee -a ${LOGFILE} exit 1 fi else echo "ERROR: problem running slapcat(8C) for the DIT data backup." | tee -a ${LOGFILE} rm ${BACKUP_DIR}/${BACKUP_DATA_FILENAME} exit 1 fi # Backup the DIT config as an LDIF file. slapcat ${SLAPCAT_OPTIONS} -b ${DIT_CONFIG} -l ${BACKUP_DIR}/${BACKUP_CONFIG_FILENAME} >/dev/null 2>&1 if [ "$?" -eq "0" ]; then gzip -f ${BACKUP_DIR}/${BACKUP_CONFIG_FILENAME} 2>&1 >> ${LOGFILE} if [ "$?" -ne "0" ] ; then echo "ERROR: dump file compression problem." | tee -a ${LOGFILE} exit 1 fi else echo "ERROR: problem running slapcat(8C) for the DIT config backup." | tee -a ${LOGFILE} rm ${BACKUP_DIR}/${BACKUP_CONFIG_FILENAME} exit 1 fi # Backup the entire configuration directory. BACKUP_FILES_LIST="${CA_TLS_CERT} ${SLAPD_CONFIG_FILENAME} ${SLAPD_DIR} ${SLAPD_LOG_ROTATION} ${SLAPD_TLS_CERT} ${SLAPD_TLS_KEY}" tar zcf ${BACKUP_DIR}/${BACKUP_TAR_FILENAME} ${BACKUP_FILES_LIST} # >/dev/null 2>&1 if [ "$?" -ne "0" ]; then echo "ERROR: problem running config directory tar." | tee -a ${LOGFILE} rm ${BACKUP_DIR}/${BACKUP_TAR_FILENAME} exit 1 fi
Das Script ausführbar machen:
chmod +x /usr/local/bin/backup_ldap.sh
Das Script ausführen:
/usr/local/bin/backup_ldap.sh
Das Script sollte fehlerfrei durchlaufen und Das Script täglich automatisch ausführen:
vi /etc/cron.d/backup_ldap
Folgende Zeile einfügen:
0 1 * * * root /usr/local/bin/backup_ldap.sh
Recovery
TBD