Inhaltsverzeichnis
LDAP CentOS 6
LDAP ist ein Netzwerkprotokoll und dient zur Bereitstellung von Verzeichnisdiensten. Es vermittelt die Kommunikation zwischen dem LDAP-Client und dem Directory Server, bzw. einem Backend-System, welches Verzeichnisinformationen bereitstellt.
Die hier beschriebene Variante von LDAP ist OpenLDAP, welche eine freie Implementierung des Lightweight Directory Access Protocols ist.
Ab hier werden zur Ausführung nachfolgender Befehle root
-Rechte benötigt. Um der Benutzer root
zu werden, melden Sie sich bitte als root
-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root
:
$ su - Password:
Installation
Zur Installation eines OpenLDAP-Servers wird nachfolgendes Paket benötigt:
installiert werden.
Mit nachfolgendem Befehl, wird das Pakete openldap-servers
installiert:
# yum install openldap-servers Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.de.leaseweb.net * extras: mirror.de.leaseweb.net * updates: mirror.de.leaseweb.net Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package openldap-servers.x86_64 0:2.4.19-15.el6_0.2 set to be updated --> Processing Dependency: make for package: openldap-servers-2.4.19-15.el6_0.2.x86_64 --> Processing Dependency: libltdl.so.7()(64bit) for package: openldap-servers-2.4.19-15.el6_0.2.x86_64 --> Running transaction check ---> Package libtool-ltdl.x86_64 0:2.2.6-15.5.el6 set to be updated ---> Package make.x86_64 1:3.81-19.el6 set to be updated --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: openldap-servers x86_64 2.4.19-15.el6_0.2 updates 2.6 M Installing for dependencies: libtool-ltdl x86_64 2.2.6-15.5.el6 base 44 k make x86_64 1:3.81-19.el6 base 389 k Transaction Summary ================================================================================ Install 3 Package(s) Upgrade 0 Package(s) Total download size: 3.0 M Installed size: 7.2 M Is this ok [y/N]: y Downloading Packages: (1/3): libtool-ltdl-2.2.6-15.5.el6.x86_64.rpm | 44 kB 00:00 (2/3): make-3.81-19.el6.x86_64.rpm | 389 kB 00:00 (3/3): openldap-servers-2.4.19-15.el6_0.2.x86_64.rpm | 2.6 MB 00:03 -------------------------------------------------------------------------------- Total 743 kB/s | 3.0 MB 00:04 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : libtool-ltdl-2.2.6-15.5.el6.x86_64 1/3 Installing : 1:make-3.81-19.el6.x86_64 2/3 Installing : openldap-servers-2.4.19-15.el6_0.2.x86_64 3/3 / Installed: openldap-servers.x86_64 0:2.4.19-15.el6_0.2 Dependency Installed: libtool-ltdl.x86_64 0:2.2.6-15.5.el6 make.x86_64 1:3.81-19.el6 Complete!
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket openldap-servers
installiert wurden.
# rpm -qil openldap-servers Name : openldap-servers Relocations: (not relocatable) Version : 2.4.19 Vendor: CentOS Release : 15.el6_0.2 Build Date: Sat 25 Jun 2011 12:30:55 PM CEST Install Date: Wed 07 Sep 2011 10:32:00 AM CEST Build Host: c6b6.bsys.dev.centos.org Group : System Environment/Daemons Source RPM: openldap-2.4.19-15.el6_0.2.src.rpm Size : 6402916 License: OpenLDAP and (Sleepycat and BSD) Signature : RSA/8, Wed 06 Jul 2011 03:42:04 AM CEST, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://www.openldap.org/ Summary : LDAP server Description : OpenLDAP is an open-source suite of LDAP (Lightweight Directory Access Protocol) applications and development tools. LDAP is a set of protocols for accessing directory services (usually phone book style information, but other information is possible) over the Internet, similar to the way DNS (Domain Name System) information is propagated over the Internet. This package contains the slapd server and related files. /etc/openldap/schema/collective.schema /etc/openldap/schema/corba.schema /etc/openldap/schema/core.ldif /etc/openldap/schema/core.schema /etc/openldap/schema/cosine.ldif /etc/openldap/schema/cosine.schema /etc/openldap/schema/duaconf.schema /etc/openldap/schema/dyngroup.schema /etc/openldap/schema/inetorgperson.ldif /etc/openldap/schema/inetorgperson.schema /etc/openldap/schema/java.schema /etc/openldap/schema/misc.schema /etc/openldap/schema/nis.ldif /etc/openldap/schema/nis.schema /etc/openldap/schema/openldap.ldif /etc/openldap/schema/openldap.schema /etc/openldap/schema/pmi.schema /etc/openldap/schema/ppolicy.schema /etc/openldap/schema/redhat /etc/openldap/schema/redhat/autofs.schema /etc/openldap/slapd.conf /etc/openldap/slapd.conf.bak /etc/openldap/slapd.d /etc/pki/tls/certs/slapd.pem /etc/rc.d/init.d/slapd /etc/sysconfig/ldap /usr/lib64/libslapd_db-4.8.so /usr/lib64/openldap /usr/lib64/openldap/accesslog-2.4.so.2 /usr/lib64/openldap/accesslog-2.4.so.2.5.2 /usr/lib64/openldap/accesslog.la /usr/lib64/openldap/auditlog-2.4.so.2 /usr/lib64/openldap/auditlog-2.4.so.2.5.2 /usr/lib64/openldap/auditlog.la /usr/lib64/openldap/collect-2.4.so.2 /usr/lib64/openldap/collect-2.4.so.2.5.2 /usr/lib64/openldap/collect.la /usr/lib64/openldap/constraint-2.4.so.2 /usr/lib64/openldap/constraint-2.4.so.2.5.2 /usr/lib64/openldap/constraint.la /usr/lib64/openldap/dds-2.4.so.2 /usr/lib64/openldap/dds-2.4.so.2.5.2 /usr/lib64/openldap/dds.la /usr/lib64/openldap/deref-2.4.so.2 /usr/lib64/openldap/deref-2.4.so.2.5.2 /usr/lib64/openldap/deref.la /usr/lib64/openldap/dyngroup-2.4.so.2 /usr/lib64/openldap/dyngroup-2.4.so.2.5.2 /usr/lib64/openldap/dyngroup.la /usr/lib64/openldap/dynlist-2.4.so.2 /usr/lib64/openldap/dynlist-2.4.so.2.5.2 /usr/lib64/openldap/dynlist.la /usr/lib64/openldap/memberof-2.4.so.2 /usr/lib64/openldap/memberof-2.4.so.2.5.2 /usr/lib64/openldap/memberof.la /usr/lib64/openldap/pcache-2.4.so.2 /usr/lib64/openldap/pcache-2.4.so.2.5.2 /usr/lib64/openldap/pcache.la /usr/lib64/openldap/ppolicy-2.4.so.2 /usr/lib64/openldap/ppolicy-2.4.so.2.5.2 /usr/lib64/openldap/ppolicy.la /usr/lib64/openldap/refint-2.4.so.2 /usr/lib64/openldap/refint-2.4.so.2.5.2 /usr/lib64/openldap/refint.la /usr/lib64/openldap/retcode-2.4.so.2 /usr/lib64/openldap/retcode-2.4.so.2.5.2 /usr/lib64/openldap/retcode.la /usr/lib64/openldap/rwm-2.4.so.2 /usr/lib64/openldap/rwm-2.4.so.2.5.2 /usr/lib64/openldap/rwm.la /usr/lib64/openldap/seqmod-2.4.so.2 /usr/lib64/openldap/seqmod-2.4.so.2.5.2 /usr/lib64/openldap/seqmod.la /usr/lib64/openldap/smbk5pwd-2.4.so.2 /usr/lib64/openldap/smbk5pwd-2.4.so.2.5.2 /usr/lib64/openldap/smbk5pwd.la /usr/lib64/openldap/sssvlv-2.4.so.2 /usr/lib64/openldap/sssvlv-2.4.so.2.5.2 /usr/lib64/openldap/sssvlv.la /usr/lib64/openldap/syncprov-2.4.so.2 /usr/lib64/openldap/syncprov-2.4.so.2.5.2 /usr/lib64/openldap/syncprov.la /usr/lib64/openldap/translucent-2.4.so.2 /usr/lib64/openldap/translucent-2.4.so.2.5.2 /usr/lib64/openldap/translucent.la /usr/lib64/openldap/unique-2.4.so.2 /usr/lib64/openldap/unique-2.4.so.2.5.2 /usr/lib64/openldap/unique.la /usr/lib64/openldap/valsort-2.4.so.2 /usr/lib64/openldap/valsort-2.4.so.2.5.2 /usr/lib64/openldap/valsort.la /usr/sbin/slapacl /usr/sbin/slapadd /usr/sbin/slapauth /usr/sbin/slapcat /usr/sbin/slapd /usr/sbin/slapd_db_archive /usr/sbin/slapd_db_checkpoint /usr/sbin/slapd_db_deadlock /usr/sbin/slapd_db_dump /usr/sbin/slapd_db_hotbackup /usr/sbin/slapd_db_load /usr/sbin/slapd_db_printlog /usr/sbin/slapd_db_recover /usr/sbin/slapd_db_sql /usr/sbin/slapd_db_stat /usr/sbin/slapd_db_upgrade /usr/sbin/slapd_db_verify /usr/sbin/slapdn /usr/sbin/slapindex /usr/sbin/slappasswd /usr/sbin/slapschema /usr/sbin/slaptest /usr/share/doc/openldap-servers-2.4.19 /usr/share/doc/openldap-servers-2.4.19/DB_CONFIG.example /usr/share/doc/openldap-servers-2.4.19/LICENSE.bdb-backend /usr/share/doc/openldap-servers-2.4.19/README.migration /usr/share/doc/openldap-servers-2.4.19/README.schema /usr/share/doc/openldap-servers-2.4.19/README.smbk5pwd /usr/share/doc/openldap-servers-2.4.19/README.upgrading /usr/share/doc/openldap-servers-2.4.19/allmail-en.png /usr/share/doc/openldap-servers-2.4.19/allusersgroup-en.png /usr/share/doc/openldap-servers-2.4.19/config_dit.png /usr/share/doc/openldap-servers-2.4.19/config_local.png /usr/share/doc/openldap-servers-2.4.19/config_ref.png /usr/share/doc/openldap-servers-2.4.19/config_repl.png /usr/share/doc/openldap-servers-2.4.19/delta-syncrepl.png /usr/share/doc/openldap-servers-2.4.19/dual_dc.png /usr/share/doc/openldap-servers-2.4.19/guide.html /usr/share/doc/openldap-servers-2.4.19/intro_dctree.png /usr/share/doc/openldap-servers-2.4.19/intro_tree.png /usr/share/doc/openldap-servers-2.4.19/ldap-sync-refreshandpersist.png /usr/share/doc/openldap-servers-2.4.19/ldap-sync-refreshonly.png /usr/share/doc/openldap-servers-2.4.19/n-way-multi-master.png /usr/share/doc/openldap-servers-2.4.19/push-based-complete.png /usr/share/doc/openldap-servers-2.4.19/push-based-standalone.png /usr/share/doc/openldap-servers-2.4.19/refint.png /usr/share/doc/openldap-servers-2.4.19/set-following-references.png /usr/share/doc/openldap-servers-2.4.19/set-memberUid.png /usr/share/doc/openldap-servers-2.4.19/set-recursivegroup.png /usr/share/man/man5/slapd-bdb.5.gz /usr/share/man/man5/slapd-config.5.gz /usr/share/man/man5/slapd-dnssrv.5.gz /usr/share/man/man5/slapd-hdb.5.gz /usr/share/man/man5/slapd-ldap.5.gz /usr/share/man/man5/slapd-ldbm.5.gz /usr/share/man/man5/slapd-ldif.5.gz /usr/share/man/man5/slapd-meta.5.gz /usr/share/man/man5/slapd-monitor.5.gz /usr/share/man/man5/slapd-ndb.5.gz /usr/share/man/man5/slapd-null.5.gz /usr/share/man/man5/slapd-passwd.5.gz /usr/share/man/man5/slapd-perl.5.gz /usr/share/man/man5/slapd-relay.5.gz /usr/share/man/man5/slapd-shell.5.gz /usr/share/man/man5/slapd-sock.5.gz /usr/share/man/man5/slapd-sql.5.gz /usr/share/man/man5/slapd.access.5.gz /usr/share/man/man5/slapd.backends.5.gz /usr/share/man/man5/slapd.conf.5.gz /usr/share/man/man5/slapd.overlays.5.gz /usr/share/man/man5/slapd.plugin.5.gz /usr/share/man/man5/slapo-accesslog.5.gz /usr/share/man/man5/slapo-auditlog.5.gz /usr/share/man/man5/slapo-chain.5.gz /usr/share/man/man5/slapo-collect.5.gz /usr/share/man/man5/slapo-constraint.5.gz /usr/share/man/man5/slapo-dds.5.gz /usr/share/man/man5/slapo-dyngroup.5.gz /usr/share/man/man5/slapo-dynlist.5.gz /usr/share/man/man5/slapo-memberof.5.gz /usr/share/man/man5/slapo-pcache.5.gz /usr/share/man/man5/slapo-ppolicy.5.gz /usr/share/man/man5/slapo-refint.5.gz /usr/share/man/man5/slapo-retcode.5.gz /usr/share/man/man5/slapo-rwm.5.gz /usr/share/man/man5/slapo-sssvlv.5.gz /usr/share/man/man5/slapo-syncprov.5.gz /usr/share/man/man5/slapo-translucent.5.gz /usr/share/man/man5/slapo-unique.5.gz /usr/share/man/man5/slapo-valsort.5.gz /usr/share/man/man8/slapacl.8.gz /usr/share/man/man8/slapadd.8.gz /usr/share/man/man8/slapauth.8.gz /usr/share/man/man8/slapcat.8.gz /usr/share/man/man8/slapd.8.gz /usr/share/man/man8/slapdn.8.gz /usr/share/man/man8/slapindex.8.gz /usr/share/man/man8/slappasswd.8.gz /usr/share/man/man8/slapschema.8.gz /usr/share/man/man8/slaptest.8.gz /var/lib/ldap /var/run/openldap
Um z.B. Abfragen gegen den OpenLDAP-Servers richten zu können wird nachfolgendes Paket benötigt:
installiert werden.
Mit nachfolgendem Befehl, wird das Pakete openldap-clients
installiert:
# yum install openldap-clients Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.de.leaseweb.net * extras: mirror.de.leaseweb.net * updates: mirror.de.leaseweb.net Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package openldap-clients.x86_64 0:2.4.19-15.el6_0.2 set to be updated --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: openldap-clients x86_64 2.4.19-15.el6_0.2 updates 157 k Transaction Summary ================================================================================ Install 1 Package(s) Upgrade 0 Package(s) Total download size: 157 k Installed size: 598 k Is this ok [y/N]: y Downloading Packages: openldap-clients-2.4.19-15.el6_0.2.x86_64.rpm | 157 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : openldap-clients-2.4.19-15.el6_0.2.x86_64 1/1 Installed: openldap-clients.x86_64 0:2.4.19-15.el6_0.2 Complete!
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket openldap-clients
installiert wurden.
# rpm -qil openldap-clients Name : openldap-clients Relocations: (not relocatable) Version : 2.4.19 Vendor: CentOS Release : 15.el6_0.2 Build Date: Sat 25 Jun 2011 12:30:55 PM CEST Install Date: Wed 07 Sep 2011 06:21:43 PM CEST Build Host: c6b6.bsys.dev.centos.org Group : Applications/Internet Source RPM: openldap-2.4.19-15.el6_0.2.src.rpm Size : 612692 License: OpenLDAP Signature : RSA/8, Wed 06 Jul 2011 03:42:03 AM CEST, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://www.openldap.org/ Summary : LDAP client utilities Description : OpenLDAP is an open-source suite of LDAP (Lightweight Directory Access Protocol) applications and development tools. LDAP is a set of protocols for accessing directory services (usually phone book style information, but other information is possible) over the Internet, similar to the way DNS (Domain Name System) information is propagated over the Internet. The openldap-clients package contains the client programs needed for accessing and modifying OpenLDAP directories. /usr/bin/ldapadd /usr/bin/ldapcompare /usr/bin/ldapdelete /usr/bin/ldapexop /usr/bin/ldapmodify /usr/bin/ldapmodrdn /usr/bin/ldappasswd /usr/bin/ldapsearch /usr/bin/ldapurl /usr/bin/ldapwhoami /usr/share/man/man1/ldapadd.1.gz /usr/share/man/man1/ldapcompare.1.gz /usr/share/man/man1/ldapdelete.1.gz /usr/share/man/man1/ldapexop.1.gz /usr/share/man/man1/ldapmodify.1.gz /usr/share/man/man1/ldapmodrdn.1.gz /usr/share/man/man1/ldappasswd.1.gz /usr/share/man/man1/ldapsearch.1.gz /usr/share/man/man1/ldapurl.1.gz /usr/share/man/man1/ldapwhoami.1.gz
Dienst/Deamon-Start einrichten
Um einen OpenLDAP-Server, welcher als Dienst/Deamon als Hintergrundprozess läuft, auch nach einem Neustart des Servers zur Verfügung zu haben, soll der Dienst/Daemon mit dem Server mit gestartet werden, was mit nachfolgendem Befehl realisiert werden kann:
# chkconfig slapd on
Eine Überprüfung, ob beim Neustart des Server der slapd
-Dienst/Deamon wirklich mit gestartet wird, kann mit nachfolgendem Befehl erfolgen und sollte eine Anzeige, wie ebenfalls nachfolgend dargestellt ausgeben:
# chkconfig --list | grep slapd slapd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
IPv6 deaktivieren
Der Einsatz von IPv6 soll nicht durchgeführt werden. Deshalb muss die nachfolgende Konfigurationsdatei wie folgt angepasst werden:
/etc/sysconfig/ldap
Folgende Ergänzung in der Konfigurationsdatei /etc/sysconfig/ldap
muss durchgeführt werden, um den slapd
-Dienst/Daemon ohne die Nutzung von IPv6 zu starten (komplette Konfigurationsdatei):
# Options of slapd (see man slapd) # Tachtler # default: #SLAPD_OPTIONS= SLAPD_OPTIONS="-4" # options of slurpd (see man slurpd) # #SLURPD_OPTIONS= # At least one of SLAPD_LDAP, SLAPD_LDAPI and SLAPD_LDAPS must be set to 'yes'! # # Run slapd with -h "... ldap:/// ..." # yes/no, default: yes #SLAPD_LDAP=yes # Run slapd with -h "... ldapi:/// ..." # yes/no, default: no #SLAPD_LDAPI=no # Run slapd with -h "... ldaps:/// ..." # yes/no, default: no #SLAPD_LDAPS=no # Run slapd with -h "... $SLAPD_URLS ..." # This option could be used instead of previous three ones, but: # - it doesn't overwrite settings of $SLAPD_LDAP, $SLAPD_LDAPS and $SLAPD_LDAPI options # - it isn't overwritten by settings of $SLAPD_LDAP, $SLAPD_LDAPS and $SLAPD_LDAPI options # example: SLAPD_URLS="ldapi:///var/lib/ldap_root/ldapi ldapi:/// ldaps:///" # default: empty #SLAPD_URLS="" # Maximum allowed time to wait for slapd shutdown on 'service ldap stop' (in seconds) #SLAPD_SHUTDOWN_TIMEOUT=3 # Parameters to ulimit called right before starting slapd # - use this to change system limits for slapd #SLAPD_ULIMIT_SETTINGS=""
Effektiv werden am Ende der Konfigurationsdatei nachfolgende Zeilen angefügt:
# Tachtler SLAPD_OPTIONS="-4"
Um die Unterstützung von IPv6 in CentOS ab der Version 6.0 zu deaktivieren, kann die Beschreibung unter nachfolgendem Link genutzt werden:
iptables Regel
Damit der OpenLDAP-Server auch erreichbar ist und nicht die Ergebnisse der Verzeichnisdienst-Abfragen vom Paketfilter iptables
blockiert werden, muss nachfolgende Regel zum iptables
-Regelwerk hinzugefügt werden.
Um die aktuellen iptables
-Regeln erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# iptables -L -nv --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 141 15811 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 2 64 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 91 packets, 13277 bytes) num pkts bytes target prot opt in out source destination
Nachfolgende Befehle, fügen folgende iptables
-Regeln dem iptables
-Regelwerk nach der Position 4 hinzu, ohne das der Paketfilter angehalten werden muss:
-A INPUT -p tcp --dport 636 -j ACCEPT
-A INPUT -p tcp --dport 389 -j ACCEPT
und hier die Befehle:
# iptables -I INPUT 5 -p tcp --dport 636 -j ACCEPT # iptables -I INPUT 5 -p tcp --dport 389 -j ACCEPT
Ein erneute Abfrage des iptables
-Regelwerts, sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:
# iptables -L -nv --line-numbers Chain INPUT (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 10015 3790K ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED 2 0 0 ACCEPT icmp -- * * 0.0.0.0/0 0.0.0.0/0 3 0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0 4 1 60 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22 5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:389 6 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:636 7 33 1056 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 8 33 1056 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) num pkts bytes target prot opt in out source destination 1 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 4 2 0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT 6 packets, 872 bytes) num pkts bytes target prot opt in out source destination
Die neuen Zeilen sind an Position 5 (INPUT) und Position 6 (INPUT) zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):
... 5 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:389 6 0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:636 ...
Um diese iptables
-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables
-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:
# service iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
Basis-Konfiguration
Bevor mit der Konfiguration begonnen werden soll, ist zu klären, welche Art von Konfiguration zum Einsatz kommen soll. Dies ist seit der OpenLDAP Version 2.3 nicht mehr so eindeutig, da es zwei Wege gibt die Konfiguration durchzuführen, welche wie nachfolgend dargestellt aussehen:
/etc/openldap/slapd.conf
- bisheriger „alter“ Konfigurationsweg/etc/openldap/slapd.d/*.ldif
- „neuer“ Konfigurationsweg
Die neueren *.ldif-Konfigurationsdateien bieten die Möglichkeit, zur Laufzeit, OHNE Neustart des OpenLDAP-Servers, Änderungen an der Konfiguration durchführen zu können.
HINWEIS - Um sich den Fortschritt nicht zu verschließen, soll hier die Konfiguration mittels der *.ldif-Konfigurationsdateien zum Einsatz kommen.
WICHTIG - Die Verwendung beider Verfahren gleichzeitig wird NICHT empfohlen, da es keinen automatischen Abgleich, der beiden Konfigurationsarten untereinander gibt !!!
Vorbereitung
Bevor mit den Änderungen an den *.ldif-Konfigurationsdateien begonnen wird, sollte das Standard-Konfigurationsverzeichnis, welche wie folgt benannt ist, samt Inhalt gesichert werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# cp -ar /etc/openldap/slapd.d /etc/openldap/slapd.d.orig
Es sollte eine zusätzliches Verzeichnis mit dem Namen:
/etc/openldap/slapd.d.orig
entstanden sein. Die Abfrage ob das neue Verzeichnis vorhanden ist, kann mit nachfolgendem Befehl durchgeführt werden und sollte eine Ausgabe wie die nachfolgend gezeigt, erzeugen:
# ls -la /etc/openldap/ total 36 drwxr-xr-x. 6 root root 4096 Sep 7 11:41 . drwxr-xr-x. 57 root root 4096 Sep 7 10:32 .. drwxr-xr-x. 2 root root 4096 Jun 25 12:30 cacerts -rw-r--r--. 1 root root 246 Jun 25 12:30 ldap.conf drwxr-xr-x. 3 root root 4096 Sep 7 10:31 schema -rw-r-----. 1 root ldap 4327 Jun 25 12:30 slapd.conf.bak drwx------. 3 ldap ldap 4096 Sep 7 11:31 slapd.d drwx------. 3 ldap ldap 4096 Sep 7 11:31 slapd.d.orig
Der Inhalt der beiden Verzeichnisse /etc/openldap/slapd.d
- und - /etc/openldap/slapd.d.orig
sollte identisch sein, was mit nachfolgendem Befehl überprüft werden kann:
# diff -r /etc/openldap/slapd.d /etc/openldap/slapd.d.orig/
WICHTIG - Es sollte KEINE Ausgabe erzeugt werden !!!
Als nächstes soll das Konfigurationsverzeichnis /etc/openldap/slapd.d
mit nachfolgendem Befehl geleert werden:
# rm /etc/openldap/slapd.d/* -rf
Mit nachfolgendem Befehl kann überprüft werden, ob das Konfigurationsverzeichnis /etc/openldap/slapd.d
tatsächliche keine Konfigurationsdateien und Verzeichnisse mehr beinhaltet:
# ls -la /etc/openldap/slapd.d total 8 drwx------. 3 ldap ldap 4096 Sep 7 11:31 . drwxr-xr-x. 6 root root 4096 Sep 7 11:41 ..
Zum Abschluss der Vorbereitungen, soll aus der Konfigurationsdatei im „alten“ Konfigurationsweg
/ect/openldap/slapd.conf.bak
durch nachfolgenden Befehl die Konfigurationsdatei
/ect/openldap/slapd.conf
erzeugt werden, welche anschließend editiert werden soll:
# cp -a /etc/openldap/slapd.conf.bak /etc/openldap/slapd.conf
Ob dies erfolgreich war, kann mit nachfolgendem Befehl überprüft werden, welcher eine Ausgabe wie die ebenfalls nachfolgend dargestellt, erzeugen sollte:
# ls -la /etc/openldap/ total 44 drwxr-xr-x. 6 root root 4096 Sep 7 13:19 . drwxr-xr-x. 57 root root 4096 Sep 7 10:32 .. drwxr-xr-x. 2 root root 4096 Jun 25 12:30 cacerts -rw-r--r--. 1 root root 246 Jun 25 12:30 ldap.conf drwxr-xr-x. 3 root root 4096 Sep 7 10:31 schema -rw-r-----. 1 root ldap 4327 Jun 25 12:30 slapd.conf -rw-r-----. 1 root ldap 4327 Jun 25 12:30 slapd.conf.bak drwx------. 3 ldap ldap 4096 Sep 7 11:31 slapd.d drwx------. 3 ldap ldap 4096 Sep 7 11:31 slapd.d.orig
Konfigurationsdateien
Es gibt zwei wichtige Konfigurationsdateien,
/etc/openldap/ldap.conf
/var/lib/ldap/DB_CONFIG
/etc/openldap/slapd.conf
- „alter“ Konfigurationsweg
bzw. ein wichtiges Konfiguratiosnverzeichnis:
/etc/openldap/slapd.d/*
- „neuer“ Konfigurationsweg
Konfigurationsdatei /etc/openldap/ldap.conf
In der Konfigurationsdatei /etc/openldap/ldap.conf
wird die Basis-Domain für den LDAP-Client festgelegt. Dies ist die Standard-Konfigurationsdatei:
# # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. #BASE dc=example, dc=com #URI ldap://ldap.example.com ldap://ldap-master.example.com:666 #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never
Mit der Variable BASE wird der standardmäßig abgefragte Teilbaum festgelegt. Das bedeutet, dass alle Anfragen unterhalb von dc=tachtler, dc=net
durchzuführen sind. Dies wird häufig „Suchbasis“ (Searchbase) genannt. Die Variable URI gibt den Server an und wie dieser standardmäßig abgefragt wird.
Folgende Anpassungen der Konfigurationsdatei /etc/openldap/ldap.conf
genügen, um grundsätzlich einen LDAP-Server zu betreiben:
# # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. BASE dc=tachtler, dc=net URI ldap://ldap.dmz.tachtler.net #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never
Konfigurationsdatei: /var/lib/ldap/DB_CONFIG
Zur Definition des benötigten „Backend“-Verzeichnisdienstes, hier eine Berkely-DB (BDB) muss im nachfolgend aufgeführten Verzeichnis eine Konfigurationsdatei mit nachfolgend benannten Namen erstellt werden
/var/lib/ldap/DB_CONFIG
Als Vorlage für den INhalt dieser Datei, kann die aus der Installation des RPM-Pakets mitgelieferte Konfigurationsdatei
/usr/share/doc/openldap-servers-2.4.19/DB_CONFIG.example
verwendet werden.
Nachfolgender Befehl sollte eine Kopie im Verzeichnis /var/lib/ldap
erstellen:
# cp -a /usr/share/doc/openldap-servers-2.4.19/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
Ein Anpassung der Besitzrechte, sollte mit nachfolgendem Befehl durchgeführt werden:
# chown ldap:ldap /var/lib/ldap/DB_CONFIG
Zur Überprüfung, ob die vorhergehenden Schritte in Bezug auf die Konfigurationsdatei /var/lib/ldap/DB_CONFIG
erfolgreich waren, kann nachfolgender Befehl genutzt werden, welche ebenfalls eine Ausgabe wie nachfolgend dargestellt erzeugen sollte:
# ls -la /var/lib/ldap/ total 20 drwx------. 3 ldap ldap 4096 Sep 7 15:23 . drwxr-xr-x. 16 root root 4096 Aug 24 15:35 .. -rw-r--r--. 1 ldap ldap 921 Jun 25 12:29 DB_CONFIG
HINWEIS - Der Inhalt der Datei, kann unverändert bleiben !!!
Konfigurationsdatei /etc/openldap/slapd.conf
Ein Teil der zur Anpassung der Konfigurationsdatei /etc/openldap/slapd.conf
, ist die Vergabe eines Passworts für den administrativen Zugriff. Dazu muss eine Passwort unter Zuhilfenahme eines Kryptographieverfahrens erstellt werden, hier SHA-1, was mit nachfolgendem Befehl erzeugt werden kann:
# /usr/sbin/slappasswd -h {SSHA} New password: Re-enter new password: {SSHA}LbTt50EDnQlZZuxtSayFpbeqCMz4MZX4
Anpassungen an der Konfigurationsdatei sind mit einem vor der Anpassung befindlichen Kommtar im Format
# Tachtler
gekennzeichnet.
Hier nun die angepasste Konfigurationsdatei - /etc/openldap/slapd.conf
:
# # See slapd.conf(5) for details on configuration options. # This file should NOT be world readable. # Tachtler #include /etc/openldap/schema/corba.schema include /etc/openldap/schema/core.schema include /etc/openldap/schema/cosine.schema #include /etc/openldap/schema/duaconf.schema #include /etc/openldap/schema/dyngroup.schema include /etc/openldap/schema/inetorgperson.schema #include /etc/openldap/schema/java.schema #include /etc/openldap/schema/misc.schema include /etc/openldap/schema/nis.schema #include /etc/openldap/schema/openldap.schema #include /etc/openldap/schema/ppolicy.schema #include /etc/openldap/schema/collective.schema # Allow LDAPv2 client connections. This is NOT the default. allow bind_v2 # Do not enable referrals until AFTER you have a working directory # service AND an understanding of referrals. #referral ldap://root.openldap.org pidfile /var/run/openldap/slapd.pid argsfile /var/run/openldap/slapd.args # Tachtler # ne default entry for: referral referral ldap://ldap.dmz.tachtler.net # Tachtler # no default entry for: loglevel loglevel 256 # Tachtler # no default entry for: ideltimeout idletimeout 15 # Tachtler # no default entry for: password-hash password-hash {SSHA} # Load dynamic backend modules: # Module syncprov.la is now statically linked with slapd and there # is no need to load it here # modulepath /usr/lib/openldap # or /usr/lib64/openldap # Tachtler # default: # modulepath /usr/lib/openldap # or /usr/lib64/openldap modulepath /usr/lib64/openldap # moduleload accesslog.la # moduleload auditlog.la ## To load this module, you have to install openldap-server-sql first # moduleload back_sql.la ## Following two modules can't be loaded simultaneously # moduleload dyngroup.la # moduleload dynlist.la # moduleload lastmod.la # moduleload pcache.la # moduleload ppolicy.la # moduleload refint.la # moduleload retcode.la # moduleload rwm.la # moduleload translucent.la # moduleload unique.la # moduleload valsort.la # The next three lines allow use of TLS for encrypting connections using a # dummy test certificate which you can generate by changing to # /etc/pki/tls/certs, running "make slapd.pem", and fixing permissions on # slapd.pem so that the ldap user or group can read it. Your client software # may balk at self-signed certificates, however. # TLSCACertificateFile /etc/pki/tls/certs/ca-bundle.crt # TLSCertificateFile /etc/pki/tls/certs/slapd.pem # TLSCertificateKeyFile /etc/pki/tls/certs/slapd.pem # Sample security restrictions # Require integrity protection (prevent hijacking) # Require 112-bit (3DES or better) encryption for updates # Require 63-bit encryption for simple bind # security ssf=1 update_ssf=112 simple_bind=64 # Sample access control policy: # Root DSE: allow anyone to read it # Subschema (sub)entry DSE: allow anyone to read it # Other DSEs: # Allow self write access # Allow authenticated users read access # Allow anonymous users to authenticate # Directives needed to implement policy: # 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 # # if no access controls are present, the default policy # allows anyone and everyone to read anything but restricts # updates to rootdn. (e.g., "access to * by * read") # # rootdn can always read and write EVERYTHING! # Tachtler # no default entry for: Access Control Lists (ACLs) access to attrs=userPassword by self write by dn="cn=Manager,dc=tachtler,dc=net" write by anonymous auth by * none access to * by self write by dn="cn=Manager,dc=tachtler,dc=net" write by * read ####################################################################### # ldbm and/or bdb database definitions ####################################################################### # Tachtler # Make cn=config accessable database config rootdn "cn=config" rootpw rootpw {SSHA}LbTt50EDnQlZZuxtSayFpbeqCMz4MZX4 database bdb # Tachtler # default: suffix "dc=my-domain,dc=com" suffix "dc=tachtler,dc=net" checkpoint 1024 15 # Tachtler # default: rootdn "cn=Manager,dc=my-domain,dc=com" rootdn "cn=Manager,dc=tachtler,dc=net" # Cleartext passwords, especially for the rootdn, should # be avoided. See slappasswd(8) and slapd.conf(5) for details. # Use of strong authentication encouraged. # rootpw secret # rootpw {crypt}ijFYNcSNctBYg # Tachtler rootpw {SSHA}LbTt50EDnQlZZuxtSayFpbeqCMz4MZX4 # The database directory MUST exist prior to running slapd AND # should only be accessible by the slapd and slap tools. # Mode 700 recommended. directory /var/lib/ldap # Tachtler # no default entry for: schemacheck #schemacheck on # Tachtler # no default entry for: mode mode 0600 # Tachtler # no default entry for: lastmod lastmod on # Indices to maintain for this database index objectClass eq,pres index ou,cn,mail,surname,givenname eq,pres,sub index uidNumber,gidNumber,loginShell eq,pres index uid,memberUid eq,pres,sub index nisMapName,nisMapEntry eq,pres,sub # Tachtler index uniqueMember eq,pres # Replicas of this database #replogfile /var/lib/ldap/openldap-master-replog #replica host=ldap-1.example.com:389 starttls=critical # bindmethod=sasl saslmech=GSSAPI # authcId=host/ldap-master.example.com@EXAMPLE.COM # enable monitoring database monitor # allow onlu rootdn to read the monitor # Tachtler # default: access to * # default: by dn.exact="cn=Manager,dc=my-domain,dc=com" read access to * by dn.exact="cn=Manager,dc=tachtler,dc=net" read by * none
loglevel
Der Wert für den Eintrag loglevel
setzte sich wie folgt zusammen:
- -1 any enable all debugging
- 0 no debugging
- 1 (0x1 trace) trace function callss
- 2 (0x2 packets) debug packet handling
- 4 (0x4 args) heavy trace debugging
- 8 (0x8 conns) connection management
- 16 (0x10 BER) print out packets sent and received
- 32 (0x20 filter) search filter processing
- 64 (0x40 config) configuration processing
- 128 (0x80 ACL) access control list processing
- 256 (0x100 stats) stats log connections/operations/results
- 512 (0x200 stats2) stats log entries sent
- 1024 (0x400 shell) print communication with shell backends
- 2048 (0x800 parse) print entry parsing debugging
- 16384 (0x4000 sync) syncrepl consumer processing
- 32768 (0x8000 none) only messages that get logged whatever log level is set
Die Summe der Werte 8+32+256=296. Welche Werte und welche Optionen sich hinter diesen Werten befinden, kann in der man
-Page für die Konfigurationsdatei /etc/openldap/sldap.conf
mit folgendem Befehl nachgelesen werden:
# man slapd.conf
* 256 sollte für den „normal“ Betrieb ausreichend sein!
idletimeout
Der Wert für den Eintrag idletimeout
setzte eine Ablaufzeit für offene Abfragen, welche noch nicht beendet wurden. Dies sollte auf jeden Fall gesetzt werden, da es sonst bei sehr vielen Abfragen zu einem „Stillstand“ des LDAP-Daemons kommen kann:
idletimeout 15
password-hash
Die Angabe für den Eintrag password-hash
, setzt den Standard-Algorithmus, welcher zwar SSHA
ist, jedoch hier explizit angegeben werden soll.
password-hash {SSHA}
Access Control Lists (ACLs)
Die erste der beide ACLs
access to attrs=userPassword by self write by dn="cn=Manager,dc=tachtler,dc=net" write by anonymous auth by * none
besagt, dass ein Zugriff auf das Attribut userPassword
nur dem Eigentümer, einer Instanz des Objekts Manager
mit Schreibrechten erlaubt sind. Des weiteren können anonyme Anfragen anonymous
zur Authentifizierung das Attribut userPassword
vergleichen. Alle anderen Anfragen auf das Attribut userPassword
sind nicht gestattet.
Die zweite der beiden ACLs
access to * by self write by dn="cn=Manager,dc=tachtler,dc=net" write by * read
besagt, dass ein Zugriff auf alle Objekte (außer userPassword
, siehe vorherige ACL), vom Besitzer mit Schreibrechten durchgeführt werden können. Alle anderen Anfragen sind mit Leserechten gestattet. ( Zu Testzwecken !!!)
rootpw
Um ein Passwort für den Eintrag rootpw
mit der Verschlüsselungsmethode SSHA
, welche einem SHA-1 Algorithmus (FIPS 160-1) entspricht, zu generieren, wird das Programm /usr/sbin/slappasswd
, wie bereits beschrieben, aufgerufen
rootpw {SSHA}LbTt50EDnQlZZuxtSayFpbeqCMz4MZX4
mode
Der Eintrag mode
mit der entsprechenden Angabe 0600
bewirkt, dass Dateien mit nur für den Eigentümer der Datei mit den Rechten rw
(lesen+schreiben) angelegt werden.
mode 0600
lastmod
Der Wert für den Eintrag lastmod
bewirkt, dass Einträge mit einem Datum versehen werden.
lastmod on
index: uniqueMember
Erweiterung der Einstellungen für index
um die Angabe von uniqueMember
index uniqueMember eq,pres
Erzeugung *.ldif Konfigurationsdateien aus slapd.conf
Falls eine bereits bestehende, oder durch den hier im Vorfeld durchgeführten Konfigurationsschritt
erzeugte „alte“ Konfigurationsdatei
/etc/openldap/slapd.conf
in das „neue“ Konfigurationsdateiformat *.ldif überführt werden soll, kann dies mit nachfolgender Beschreibung realisiert werden!
Zuerst sollte, falls der Konfigurationsschritt
im Vorfeld durchgeführt wurde, die so erzeugte Konfigurationsdatei
/etc/openldap/slapd.conf
den persönlichen Gegebenheiten angepasst werden.
Abschließend kann nun durch ausführen des nachfolgenden Befehls die so angepasste „alte“ Konfigurationsdatei /etc/openldap/slapd.conf
in die „neuen“ *.ldif-Konfigurationsdateien umgewandelt werden, welche sich dann, im aktuell noch geleerten Verzeichnis
/etc/openldap/slapd.d
befinden:
# slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d bdb_db_open: database "dc=tachtler,dc=net": db_open(/var/lib/ldap/id2entry.bdb) failed: No such file or directory (2). backend_startup_one (type=bdb, suffix="dc=tachtler,dc=net"): bi_db_open failed! (2) slap_startup failed (test would succeed using the -u switch)
HINWEIS - Die Fehlermeldungen können ignoriert werden, da sich noch KEINE DATEN in der Berkely-DB (DBD) befinden !!!
Anschließend, müssen den neu entstandenen *.ldif-Konfigurationsdateien, noch die richtigen Besitzrechte durch ausführen des nachfolgenden Befehls zugewiesen werden:
# chown -R ldap:ldap slapd.d
Zur Überprüfung, ob die Konfigurationen korrekt erstellt wurden,kann nachfolgende Befehl ausgeführt werden, welcher anzeigt, ob das „neue“ Konfigurationsverzeichnis /etc/openldap/slapd.d/
Dateien enthält:
# ls -la /etc/openldap/slapd.d/* -rw-------. 1 ldap ldap 1069 Sep 7 17:26 /etc/openldap/slapd.d/cn=config.ldif /etc/openldap/slapd.d/cn=config: total 80 drwxr-x---. 3 ldap ldap 4096 Sep 7 17:45 . drwx------. 3 ldap ldap 4096 Sep 7 17:43 .. drwxr-x---. 2 ldap ldap 4096 Sep 7 17:26 cn=schema -rw-------. 1 ldap ldap 51236 Sep 7 17:26 cn=schema.ldif -rw-------. 1 ldap ldap 487 Sep 7 17:26 olcDatabase={0}config.ldif -rw-------. 1 ldap ldap 2680 Sep 7 17:26 olcDatabase={1}bdb.ldif -rw-------. 1 ldap ldap 753 Sep 7 17:26 olcDatabase={-1}frontend.ldif -rw-------. 1 ldap ldap 518 Sep 7 17:26 olcDatabase={2}monitor.ldif
WICHTIG - Nachfolgender Schritte, ist zum erfolgreichen Start des OpenLDAP-Servers, sehr wichtig !!!
Da durch den Befehl
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
nicht nur das „neue“ Konfigurationsverzeichnis /etc/openldap/slapd.d
mit Inhalt befüllt wurde, sonder in diesem Fall auch eine Berkely-DB (DBD)-Datenstruktur im Verzeichnis
/var/lib/ldap
angelegt wurde, diese jedoch durch den Benutzer root
und nicht durch den Start des slapd
-Deamons/Dienst erfolgt ist, muss dies wieder entfernt werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# rm alock __* -f
Der Inhalt des Verzeichnisses /var/lib/ldap
sollte nach der Löschaktion, in etwa wie nachfolgend dargestellt aussehen, was mit folgendem Befehl überprüft werden kann:
# ls -la /var/lib/ldap/ total 20 drwx------. 3 ldap ldap 4096 Sep 7 17:52 . drwxr-xr-x. 16 root root 4096 Sep 7 15:42 .. -rw-r--r--. 1 ldap ldap 921 Sep 7 17:04 DB_CONFIG
Bevor der OpenLDAP-Server in Betrieb genommen werden kann, wird die Konfigurationsdatei
/etc/openldap/slapd.conf
nicht mehr benötigt, deshalb kann die Datei gelöscht, oder umbenannt werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# mv /etc/openldap/slapd.conf /etc/openlda/slapd.conf.save
Erster Start
Bevor der der slapd
-Daemon/Dienst zum ersten mal gestartet werden soll, ist eine Überprüfung der korrekten Konfiguration durch nachfolgenden Befhel, zu empfeheln
# service slapd configtest
HINWEIS - die Konfiguration des slapd
-Daemon/Dienst ist korrekt, wenn KEINE Fehlermeldung erscheint !!!
Danach kann der OpenLDAP-Server mit nachfolgendem Befehle gestartet werden:
# service slapd start Starting slapd: [ OK ]
Überprüfung erfolgreicher Start
Um zu Überprüfen, ob der Start des slapd
-Daemons/Dienstes erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden:
# netstat -tulpen | grep slapd tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 0 18824 3452/slapd
oder auch dieser Befehl:
# service slapd status slapd (pid 3452) is running...
Überprüfung Berkely-DB (DBD)
Das Verzeichnis
/var/lib/ldap
beinhaltet die berkely-DB (BDB)-Dateien. Das Vorhandensein aller benötigten Dateien und den richtigen Berechtigungen, kann mit nachfolgendem Befehl überprüft werden:
# ls -la /var/lib/ldap/ total 19800 drwx------. 3 ldap ldap 4096 Sep 7 18:03 . drwxr-xr-x. 16 root root 4096 Sep 7 15:42 .. -rw-r--r--. 1 ldap ldap 2048 Sep 7 18:03 alock -rw-------. 1 ldap ldap 24576 Sep 7 18:03 __db.001 -rw-------. 1 ldap ldap 17637376 Sep 7 18:33 __db.002 -rw-------. 1 ldap ldap 335552512 Sep 7 18:29 __db.003 -rw-------. 1 ldap ldap 2359296 Sep 7 18:29 __db.004 -rw-------. 1 ldap ldap 802816 Sep 7 18:29 __db.005 -rw-------. 1 ldap ldap 32768 Sep 7 18:29 __db.006 -rw-r--r--. 1 ldap ldap 921 Sep 7 17:04 DB_CONFIG -rw-------. 1 ldap ldap 8192 Sep 7 18:03 dn2id.bdb -rw-------. 1 ldap ldap 32768 Sep 7 18:03 id2entry.bdb -rw-------. 1 ldap ldap 10485760 Sep 7 18:18 log.0000000001
Erste Suchanfrage
Mit nachfolgendem Befehl, kann eine Erste Suchanfrage, gegen den OpenLDAP-Server, bzw. den slapd
-Daemon/Dienst durchgeführt werden, welche zwar ein leeres Ergbnis zurück liefern sollte, jedoch kann somit überprüft werden, ob grundsätzlich Abfragen möglich sind:
# ldapsearch -x -b "dc=tachtler,dc=net" "(objectclass=*)" # extended LDIF # # LDAPv3 # base <dc=tachtler,dc=net> with scope subtree # filter: (objectclass=*) # requesting: ALL # # search result search: 2 result: 32 No such object # numResponses: 1
Abfrage Konfiguration
Durch die nachfolgend gezeigten Einträge in der Konfigurationsdatei
/etc/openldap/slapd.conf
(nur relevanter Ausschnitt):
... # Tachtler # Make cn=config accessable database config rootdn "cn=config" rootpw rootpw {SSHA}LbTt50EDnQlZZuxtSayFpbeqCMz4MZX4 ...
können die im *.LDIF-Format hinterlegten OpenLDAP-Server-Konfigurationen ebenfalls mit nachfolgendem Befehl abgefragt werden
Hier der Konfigurationsabschnitt cn=config „objectclass=olcGlobal“::
# ldapsearch -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)" Enter LDAP Password: # extended LDIF # # LDAPv3 # base <cn=config> with scope subtree # filter: (objectclass=olcGlobal) # requesting: ALL # # config dn: cn=config objectClass: olcGlobal cn: config olcConfigFile: /etc/openldap/slapd.conf olcConfigDir: /etc/openldap/slapd.d olcAllows: bind_v2 olcArgsFile: /var/run/openldap/slapd.args olcAttributeOptions: lang- olcAuthzPolicy: none olcConcurrency: 0 olcConnMaxPending: 100 olcConnMaxPendingAuth: 1000 olcGentleHUP: FALSE olcIdleTimeout: 15 olcIndexSubstrIfMaxLen: 4 olcIndexSubstrIfMinLen: 2 olcIndexSubstrAnyLen: 4 olcIndexSubstrAnyStep: 2 olcIndexIntLen: 4 olcLocalSSF: 71 olcLogLevel: Stats olcPidFile: /var/run/openldap/slapd.pid olcReadOnly: FALSE olcReferral: ldap://ldap.dmz.tachtler.net olcReverseLookup: FALSE olcSaslSecProps: noplain,noanonymous olcSockbufMaxIncoming: 262143 olcSockbufMaxIncomingAuth: 16777215 olcThreads: 16 olcTLSCRLCheck: none olcTLSVerifyClient: never olcToolThreads: 1 olcWriteTimeout: 0 # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Hier nur der Konfigurationsabschnitt olcDatabase={0}config.ldif:
# ldapsearch -W -x -D cn=config -b olcDatabase={0}config,cn=config Enter LDAP Password: # extended LDIF # # LDAPv3 # base <olcDatabase={0}config,cn=config> with scope subtree # filter: (objectclass=*) # requesting: ALL # # {0}config, config dn: olcDatabase={0}config,cn=config objectClass: olcDatabaseConfig olcDatabase: {0}config olcAccess: {0}to * by * none olcAddContentAcl: TRUE olcLastMod: TRUE olcMaxDerefDepth: 15 olcReadOnly: FALSE olcRootDN: cn=config olcRootPW: {SSHA}LbTt50EDnQlZZuxtSayFpbeqCMz4MZX4 olcMonitoring: FALSE # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Oder den gesamten Konfigurationsbaum:
# ldapsearch -W -x -D cn=config -b cn=config ...
LOG-Schreibung
Evtl. kann es sein, das weder keine LOG-Einträge des OpenLDAP-Servers, bzw. des slapd
-Daemons/Dienstes in der LOG-Datei /var/log/messages
sind. Dies kann daran liegen, das der unter CentOS in der Version 6.x zum Einsatz kommende LOG-Server
rsyslog
nicht auf den LOG-Level, auf dem der OpenLDAP-Servers, bzw. des slapd
-Daemons/Dienstes, seine Log-Dateien an des Syslog-Server abgibt, lauscht.
Durch nachfolgende Anpassung, können die LOG-Meldungen des OpenLDAP-Servers, bzw. des slapd
-Daemons/Dienstes an den Syslog-Server rsyslog
mit nachfolgender Ergänzung der Konfigurationsdatei
/etc/rsyslog.conf
und einem Neustart des Syslog-Dienstes, sichtbar gemacht werden.
Hier die Ergänzungen für den Syslog-Dienst rsyslog
(nur relevanter Ausschnitt):
... # Tachtler local4.* -/var/log/ldap.log ...
Der Neustart des Syslog-Dienstes rsyslog
wird mit nachfolgendem Befehl durchgeführt:
# service rsyslog restart Shutting down system logger: [ OK ] Starting system logger: [ OK ]
Ggf. kann auch der OpenLDAP-Servers, bzw. des slapd
-Daemons/Dienstes z.B. neu gestartete werden, was dann in der Log-Datei:
/var/log/ldap.log
folgende LOG-Einträge erzeugen sollte:
# cat /var/log/ldap.log Sep 8 10:02:57 rechner30 slapd[1496]: daemon: shutdown requested and initiated. Sep 8 10:02:57 rechner30 slapd[1496]: slapd shutdown: waiting for 0 operations/tasks to finish Sep 8 10:02:57 rechner30 slapd[1496]: slapd stopped. Sep 8 10:02:57 rechner30 slapd[1584]: @(#) $OpenLDAP: slapd 2.4.19 (Jun 25 2011 11:27:10) $#012#011mockbuild@c6b6.bsys.dev.centos.org: /builddir/build/BUILD/openldap-2.4.19/openldap-2.4.19/build-servers/servers/slapd Sep 8 10:02:57 rechner30 slapd[1585]: slapd starting
TLS-Zertifikat erstellen
Um den OpenLDAP-Server nicht nur unverschlüsselt, sondern auch via TLS/StartTLS-Verschlüsselung ansprechen zu können, muss zuerst ein Zertifikat erzeugt werden. Dies kann durch eine offizielle Zertifizierungsstelle durchgeführt werden, was jedoch natürlich mit Kosten verbunden ist, oder es kommt eine sogenanntes Self-Signed-Certificate (Selbst erstelltes/unterschriebenes) Zertifikat zum Einsatz.
Um die Verschlüsselung einsetzen zu können, sind folgende Komponenten erforderlich:
- einen private key
- einen public key, welcher von einer Certificate Authority (CA) signiert ist
- den public key der unterschreibenden Certificate Authority (CA) um deren Unterschrift zu überprüfen
Zur Erstellung eines Self-Signed-Certificate und zur Erstellung der oben genannten Komponenten, wird das RPM-Paket
openssl
benötigt.
Installation:openssl
Zur Installation von openssl
wird nachfolgendes Paket benötigt:
installiert werden.
HINWEIS - In der Regel ist das Paket openssl bereits installiert !!!
Mit nachfolgendem Befehl, wird das Pakete openssl
installiert:
# yum install openssl ...
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket openssl
installiert wurden.
# rpm -qil openssl Name : openssl Relocations: (not relocatable) Version : 1.0.0 Vendor: CentOS Release : 4.el6_0.2 Build Date: Sat 25 Jun 2011 06:02:53 AM CEST Install Date: Wed 24 Aug 2011 12:38:25 PM CEST Build Host: c6b6.bsys.dev.centos.org Group : System Environment/Libraries Source RPM: openssl-1.0.0-4.el6_0.2.src.rpm Size : 3731577 License: OpenSSL Signature : RSA/8, Wed 06 Jul 2011 03:44:23 AM CEST, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://www.openssl.org/ Summary : A general purpose cryptography library with TLS implementation Description : The OpenSSL toolkit provides support for secure communications between machines. OpenSSL includes a certificate management tool and shared libraries which provide various cryptographic algorithms and protocols. /etc/pki/CA /etc/pki/CA/certs /etc/pki/CA/crl /etc/pki/CA/newcerts /etc/pki/CA/private /etc/pki/tls /etc/pki/tls/certs /etc/pki/tls/certs/Makefile /etc/pki/tls/certs/make-dummy-cert /etc/pki/tls/misc /etc/pki/tls/misc/CA /etc/pki/tls/misc/c_hash /etc/pki/tls/misc/c_info /etc/pki/tls/misc/c_issuer /etc/pki/tls/misc/c_name /etc/pki/tls/openssl.cnf /etc/pki/tls/private /usr/bin/openssl /usr/lib64/.libcrypto.so.1.0.0.hmac /usr/lib64/.libcrypto.so.10.hmac /usr/lib64/.libssl.so.1.0.0.hmac /usr/lib64/.libssl.so.10.hmac /usr/lib64/libcrypto.so.1.0.0 /usr/lib64/libcrypto.so.10 /usr/lib64/libssl.so.1.0.0 /usr/lib64/libssl.so.10 /usr/lib64/openssl /usr/lib64/openssl/engines /usr/lib64/openssl/engines/lib4758cca.so /usr/lib64/openssl/engines/libaep.so /usr/lib64/openssl/engines/libatalla.so /usr/lib64/openssl/engines/libcapi.so /usr/lib64/openssl/engines/libchil.so /usr/lib64/openssl/engines/libcswift.so /usr/lib64/openssl/engines/libgmp.so /usr/lib64/openssl/engines/libnuron.so /usr/lib64/openssl/engines/libpadlock.so /usr/lib64/openssl/engines/libsureware.so /usr/lib64/openssl/engines/libubsec.so /usr/share/doc/openssl-1.0.0 /usr/share/doc/openssl-1.0.0/CHANGES /usr/share/doc/openssl-1.0.0/FAQ /usr/share/doc/openssl-1.0.0/INSTALL /usr/share/doc/openssl-1.0.0/LICENSE /usr/share/doc/openssl-1.0.0/NEWS /usr/share/doc/openssl-1.0.0/README /usr/share/doc/openssl-1.0.0/README.FIPS /usr/share/doc/openssl-1.0.0/c-indentation.el /usr/share/doc/openssl-1.0.0/openssl.txt /usr/share/doc/openssl-1.0.0/openssl_button.gif /usr/share/doc/openssl-1.0.0/openssl_button.html /usr/share/doc/openssl-1.0.0/ssleay.txt /usr/share/man/man1/asn1parse.1ssl.gz /usr/share/man/man1/ca.1ssl.gz /usr/share/man/man1/ciphers.1ssl.gz /usr/share/man/man1/cms.1ssl.gz /usr/share/man/man1/crl.1ssl.gz /usr/share/man/man1/crl2pkcs7.1ssl.gz /usr/share/man/man1/dgst.1ssl.gz /usr/share/man/man1/dhparam.1ssl.gz /usr/share/man/man1/dsa.1ssl.gz /usr/share/man/man1/dsaparam.1ssl.gz /usr/share/man/man1/ec.1ssl.gz /usr/share/man/man1/ecparam.1ssl.gz /usr/share/man/man1/enc.1ssl.gz /usr/share/man/man1/errstr.1ssl.gz /usr/share/man/man1/gendsa.1ssl.gz /usr/share/man/man1/genpkey.1ssl.gz /usr/share/man/man1/genrsa.1ssl.gz /usr/share/man/man1/md2.1ssl.gz /usr/share/man/man1/md4.1ssl.gz /usr/share/man/man1/md5.1ssl.gz /usr/share/man/man1/mdc2.1ssl.gz /usr/share/man/man1/nseq.1ssl.gz /usr/share/man/man1/ocsp.1ssl.gz /usr/share/man/man1/openssl.1ssl.gz /usr/share/man/man1/pkcs12.1ssl.gz /usr/share/man/man1/pkcs7.1ssl.gz /usr/share/man/man1/pkcs8.1ssl.gz /usr/share/man/man1/pkey.1ssl.gz /usr/share/man/man1/pkeyparam.1ssl.gz /usr/share/man/man1/pkeyutl.1ssl.gz /usr/share/man/man1/req.1ssl.gz /usr/share/man/man1/ripemd160.1ssl.gz /usr/share/man/man1/rsa.1ssl.gz /usr/share/man/man1/rsautl.1ssl.gz /usr/share/man/man1/s_client.1ssl.gz /usr/share/man/man1/s_server.1ssl.gz /usr/share/man/man1/s_time.1ssl.gz /usr/share/man/man1/sess_id.1ssl.gz /usr/share/man/man1/sha.1ssl.gz /usr/share/man/man1/sha1.1ssl.gz /usr/share/man/man1/smime.1ssl.gz /usr/share/man/man1/speed.1ssl.gz /usr/share/man/man1/spkac.1ssl.gz /usr/share/man/man1/sslpasswd.1ssl.gz /usr/share/man/man1/sslrand.1ssl.gz /usr/share/man/man1/ts.1ssl.gz /usr/share/man/man1/tsget.1ssl.gz /usr/share/man/man1/verify.1ssl.gz /usr/share/man/man1/version.1ssl.gz /usr/share/man/man1/x509.1ssl.gz /usr/share/man/man5/config.5ssl.gz /usr/share/man/man5/x509v3_config.5ssl.gz /usr/share/man/man7/des_modes.7ssl.gz
Erstellen Certificate Authority (CA)
Um einen public key einer eignen unterschreibenden Certificate Authority (CA) zu erhalten, muss zuerst eine eigene CA erstellt werden.
Bei der Erstellung einer eigenen Certificate Authority (CA) kann ein Script, welches bei der Installation von openssl
mitgeliefert wird und sich im Verzeichnis /etc/pki/tls/misc/
befindet, genutzt werden. Der Name des Script lautet
/etc/pki/tls/misc/CA
.
Folgender Aufruf erstellt eine eigene Certificate Authority (CA):
HINWEIS - Nicht benötigte Angaben werden mit Eingabe eines Punktes [.] übersprungen!
# /etc/pki/tls/misc/CA -newca CA certificate filename (or enter to create) Making CA certificate ... Generating a 2048 bit RSA private key ............+++ ..............................................+++ writing new private key to '/etc/pki/CA/private/./cakey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:DE State or Province Name (full name) []:Bavaria (Bayern) Locality Name (eg, city) [Default City]:Munich (Muenchen) Organization Name (eg, company) [Default Company Ltd]:www.tachtler.net Organizational Unit Name (eg, section) []:. Common Name (eg, your name or your server's hostname) []:www.tachtler.net Email Address []:hostmaster@tachtler.net Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:. Using configuration from /etc/pki/tls/openssl.cnf Enter pass phrase for /etc/pki/CA/private/./cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: c1:f6:98:a5:84:58:f7:4c Validity Not Before: Sep 8 12:58:26 2011 GMT Not After : Sep 7 12:58:26 2014 GMT Subject: countryName = DE stateOrProvinceName = Bavaria (Bayern) organizationName = www.tachtler.net commonName = www.tachtler.net emailAddress = hostmaster@tachtler.net X509v3 extensions: X509v3 Subject Key Identifier: 74:25:31:02:CA:DA:59:A9:8D:74:B7:7E:62:40:58:5C:68:B4:62:65 X509v3 Authority Key Identifier: keyid:74:25:31:02:CA:DA:59:A9:8D:74:B7:7E:62:40:58:5C:68:B4:62:65 X509v3 Basic Constraints: CA:TRUE Certificate is to be certified until Sep 7 12:58:26 2014 GMT (1095 days) Write out database with 1 new entries Data Base Updated
Durch ausführen des Scriptes mit nachfolgendem Aufrufparameter /etc/pki/tls/misc/CA -newca
ist eine neue Verzeichnisstruktur unter
/etc/pki/CA
entstanden, deren Inhalt mit nachfolgendem Befehl bequem aufgelistet werden kann:
# ls -la /etc/pki/CA/* -rw-r--r--. 1 root root 4625 Sep 8 13:41 /etc/pki/CA/cacert.pem -rw-r--r--. 1 root root 1110 Sep 8 13:41 /etc/pki/CA/careq.pem -rw-r--r--. 1 root root 157 Sep 8 13:41 /etc/pki/CA/index.txt -rw-r--r--. 1 root root 21 Sep 8 13:41 /etc/pki/CA/index.txt.attr -rw-r--r--. 1 root root 0 Sep 8 13:40 /etc/pki/CA/index.txt.old -rw-r--r--. 1 root root 0 Sep 8 13:29 /etc/pki/CA/index.txt.orig -rw-r--r--. 1 root root 17 Sep 8 13:41 /etc/pki/CA/serial /etc/pki/CA/certs: total 8 drwxr-xr-x. 2 root root 4096 Jun 25 06:01 . drwxr-xr-x. 6 root root 4096 Sep 8 13:41 .. /etc/pki/CA/crl: total 8 drwxr-xr-x. 2 root root 4096 Jun 25 06:01 . drwxr-xr-x. 6 root root 4096 Sep 8 13:41 .. /etc/pki/CA/newcerts: total 16 drwxr-xr-x. 2 root root 4096 Sep 8 13:41 . drwxr-xr-x. 6 root root 4096 Sep 8 13:41 .. -rw-r--r--. 1 root root 4625 Sep 8 13:41 FA41FA90FC7B1920.pem /etc/pki/CA/private: total 12 drwx------. 2 root root 4096 Sep 8 13:40 . drwxr-xr-x. 6 root root 4096 Sep 8 13:41 .. -rw-r--r--. 1 root root 1834 Sep 8 13:41 cakey.pem
Erstellen Certificate Requests
Um den noch zu erstellenden Schlüssel bzw. den Certificate Requests wieder zu finden, kann mit folgendem Befehl in das Verzeichnis /etc/pki/CA
gewechselt werden:
# cd /etc/pki/CA
Zwei weitere Komponenten sind einmal der benötigte private key und der benötigte Certificate Requests welche ebenfalls mit dem Script, welches schon bei der Erstellung der Certificate Authority (CA) genutzt wurde und sich unter /etc/pki/tls/misc
befindet und den Namen CA
trägt, welche mit nachfolgendem Befehl erstellt werden können:
HINWEIS - Nicht benötigte Angaben werden mit Eingabe eines Punktes [.] übersprungen!
# /etc/pki/tls/misc/CA -newreq Generating a 2048 bit RSA private key .............................................+++ ................+++ writing new private key to 'newkey.pem' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [XX]:DE State or Province Name (full name) []:Bavaria (Bayern) Locality Name (eg, city) [Default City]:Munich (Muenchen) Organization Name (eg, company) [Default Company Ltd]:www.tachtler.net Organizational Unit Name (eg, section) []:LDAP Common Name (eg, your name or your server's hostname) []:ldap.dmz.tachtler.net Email Address []:hostmaster@tachtler.net Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []:. Request is in newreq.pem, private key is in newkey.pem
HINWEIS - Das erstellte Zertifikat hat standardmäßig eine Laufzeit von 1 Jahr !!!
Durch ausführen des Scripts mit nachfolgendem Aufrufparameter /etc/pki/tls/misc/CA -newreq
sind zwei neue Dateien unter
/etc/pki/CA
entstanden, welche mit nachfolgendem Befehl aufgelistet werden können:
# ls -la /etc/pki/CA/new*.pem -rw-r--r--. 1 root root 1834 Sep 8 13:51 /etc/pki/CA/newkey.pem -rw-r--r--. 1 root root 1110 Sep 8 13:51 /etc/pki/CA/newreq.pem
WICHTIG - Die so entstandene Datei /etc/pki/CA/newreq.pem
enthält den Certificate Requests!
Unterschreiben des Certificate Requests
Um den in obigen Beispiel entstandenen Certificate Requests nun mit dem Schlüssel der Certificate Authority (CA) zu unterschreiben, kann wieder das Script, welches schon bei der Erstellung der Certificate Authority (CA) genutzt wurde und sich unter /etc/pki/CA
befindet und den Namen CA
trägt, mit nachfolgendem Befehl genutzt werden:
WICHTIG - Das Passwort, ist das Passwort, welches im Schritt Erstellen einer eigenen Certificate Authority (CA) verwendet wurde!
# /etc/pki/tls/misc/CA -sign Using configuration from /etc/pki/tls/openssl.cnf Enter pass phrase for /etc/pki/CA/private/cakey.pem: Check that the request matches the signature Signature ok Certificate Details: Serial Number: b1:fd:91:ac:83:68:f8:1d Validity Not Before: Sep 8 13:49:37 2011 GMT Not After : Sep 7 13:49:37 2012 GMT Subject: countryName = DE stateOrProvinceName = Bavaria (Bayern) localityName = Munich (Muenchen) organizationName = www.tachtler.net organizationalUnitName = LDAP commonName = ldap.dmz.tachtler.net emailAddress = hostmaster@tachtler.net X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 3B:48:B9:35:B2:F4:F0:56:47:9E:7C:2A:03:EE:65:7C:91:95:D2:15 X509v3 Authority Key Identifier: keyid:75:25:11:02:CA:AA:54:A9:8D:74:B7:7B:62:41:28:5C:68:C4:62:35 Certificate is to be certified until Sep 7 13:49:37 2011 GMT (365 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated Certificate: Data: Version: 3 (0x2) Serial Number: b1:fd:91:ac:83:68:f8:1d Signature Algorithm: sha1WithRSAEncryption Issuer: C=DE, ST=Bavaria (Bayern), O=www.tachtler.net, CN=www.tachtler.net/emailAddress=hostmaster@tachtler.net Validity Not Before: Sep 8 13:49:37 2011 GMT Not After : Sep 7 13:49:37 2012 GMT Subject: C=DE, ST=Bavaria (Bayern), L=Munich (Muenchen), O=www.tachtler.net, OU=LDAP, CN=ldap.dmz.tachtler.net/emailAddress=hostmaster@tachtler.net Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 01:ef:6b:fd:6c:2a:40:19:af:d2:86:92:6e:49:27: 05:0a:fc:a4:e5:f3:2c:c1:3b:76:2d:d9:e0:df:76: 98:13:cd:74:d1:36:c6:e1:08:e7:79:3e:40:01:63: 6f:d1:42:77:7d:6c:fd:58:71:e2:19:0f:f3:cb:5c: cd:60:ce:de:57:d9:22:52:8a:52:3c:a5:95:15:1e: f4:f9:b1:f2:c4:ac:26:ae:8c:c5:a6:dd:7f:0c:6d: 30:40:c3:4d:a5:00:1c:98:ba:18:ae:e3:6f:7a:95: 81:7c:5e:47:33:1b:d4:45:9d:a7:7f:9d:83:93:26: de:bb:6e:00:09:f4:39:44:33:5b:11:7f:fd:7a:df: b8:e5:43:70:45:de:2e:28:92:0a:38:89:38:b3:5c: 94:67:a1:c4:64:f2:95:e5:65:05:40:91:e6:c5:43: 06:88:1d:8b:f6:70:26:33:ba:cd:b8:e9:bf:47:91: 68:76:55:51:e3:e8:64:31:a9:55:49:77:e0:18:a8: 78:a7:ec:48:29:6a:0a:92:02:d3:13:64:33:14:d1: fd:d7:f6:73:28:c3:b3:d3:37:d0:c0:06:88:90:0c: 67:48:79:60:5e:49:4f:44:5e:31:6c:f4:15:81:68: 73:d2:23:72:59:55:86:79:b4:54:e2:1a:10:3a:4e: 3c:d1 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: 3B:48:B9:35:B2:F4:F0:56:47:9E:7C:2A:03:EE:65:7C:91:95:D2:15 X509v3 Authority Key Identifier: keyid:75:25:11:02:CA:AA:54:A9:8D:74:B7:7B:62:41:28:5C:68:C4:62:35 Signature Algorithm: sha1WithRSAEncryption 0d:7d:29:b8:df:73:23:c6:53:b8:ce:32:18:42:2e:ff:e9:47: 52:dc:7e:b3:39:b2:cb:50:64:f2:f6:0f:34:a1:13:34:cb:52: a3:11:a0:bf:99:93:74:24:e7:fb:ca:3d:69:77:e7:6e:06:7d: 6a:bb:82:51:8e:e8:c1:f5:3d:3e:9b:7e:61:54:66:60:9e:9f: 1b:90:df:42:8e:37:5e:e4:e3:93:eb:23:f5:88:59:ad:ac:34: df:e3:47:f7:69:52:04:fd:cd:f3:ad:3d:47:bf:68:19:ff:cf: cd:a1:96:d2:e1:47:08:54:1f:7e:14:b5:66:d5:38:4b:9f:d1: a3:9e:0a:a0:6a:37:d1:62:e4:77:40:92:35:00:23:3a:ea:be: b5:33:6f:22:e6:85:d3:0f:c1:50:10:87:e0:80:2a:71:3f:f1: 8b:3e:8b:5b:c8:ad:e1:35:ff:46:67:06:3d:3c:c5:ed:76:2a: c5:71:ab:84:57:20:d4:d5:74:50:a4:90:15:39:3c:4a:ea:0d: 89:d3:14:75:dc:24:d2:b0:31:5e:2a:08:c7:1a:f4:0e:68:f9: da:ea:ea:9d:ad:10:5b:ae:64:5f:d6:74:16:a5:0b:1c:51:44: a2:71:6d:25:06:8e:b7:c1:f5:45:b6:f7:55:9c:a8:70:7f:ac: 31:fe:2e:b3 -----BEGIN CERTIFICATE----- MIIEPDCghfSgAwIBAgIJAMH2mKWEWPdNMA0GCSqGSIb3DQEBBQUAMIGGMQswCQYD VQQGEwJERTEZMBcGA1UECAwQQmF2YXJpYSAoQmF5ZXJuKTEZMBcGA1UECgwQd3d3 LnRhY2h0bGVyLm5ldDEZMBcGA1UEAwwQd3d3LnRhY2h0bGVyLm5ldDEmMCQGCSqG SIb3DQEJARYXaG9zdG1hc3RlckB0YWNodGxlci5uZXQwHhcNMTEwOTA4MTM0OTM3 WhcNMzgwMTE4MTM0OTM3WjCBtjELMAkGA1UEBhMCREUxGTAXBgNVBAgMEEJhdmFy aWEgKEJheWVybikxGjAYBgNVBAcMEU11bmljaCAoTXVlbmNoZW4pMRkwFwYDVQQK DBB3d3cudGFjaHRsZXIubmV0MQ0wCwYDVQQLDARMREFQMR4wHAYDVQQDDBVsZGFw LmRtei50YWNodGxlci5uZXuuasd7fasdjjjs66shjdfasdlfsfRtYXN0ZXJAdGFj aHRsZXIubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA72v9bCpA Ga/ShpJuSScFCvyk5fMswTt2Ldng33aYFc100TbG4QjneT5AAWNv0QJ3fWz9WHHi OQ/zy1zNYM5eV9kiUopSPKWVFR70+bHyxKwmzozFpt1/DG0wQMNNpQAcmLoYruNv epWBfF4nMxvURnick52Dkybeu2faule5RDNbEX/9et+45UNwRd4uKJIKCIk4s1yU Z6HEZPKV5WUFcJHmxUMGiB2L9nAmM7rNuOm/R5FodlVR4+hkMalVCXfgGKh4p+xI KWoKkALTE2QzFNH91/ZzKMOz0zfQwAaIkAxnSHlgXklPS14xbPQVgWhz0iNyWVWG crRUohoQOk48wQIDAQABo3sSauJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1P cGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUOki5RbL08EdH nnwsA+5lfJKV01UwHwYDVR0jBBgwFoAUdCUxAsraWamNdLd+YkBYXGi0YmUwDQYJ KoZIhvcNAQEFBQADggEBAAR9KbjfcyPGU7jOMhhCLv/pR1LcfrM5sstQZPL2DzSh EzTLUqURoL+Zk3Qk5/vKPW776dgGfWq7glGO6MH1PT6bfmFUZmCenxuQ30KON17k 45PrI/WIWa2sNNTjR/dpggT9zfOtPUe/aBn/z82hltLhRwhUH34UtWbVOEuf0aOe CqBqt9Fi5HdAkjUAQzrqjasdhf77d6f7asdfj+CAKnE/8Ys+i1vILeE1/0ZnBj08 xe12KsVxq4RXINTVdFCkkBU5PErqDYnTFHXcJNKwMV5qCMca9A5o+drq6p2tEFuu ZF/WdBalCxxRRKJxbWUGjrfB9UW291WcqHB/rDH+LsM= -----END CERTIFICATE----- Signed certificate is in newcert.pem
Durch ausführen des Scriptes mit nachfolgendem Aufrufparameter /etc/pki/tls/misc/CA -sign
ist eine weitere neue Dateien unter
/etc/pki/CA
entstanden, welche mit nachfolgendem Befehl aufgelistet werden kann:
# ls -la /etc/pki/CA/new*.pem -rw-r--r--. 1 root root 4779 Sep 8 15:49 /etc/pki/CA/newcert.pem -rw-r--r--. 1 root root 1834 Sep 8 15:49 /etc/pki/CA/newkey.pem -rw-r--r--. 1 root root 1110 Sep 8 15:49 /etc/pki/CA/newreq.pem
WICHTIG - Die so entstandene Datei /etc/pki/CA/newcert.pem
enthält das neue Certificate!
Entfernen des Passwortes vom private key
Ein Problem ist durch die Erstellung der einzelnen Komponenten, wie in den drei vorhergehenden Schritten beschrieben noch offen.
WICHTIG - Der private key ist mit einem Passwort verschlüsselt !
Um dieses Problem zu lösen und das Passwort aus dem private key zu entfernen, kann folgender Aufruf von openssl
genutzt werden:
WICHTIG - Das Passwort, ist das Passwort, welches im Schritt Erstellen eines eigenen Certificate Requests verwendet wurde!
# openssl rsa < /etc/pki/CA/newkey.pem > /etc/pki/CA/key.pem Enter pass phrase: writing RSA key
Durch ausführen des oben genannten Befehls ist eine weitere neue Dateien unter
/etc/pki/tls/misc
entstanden, welche mit nachfolgendem Befehl aufgelistet werden kann:
# ls -la /etc/pki/CA/*key* -rw-r--r--. 1 root root 1679 Sep 8 15:57 /etc/pki/CA/key.pem -rw-r--r--. 1 root root 1834 Sep 8 15:49 /etc/pki/CA/newkey.pem
WICHTIG - Die so entstandene Datei /etc/pki/CA/key.pem
enthält den private key OHNE Passwort!
LDAPS-Konfiguration
Um den LDAP-Server OpenLDAP auch via LDAPS erreichbar zu machen sind nachfolgende Schritte notwendig. Es soll hier ein Self-Signed-Certificate zum Einsatz kommen, da dies für den eigenen Gebrauch am kostengünstigsten um vom Aufwand her, auch am realistischen durchzuführen ist (Kein Einsatz einer eigenen Zertifikatsverwaltung usw.).
Wie eine eigenes Zertifikat
- erstellt
- signiert
- ohne Passwortabfrage versehen
erstellt werden kann, kann ist hier beschrieben:
Installation Zertifikat
Nach dem ein Zertifikat wie hier: LDAP CentOS 6 - TLS-Zertifikat erstellen beschrieben erstellt wurden, müssen die benötigen Komponenten noch an die entsprechenden Stellen im Betriebssystem kopiert werden. Dazu sind nachfolgende Befehle notwendig.
Bevor mit der abschließenden Konfiguration von OpenLDAP zur Nutzung von LDAPS begonnen werden kann, sind die in den vorhergehenden Schritten erstellten Dateien:
/etc/pki/CA/key.pem
/etc/pki/CA/newcert.pem
/etc/pki/CA/cacert.pem
noch zu kopieren und ggf. umzubenennen und die Dateirechte der entsprechend anzupassen!
Als erstes werden mit den nachfolgenden Befehlen drei neue Verzeichnisse im bestehen Verzeichnis /etc/pki
angelegt:
# mkdir /etc/pki/openldap # mkdir /etc/pki/openldap/certs # mkdir /etc/pki/openldap/private
Anschließend werden mit den nachfolgenden Befehlen die entsprechenden Dateien an den jeweiligen Bestimmungsort kopiert und ggf. umbenannt:
# cp -a /etc/pki/CA/key.pem /etc/pki/openldap/private/key.pem # cp -a /etc/pki/CA/newcert.pem /etc/pki/openldap/certs/cert.pem # cp -a /etc/pki/CA/cacert.pem /etc/pki/openldap/certs/CAcert.pem
Die Benutzer- und Dateirechte der soeben kopieren und ggf. umbenannten Dateien
/etc/pki/openldap/private/key.pem
/etc/pki/openldap/certs/cert.pem
/etc/pki/openldap/certs/CAcert.pem
können mit folgenden Befehlen die Benutzerrechte wie folgt korrigiert werden:
# chown root.ldap /etc/pki/openldap/private/key.pem # chown root.ldap /etc/pki/openldap/certs/cert.pem # chown root.ldap /etc/pki/openldap/certs/CAcert.pem
und mit folgenden Befehlen die Dateirechte:
# chmod 640 /etc/pki/openldap/private/key.pem # chmod 640 /etc/pki/openldap/certs/cert.pem # chmod 640 /etc/pki/openldap/certs/CAcert.pem
Durch Ausführen der oben genannten Befehle sieht der Inhalt des Verzeichnisses
/etc/pki/openldap
wie folgt aus, welches mit nachfolgendem Befehl aufgelistet werden kann:
# ls -la /etc/pki/openldap/* /etc/pki/openldap/certs: total 24 drwxr-xr-x. 2 root root 4096 Sep 8 16:22 . drwxr-xr-x. 4 root root 4096 Sep 8 16:21 .. -rw-r-----. 1 root ldap 4617 Sep 8 16:12 CAcert.pem -rw-r-----. 1 root ldap 4820 Sep 8 16:13 cert.pem /etc/pki/openldap/private: total 12 drwxr-xr-x. 2 root root 4096 Sep 8 16:22 . drwxr-xr-x. 4 root root 4096 Sep 8 16:21 .. -rw-r-----. 1 root ldap 1679 Sep 8 16:14 key.pem
Die jeweiligen Arbeitskopien der gerade kopierten Dateien, können mit nachfolgenden Befehlen gelöscht werden:
# rm /etc/pki/CA/key.pem /etc/pki/CA/new*.pem rm: remove regular file `/etc/pki/CA/key.pem'? y rm: remove regular file `/etc/pki/CA/newcert.pem'? y rm: remove regular file `/etc/pki/CA/newkey.pem'? y rm: remove regular file `/etc/pki/CA/newreq.pem'? y
LDAPS Konfiguration: /etc/openldap/ldap.conf
Folgende Anpassungen der Konfigurationsdatei /etc/openldap/ldap.conf
müssem erfolgen, um grundsätzlich einen LDAPS-Server mit einem Self-Signed-Certificate zu betreiben:
# # LDAP Defaults # # See ldap.conf(5) for details # This file should be world readable but not world writable. BASE dc=tachtler, dc=net URI ldap://ldap.dmz.tachtler.net #SIZELIMIT 12 #TIMELIMIT 15 #DEREF never # Tachtler TLS_REQCERT allow
WICHTIG - Der Eintrag
TLS_REQCERT allow
ignoriert das Scheitern der Überprüfung des Server-Zertifikats !!!
LDAPS Konfiguration: /etc/sysconfig/ldap
Folgende Anpassungen der Konfigurationsdatei /etc/sysconfig/ldap
müssen zusätzlich erfolgen, um grundsätzlich einen LDAPS-Server zu betreiben:
# Options of slapd (see man slapd) # Tachtler # default: #SLAPD_OPTIONS= SLAPD_OPTIONS="-4" # options of slurpd (see man slurpd) # #SLURPD_OPTIONS= # At least one of SLAPD_LDAP, SLAPD_LDAPI and SLAPD_LDAPS must be set to 'yes'! # # Run slapd with -h "... ldap:/// ..." # yes/no, default: yes #SLAPD_LDAP=yes # Run slapd with -h "... ldapi:/// ..." # yes/no, default: no #SLAPD_LDAPI=no # Run slapd with -h "... ldaps:/// ..." # yes/no, default: no # Tachtler # default: #SLAPD_LDAPS=no SLAPD_LDAPS=yes # Run slapd with -h "... $SLAPD_URLS ..." # This option could be used instead of previous three ones, but: # - it doesn't overwrite settings of $SLAPD_LDAP, $SLAPD_LDAPS and $SLAPD_LDAPI options # - it isn't overwritten by settings of $SLAPD_LDAP, $SLAPD_LDAPS and $SLAPD_LDAPI options # example: SLAPD_URLS="ldapi:///var/lib/ldap_root/ldapi ldapi:/// ldaps:///" # default: empty #SLAPD_URLS="" # Maximum allowed time to wait for slapd shutdown on 'service ldap stop' (in seconds) #SLAPD_SHUTDOWN_TIMEOUT=3 # Parameters to ulimit called right before starting slapd # - use this to change system limits for slapd #SLAPD_ULIMIT_SETTINGS=""
WICHTIG - Der Eintrag
SLAPD_LDAPS=yes
der das Starten und Lauschen des OpenLDAP_Servers bzw. slapd
-Daemons/Dienstes via ldaps:
bzw. auf Port 636
realisiert!
LDAPS Konfiguration: /etc/openldap/slapd.d/cn=config.ldif
Um den OpenLDAP-Server bzw. den slapd
-Daemon/Dienst via LDAPS erreichbar zu machen sind nachfolgende Ergänzungen in der Konfigurationsdatei
/etc/openldap/slapd.d/cn=config.ldif
notwendig.
WICHTIG - Die Konfigurationsdatei im und unterhalb des Verzeichnisses sollten NICHT direkt editiert werden !!!
Um Änderungen durchzuführen, soll eine Änderungsdatei im *.LDIF-Format erstellt werden.
Dazu soll im ersten Schritt ein Verzeichnis mit dem Name
/etc/openldap/ldif
erstellt werden, was mit nachfolgendem Befehl durchgeführt werden kann:
# mkdir /etc/openldap/ldif
Die Besitzrechte sollten mit nachfolgenden Befehl angepasst werden:
# chown -R ldap.ldap /etc/openldap/ldif/
ebenfalls die Dateirechte, mit nachfolgendem Befehl:
# chmod -R 700 /etc/openldap/ldif/
Der Name soll hier z.B.
- /etc/openldap/ldif/TLS.ldif
lauten und nachfolgenden Inhalt haben
dn: cn=config changetype: modify add: olcTLSCipherSuite olcTLSCipherSuite: HIGH - add: olcTLSCertificateFile olcTLSCertificateFile: /etc/pki/openldap/certs/cert.pem - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/pki/openldap/private/key.pem - add: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/pki/openldap/certs/CAcert.pem
Durch nachfolgenden Befehl, wird die Konfigurationsdatei im *.LDIF-Format –> /etc/openldap/ldif/TLS.ldif
zur bestehenden OpenLDAP-Server bzw. slapd
-Daemon/Dienst-Konfiguration hinzugefügt:
# ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/TLS.ldif Enter LDAP Password: modifying entry "cn=config"
Eine Überprüfung, ob das Hinzufügen der zusätzlichen Konfigurationen erfolgreich war, kann mit nachfolgendem Befehl durchgeführt werden und sollte eine Ausgabe wie nachfolgend dargestellt, ausgeben:
# ldapsearch -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)" Enter LDAP Password: # extended LDIF # # LDAPv3 # base <cn=config> with scope subtree # filter: (objectclass=olcGlobal) # requesting: ALL # # config dn: cn=config objectClass: olcGlobal cn: config olcConfigFile: /etc/openldap/slapd.conf olcConfigDir: /etc/openldap/slapd.d olcAllows: bind_v2 olcArgsFile: /var/run/openldap/slapd.args olcAttributeOptions: lang- olcAuthzPolicy: none olcConcurrency: 0 olcConnMaxPending: 100 olcConnMaxPendingAuth: 1000 olcGentleHUP: FALSE olcIdleTimeout: 15 olcIndexSubstrIfMaxLen: 4 olcIndexSubstrIfMinLen: 2 olcIndexSubstrAnyLen: 4 olcIndexSubstrAnyStep: 2 olcIndexIntLen: 4 olcLocalSSF: 71 olcLogLevel: Stats olcPidFile: /var/run/openldap/slapd.pid olcReadOnly: FALSE olcReferral: ldap://ldap.dmz.tachtler.net olcReverseLookup: FALSE olcSaslSecProps: noplain,noanonymous olcSockbufMaxIncoming: 262143 olcSockbufMaxIncomingAuth: 16777215 olcThreads: 16 olcTLSCRLCheck: none olcTLSVerifyClient: never olcToolThreads: 1 olcWriteTimeout: 0 olcTLSCipherSuite: HIGH olcTLSCertificateFile: /etc/pki/openldap/certs/cert.pem olcTLSCertificateKeyFile: /etc/pki/openldap/private/key.pem olcTLSCACertificateFile: /etc/pki/openldap/certs/CAcert.pem # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
WICHTIG - Die Einträge
olcTLSCipherSuite: HIGH
olcTLSCertificateFile: /etc/pki/openldap/certs/cert.pem
olcTLSCertificateKeyFile: /etc/pki/openldap/private/key.pem
olcTLSCACertificateFile: /etc/pki/openldap/certs/CAcert.pem
ermöglichen die Nutzung eines LDAPS-Servers.
WICHTIG - Ein Neustart des OpenLDAP-Servers ist aufgrund der Änderungen in weiteren Konfigurationsdateien notwendig!!!
Der Neustart des OpenLDAP-Server bzw. den slapd
-Daemon/Dienstes, wird mit nachfolgendem Befehl durchgeführt:
# service slapd restart Stopping slapd: [ OK ] Starting slapd: [ OK ]
Überprüfung LDAPS
Um zu überprüfen, ob der OpenLDAP-Server bzw. den slapd
-Daemon/Dienst via LDAPS auch via LDAPS erreichbar ist, kann nachfolgender Befehl verwendet werden:
# netstat -tulpen | grep slapd tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 0 19761 3358/slapd tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 0 19759 3358/slapd
Das verwendete Self-Signed-Certificate, kann mit nachfolgendem Befehl überprüft werden:
# openssl s_client -connect ldap.dmz.tachtler.net:636 -showcerts -state -CAfile /etc/pki/openldap/certs/CAcert.pem -cert /etc/pki/openldap/certs/cert.pem -key /etc/pki/openldap/private/key.pem CONNECTED(00000003) SSL_connect:before/connect initialization SSL_connect:SSLv2/v3 write client hello A SSL_connect:SSLv3 read server hello A depth=1 C = DE, ST = Bavaria (Bayern), O = www.tachtler.net, OU = CA, CN = ldap.dmz.tachtler.net, emailAddress = hostmaster@tachtler.net verify return:1 depth=0 C = DE, ST = Bavaria (Bayern), L = Munich (Muenchen), O = www.tachtler.net, OU = LDAP, CN = ldap.dmz.tachtler.net, emailAddress = hostmaster@tachtler.net verify return:1 SSL_connect:SSLv3 read server certificate A SSL_connect:SSLv3 read server done A SSL_connect:SSLv3 write client key exchange A SSL_connect:SSLv3 write change cipher spec A SSL_connect:SSLv3 write finished A SSL_connect:SSLv3 flush data SSL_connect:SSLv3 read server session ticket A SSL_connect:SSLv3 read finished A --- Certificate chain 0 s:/C=DE/ST=Bavaria (Bayern)/L=Munich (Muenchen)/O=www.tachtler.net/OU=LDAP/CN=ldap.dmz.tachtler.net/emailAddress=hostmaster@tachtler.net i:/C=DE/ST=Bavaria (Bayern)/O=www.tachtler.net/OU=CA/CN=ldap.dmz.tachtler.net/emailAddress=hostmaster@tachtler.net -----BEGIN CERTIFICATE----- MIIEUDCCAzigAwI7djjfeDQ6NAJB/zS0MA0GCSqGSIb3DQEBBQUAMIGYMQswCQYD VQQGEwJERTEZMBcGA1UECAwQQmF2YXJpYSAoQmF5ZXJuKTEZMBcGA1UECgwQd3d3 LnRhY2h0bGVyLm5ldDELMAkGA1UECwwCQ0ExHjAcBgNVBAMMFWxkYXAuZG16LnRh Y2h0bGVyLm5ldDEmMCQGCSqGSIb3DQEJARYXaG9zdG1hc3RlckB0YWNodGxlci5u ZXQwIBcNMTEwOTA48978asdfasjdfasdgTEyMzExNDEzNDRaMIG2MQswCQYDVQQG EwJERTEZMBcGA1UECAwQQmF2YXJpYSAoQmF5ZXJuKTEaMBgGA1UEBwwRTXVuaWNo IChNdWVuY2hlbikxGTAXBgNVBAoMEHd3dy50YWNodGxlci5uZXQxDTALBgNVBAsM BExEQVAxHjAcBgNVBAMMFWxkYXAuZG16LnRhY2h0bGVyLm5ldDEmMCQGCSqGSIb3 DQEJARYXaG9zdG1hc3RlckB0CC65fhZDci5uZXQwggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQC4sVYDwCT4eC3Dn/mystyJr/wwQVVpj0j/26/kKs5qfGpQ 7wXChhGpQl+2fwMp1ltcKHLYqV+LyPw7NkxV/hr/HiFojpVkcO9cSbWb4IAqqihg +/zE9Wvj9mmoh9ckRvOf0B7gr3zdwBwCCoWcyFYuCuqp8a93T2nTpEmliuOLwCLT CToJQQhfp4DF32WfnXhd828kUiSh85wxRnv3vX7J3y4252ld4newHC9X1zcdI0Nc yVWHkwds+Z/xpFnEg4pyErrV7PTO78vMO/ymimjcpb/lFA+6EZ82ET6kLPdqn3+v SDCkUepUkwB3Ft++E4LJ1+8ZKsfQaMHah6ff038pAgMBAAGjezB5MAkGA1UdEwQC MAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRl MB0GA1UdDgQWBBR8AV7se/J1iY/jxMDee36Cvhg4ZTAfBgNVHSMEGDAWgBTC1haO B+Qf3fCZIbLdLSBGCSqTHDANBgkqhkiG9w0BAQUFAAOCAQEAkHcKg5P6sxmYBll0 ISOH63tfmQ/zTP+NUYbivexgeO/gK+IiwUnxiENMDEf0yk9HVKADPnIbgfa6nRrm T2jwl7C4SSBjBBBDbRSC2Pr2E4igk7o9cm/1paTleIDA3q5umgejDxt6ZzLRAfRy 5FSHXhaTXEk4qXJvsuDsx7dkk00s3uzt7Nznk3vaInZv1wAvZA692267bwXw76+f NDzpqVP5s0GRvBeIoYjfzRhBd0exmCpHUDq2zZrY6wH2AvJFf8elkEDbvk8uIyQt ANqZdAyJVTrYphYxJcQxQ6Nt4xlY92w/SM1QHSu9r6wl92IDnP3j/1PXTCU3//7Q EhPFbQ== -----END CERTIFICATE----- 1 s:/C=DE/ST=Bavaria (Bayern)/O=www.tachtler.net/OU=CA/CN=ldap.dmz.tachtler.net/emailAddress=hostmaster@tachtler.net i:/C=DE/ST=Bavaria (Bayern)/O=www.tachtler.net/OU=CA/CN=ldap.dmz.tachtler.net/emailAddress=hostmaster@tachtler.net -----BEGIN CERTIFICATE----- MIIEBzCCAu+gAwIBAgIJAKQ6NAJB/zSzMA0GCSqGSIb3DQEBBQUAMIGYMQswCQYD VQQGEwJnicjZMBcGA1UECAwQQmF2YXJpYSAoQmF5ZXJuKTEZMBcGA1UECgwQd3d3 LnRhY2h0bGVyLm5ldDELMAkGA1UECwwCQ0ExHjAcBgNVBAMMFWxkYXAuZG16LnRh Y2h0bGVyLm5ldDEmMCQGCSqGSIb3DQEJARYXaG9zdG1hc3RlckB0YWNodGxlci5u ZXQwIBcNMTEwOTA4MTQxMjI0WhgPMjA5OTEyMzExNDEyMjRaMIGYMQswCQYDVQQG EwJERTEZMBcGA189asjdjasdjfdf444oQmF5ZXJuKTEZMBcGA1UECgwQd3d3LnRh Y2h0bGV778jJDHDD77dj77f3CwwCQ0ExHjAcBgNVBAMMFWxkYXAuZG16LnRhY2h0 bGVyLm5ldDEmMCQGCSqGSIb3DQEJARYXaG9zdG1hc3RlckB0YWNodGxlci5uZXQw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDDoRM+ghtv3kZvn93pRH++ k5mEJL96tbAUGNIrIIrdH689asdfasdfjj88KJxz38pID84jyJvH2gcWahAsnOv4 5L5mctw9a+qVy4GONaaD5xqDlrU+s393hL4Nrp3SG7IiIt19RtQETma/9PWk8Be3 IdF7GGNEppkmbq1bLw5jvlth9NUxxI/loM/yLp6EGJgNi4hSIfR1FQoNTBylGS3F 4Jo7pzNGWGb9tMtS+XHP+tL9dffwSXAcdfdf55goI1xDhkvigvyRQNxRpqvfOcuu Ev+ZyTG5J6VqG+T4ZX0FxIJnsg4dsGAIykzkiagIQwKYMBGhBnJs7OHNjnknwoVd AgMBAAGjUDBOMB0GA1UdDgQWBBTC1haOB+Qf3fCZIbLdLSBGCSqTHDAfBgNVHSME GDAWgBTC1haOB+Qf3fCZIbLdLSBGCSqTHDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3 DQEBBQUAA4IBAQB+MGI2HwwRzfSuAGPjhjfmHE4DS7ba3QpuEzVYgKji9GlyjBrl 0EOwNxIdwkstHSH9hZshVCvuvLXEvHieN8ElF/ujoUQ2KvRCl+jvdKZjIesrAy7t +pjh4zj5/F6Y1EhESGOWEDoCyrpssZ4QomxgBX2+LU5YJ7FIJJeowAyBRF8CiSVD uJ3xUaU5l8AibbVptFpKMEDfhoW4nTs/qx2s/uTZagY2ho/S/hjufVHrSzrKWAcX noLTofBCNnTdWOkPQ00//YHnIX7tCjXYofVFr0s74w1BXNFkQcgfrF1IO9/Bu84k kn0li8z4HNJXEvl3+et5U1O5a0sDAfH6jvfQ -----END CERTIFICATE----- --- Server certificate subject=/C=DE/ST=Bavaria (Bayern)/L=Munich (Muenchen)/O=www.tachtler.net/OU=LDAP/CN=ldap.dmz.tachtler.net/emailAddress=hostmaster@tachtler.net issuer=/C=DE/ST=Bavaria (Bayern)/O=www.tachtler.net/OU=CA/CN=ldap.dmz.tachtler.net/emailAddress=hostmaster@tachtler.net --- No client certificate CA names sent --- SSL handshake has read 2478 bytes and written 439 bytes --- New, TLSv1/SSLv3, Cipher is AES256-SHA Server public key is 2048 bit Secure Renegotiation IS supported Compression: zlib compression Expansion: zlib compression SSL-Session: Protocol : TLSv1 Cipher : AES256-SHA Session-ID: E9BACCF171DF0AC54C5182E2F87A61076322A54247F3F48BF138CA34240895A6 Session-ID-ctx: Master-Key: 6C741E814A4F3C4CA6BB51C878F53A1F8D2F5C8238355F322C5D60883119DE3521CC584DEEFB5E9198E4EC8A1BEEFEA6 Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None TLS session ticket: 0000 - 72 33 e4 86 d0 97 40 89-04 a2 26 82 23 21 dc 38 t3....@...&.#!.8 0010 - 91 91 00 c5 36 ec 1a 0d-1c e7 90 25 0b 80 3b 06 ....3......%..;. 0020 - fb c8 29 dd d8 3d 6b fc-c0 2a 5d 8d 2b 1b 57 d5 ..)..=k..*].+.W. 0030 - 26 a6 8f 2a 69 89 33 21-cf 68 0b 14 20 09 d7 ff &..*i.3!.h.. ... 0040 - 34 c1 d5 a5 61 5a 35 38-68 4d 6f 24 6f c1 6f 45 4...aM53hto$o.oE 0050 - 53 ee 34 f4 48 ed 31 20-2d c0 7f 40 51 4b 98 e9 S.5.H.1 -..@eK.. 0060 - ef c5 34 39 34 27 16 3c-63 23 e1 e7 a3 26 0c e3 ...94'.<c#...&.. 0070 - 1b cc 63 c6 db a7 70 cc-5c ab 36 25 0b a7 eb 1e ..c...p.\.6$.... 0080 - 6d ab 53 99 37 23 b3 d2-3b fb aa fb d8 6a c1 f7 m.f.7#..;.z..j.. 0090 - 88 7f de 3e 6b a6 bb 34-e2 d0 df 9e 1a e0 1d 12 ...>k..T...67r.. 00a0 - 06 06 fd 8e 38 a2 18 f0-48 59 9a 3c 2a c5 1a d5 .p..8...HY.<*U.. Compression: 1 (zlib compression) Start Time: 1315496322 Timeout : 300 (sec) Verify return code: 0 (ok) ---
HINWEIS - Die Ausgabe kann mit der Tastenkombination [CRTL/STRG-c] beendet werden !!!
Initiale DIT erstellen
Nach der Installation und Konfiguration des OpenLDAP-Servers bzw. slapd
-Daemons/Dienstes, sollte dieser mit Daten gefüllt werden. Die Daten müssen in den
- DIT Directory Information Tree eingestellt werden.
Dies soll hier anhand einer Migration von bereits bestehenden Benutzers in den DIT Directory Information Tree veranschaulicht werden. Die Informationen werden in sogenannten *.LDIF-Format-Dateien gespeichert.
Dazu soll im ersten Schritt ein Verzeichnis mit dem Name
/etc/openldap/ldif
erstellt werden (falls dies nicht schon geschehen sein sollte), was mit nachfolgendem Befehl durchgeführt werden kann:
# mkdir /etc/openldap/ldif
Die Besitzrechte sollten mit nachfolgenden Befehl angepasst werden:
# chown -R ldap.ldap /etc/openldap/ldif/
ebenfalls die Dateirechte, mit nachfolgendem Befehl:
# chmod -R 700 /etc/openldap/ldif/
Als nächstes wird nun eine Datei mit z.B. dem Namen der verwendeten Domain
- /etc/openldap/ldif/tachtler.net.ldif
und mit nachfolgendem Inhalt erstellt:
## Build the root node. dn: dc=tachtler,dc=net dc: Tachtler objectClass: dcObject objectClass: organizationalUnit ou: tachtler Dot net ## Build the Manager cn. dn: cn=Manager,dc=tachtler,dc=net cn: Manager objectClass: organizationalRole ## Build the People ou. dn: ou=People,dc=tachtler,dc=net ou: People objectClass: organizationalUnit ## Build the Group ou. dn: ou=Group,dc=tachtler,dc=net ou: Group objectClass: organizationalUnit
WICHTIG - Es ist erforderlich, dass der OpenLDAP-Server bzw. slapd
-Daemon/Dienst gestoppt wird !!!
Dies kann mit folgendem Befehl durchgeführt werden:
# service slapd stop Stopping slapd: [ OK ]
Mit folgendem Befehl werden nun die Daten aus der *.LDIF-Format-Datei
/etc/openldap/ldif/tachtler.net.ldif
in den DIT Directory Information Tree eingestellt:
# slapadd -v -l /etc/openldap/ldif/tachtler.net.ldif added: "dc=tachtler,dc=net" (00000001) _########### 55.56% eta none elapsed none spd 459.9 /s added: "cn=Manager,dc=tachtler,dc=net" (00000002) added: "ou=user,dc=tachtler,dc=net" (00000003) added: "ou=group,dc=tachtler,dc=net" (00000004) .#################### 100.00% eta none elapsed none fast! Closing DB...
Bevor der OpenLDAP-Servers bzw. slapd
-Daemons/Dienst wieder gestartet werden kann, sind nachfolgende Anpassungen im Verzeichnis
/var/lib/ldap
durchzuführen.
Anpassung der Besitzrechte - einiger - Dateien, mit nachfolgendem Befehl:
# chown ldap:ldap /var/lib/ldap/ou.bdb /var/lib/ldap/cn.bdb /var/lib/ldap/objectClass.bdb
Ob das setzen der richtigen Besitzrechte erfolgreich war, kann mit nachfolgendem Befehl überprüft werden, die Ausgabe sollte in etwa wie folgt aussehen:
# ls -la /var/lib/ldap total 19964 drwx------. 3 ldap ldap 4096 Sep 9 09:18 . drwxr-xr-x. 16 root root 4096 Sep 7 15:42 .. -rw-r--r--. 1 ldap ldap 4096 Sep 9 09:19 alock -rw-------. 1 ldap ldap 8192 Sep 9 09:18 cn.bdb -rw-------. 1 ldap ldap 24576 Sep 9 09:18 __db.001 -rw-------. 1 ldap ldap 17637376 Sep 9 09:19 __db.002 -rw-------. 1 ldap ldap 335552512 Sep 9 09:19 __db.003 -rw-------. 1 ldap ldap 2359296 Sep 9 09:19 __db.004 -rw-------. 1 ldap ldap 802816 Sep 9 09:19 __db.005 -rw-------. 1 ldap ldap 32768 Sep 9 09:18 __db.006 -rw-r--r--. 1 ldap ldap 921 Sep 7 17:04 DB_CONFIG -rw-------. 1 ldap ldap 8192 Sep 9 09:18 dn2id.bdb -rw-------. 1 ldap ldap 32768 Sep 9 09:18 id2entry.bdb -rw-------. 1 ldap ldap 10485760 Sep 9 09:19 log.0000000001 -rw-------. 1 ldap ldap 8192 Sep 9 09:18 objectClass.bdb -rw-------. 1 ldap ldap 8192 Sep 9 09:18 ou.bdb
WICHTIG - Es ist erforderlich, dass der OpenLDAP-Server bzw. slapd
-Daemon/Dienst wieder gestartet wird !!!
Dies kann mit folgendem Befehl durchgeführt werden:
# service slapd start Starting slapd: [ OK ]
Ein Suchanfrage zum Testen, ob das Anlegen des DIT Directory Information Tree erfolgreich war, kann mit folgendem Befehl durchgeführt werden:
# ldapsearch -x -b "dc=tachtler,dc=net" "(objectclass=*)" # extended LDIF # # LDAPv3 # base <dc=tachtler,dc=net> with scope subtree # filter: (objectclass=*) # requesting: ALL # # tachtler.net dn: dc=tachtler,dc=net dc: Tachtler objectClass: dcObject objectClass: organizationalUnit ou: tachtler Dot net # Manager, tachtler.net dn: cn=Manager,dc=tachtler,dc=net cn: Manager objectClass: organizationalRole # People, tachtler.net dn: ou=People,dc=tachtler,dc=net ou: People objectClass: organizationalUnit # Group, tachtler.net dn: ou=Group,dc=tachtler,dc=net ou: Group objectClass: organizationalUnit # search result search: 2 result: 0 Success # numResponses: 5 # numEntries: 4
Benutzer anlegen
Ziel dieser Anlage von neuen Benutzern soll es sein, aus den Dateien:
/etc/passwd
und/etc/group
alle Benutzer und Gruppen herauszufiltern, welche eine Benutzer bzw. Gruppenkennung größer/gleich der Zahl 500
haben.
Dies sind in der Regel alle tatsächlichen Benutzer und keine technischen Benutzer wie z.B. httpd
usw. Diese sollen dann in den LDAP-Directory Server überführt werden.
Installation Migrationstools
Um die aus den Dateien
/etc/passwd
und/etc/group
heruasgefilterten Benutzer in den OpenLDAP-Server bzw. slapd
-Daemon/Dienst zu migrieren, können bereits dafür existierende Werkzeuge in Form des RPM-Paktes:
installiert werden.
Mit nachfolgendem Befehl, wird das Pakete migrationstools
installiert:
# yum install migrationtools Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirror.de.leaseweb.net * extras: mirror.de.leaseweb.net * updates: mirror.de.leaseweb.net Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package migrationtools.noarch 0:47-7.el6 set to be updated --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: migrationtools noarch 47-7.el6 base 25 k Transaction Summary ================================================================================ Install 1 Package(s) Upgrade 0 Package(s) Total download size: 25 k Installed size: 104 k Is this ok [y/N]: y Downloading Packages: migrationtools-47-7.el6.noarch.rpm | 25 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : migrationtools-47-7.el6.noarch 1/1 Installed: migrationtools.noarch 0:47-7.el6 Complete!
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket migrationstools
installiert wurden.
# rpm -qil migrationtools Name : migrationtools Relocations: (not relocatable) Version : 47 Vendor: CentOS Release : 7.el6 Build Date: Tue 24 Aug 2010 06:09:18 PM CEST Install Date: Fri 09 Sep 2011 10:45:30 AM CEST Build Host: c6b2.bsys.dev.centos.org Group : System Environment/Daemons Source RPM: migrationtools-47-7.el6.src.rpm Size : 106663 License: BSD Signature : RSA/8, Sun 03 Jul 2011 06:30:14 AM CEST, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://www.padl.com/OSS/MigrationTools.html Summary : Migration scripts for LDAP Description : The MigrationTools are a set of Perl scripts for migrating users, groups, aliases, hosts, netgroups, networks, protocols, RPCs, and services from existing nameservices (flat files, NIS, and NetInfo) to LDAP. /usr/share/doc/migrationtools-47 /usr/share/doc/migrationtools-47/README /usr/share/doc/migrationtools-47/migration-tools.txt /usr/share/migrationtools /usr/share/migrationtools/migrate_aliases.pl /usr/share/migrationtools/migrate_all_netinfo_offline.sh /usr/share/migrationtools/migrate_all_netinfo_online.sh /usr/share/migrationtools/migrate_all_nis_offline.sh /usr/share/migrationtools/migrate_all_nis_online.sh /usr/share/migrationtools/migrate_all_nisplus_offline.sh /usr/share/migrationtools/migrate_all_nisplus_online.sh /usr/share/migrationtools/migrate_all_offline.sh /usr/share/migrationtools/migrate_all_online.sh /usr/share/migrationtools/migrate_automount.pl /usr/share/migrationtools/migrate_base.pl /usr/share/migrationtools/migrate_common.ph /usr/share/migrationtools/migrate_fstab.pl /usr/share/migrationtools/migrate_group.pl /usr/share/migrationtools/migrate_hosts.pl /usr/share/migrationtools/migrate_netgroup.pl /usr/share/migrationtools/migrate_netgroup_byhost.pl /usr/share/migrationtools/migrate_netgroup_byuser.pl /usr/share/migrationtools/migrate_networks.pl /usr/share/migrationtools/migrate_passwd.pl /usr/share/migrationtools/migrate_profile.pl /usr/share/migrationtools/migrate_protocols.pl /usr/share/migrationtools/migrate_rpc.pl /usr/share/migrationtools/migrate_services.pl /usr/share/migrationtools/migrate_slapd_conf.pl
Vorbereitung Migrationstools
Zur Vorbereitung ist es notwendig, dass ein mitgeliefertes Script angepasst wird. Das Script
/usr/share/migrationstools/migrate_common.ph
sollte an den entsprechenden Stellen wie folgt beschrieben, angepasst werden (nur relevanter Auszug):
... # Default DNS domain # Tachtler # default: $DEFAULT_MAIL_DOMAIN = "padl.com"; $DEFAULT_MAIL_DOMAIN = "tachtler.net"; # Default base # Tachtler # default: $DEFAULT_BASE = "dc=padl,dc=com"; $DEFAULT_BASE = "dc=tachtler,dc=net"; ...
Nach erfolgreicher Anpassung, kann mit dem extrahieren der beschriebenen Benutzer begonnen werden. Dazu sind die folgenden beiden Befehle notwendig.
Die Befehle extrahieren alle Benutzer mit einer Benutzerkennung größer/gleich 500
und einer Gruppenkennung, ebenfalls größer/gleich 500
in jeweils zwei separate Dateien mit den Namen:
/etc/openldap/ldif/passwd
und/etc/openldap/ldif/group
Die Befehle lauten wie folgt:
# grep ":5[0-9][0-9]" /etc/passwd > /etc/openldap/ldif/passwd
und
# grep ":5[0-9][0-9]" /etc/group > /etc/openldap/ldif/group
Der Inhalt der Dateien sollte in etwa wie folgt aussehen:
# cat /etc/openldap/ldif/passwd klaus:x:500:500:Klaus Tachtler:/home/klaus:/bin/bash petra:x:501:501:Petra Tachtler:/home/petra:/bin/bash
und
# cat /etc/openldap/ldif/group klaus:x:500: petra:x:501:
Benutzermigration
Zur Durchführung der Migration kommen folgende Scripte (Perl) zum Einsatz, welche sich im Verzeichnis
/usr/share/migrationstools/
befinden und mit den nachfolgenden Befehlen aufgerufen werden:
# /usr/share/migrationtools/migrate_passwd.pl /etc/openldap/ldif/passwd > /etc/openldap/ldif/passwd.ldif
und
# /usr/share/migrationtools/migrate_group.pl /etc/openldap/ldif/group > /etc/openldap/ldif/group.ldif
Der Inhalt der beiden Dateien kann mit nachfolgenden Befehlen zur Anzeige gebracht werden und sollte wie folgt aussehen:
# cat /etc/openldap/ldif/passwd.ldif dn: uid=klaus,ou=People,dc=tachtler,dc=net uid: klaus cn: Klaus Tachtler objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {crypt}$6$4nqgf0.K$F4Vzf54djq1nC.uyNCo0lRku7sdfSEjY4Y/CBMn8mv5T82176.WPsXuc/7brqMb65dfeByTfUzROmu0si0ySu1 shadowLastChange: 15210 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 500 gidNumber: 500 homeDirectory: /home/klaus gecos: Klaus Tachtler dn: uid=petra,ou=People,dc=tachtler,dc=net uid: petra cn: Petra Tachtler objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword: {crypt}$6$rprteHQD$i2u.9nc87gthiuZIejv7RIpERNu22IERxMZzGvJg45Tnas7CkSqEQg0kutd8D1ycIynqwhfQ8vlUveV78zF3W1 shadowLastChange: 15210 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 501 gidNumber: 501 homeDirectory: /home/petra gecos: Petra Tachtler
und
# cat /etc/openldap/ldif/group.ldif dn: cn=klaus,ou=Group,dc=tachtler,dc=net objectClass: posixGroup objectClass: top cn: klaus userPassword: {crypt}x gidNumber: 500 dn: cn=petra,ou=Group,dc=tachtler,dc=net objectClass: posixGroup objectClass: top cn: petra userPassword: {crypt}x gidNumber: 501
WICHTIG - Es ist erforderlich, dass der OpenLDAP-Server bzw. slapd
-Daemon/Dienst gestoppt wird !!!
Dies kann mit folgendem Befehl durchgeführt werden:
# service slapd stop Stopping slapd: [ OK ]
Mit folgenden Befehlen werden nun die Daten aus der Datei
/etc/openldap/ldif/passwd.ldif
und/etc/openldap/ldif/group.ldif
in den DIT Directory Information Tree eingestellt:
# slapadd -v -l /etc/openldap/ldif/passwd.ldif _############# 66.07% eta none elapsed none spd 1.1 k/s added: "uid=klaus,ou=People,dc=tachtler,dc=net" (00000005) added: "uid=petra,ou=People,dc=tachtler,dc=net" (00000006) .#################### 100.00% eta none elapsed none fast! Closing DB...
und
# slapadd -v -l /etc/openldap/ldif/group.ldif added: "cn=klaus,ou=Group,dc=tachtler,dc=net" (00000007) added: "cn=petra,ou=Group,dc=tachtler,dc=net" (00000008) _#################### 100.00% eta none elapsed none fast! Closing DB...
Bevor der OpenLDAP-Servers bzw. slapd
-Daemons/Dienst wieder gestartet werden kann, sind nachfolgende Anpassungen im Verzeichnis
/var/lib/ldap
durchzuführen.
Anpassung der Besitzrechte - einiger - Dateien, mit nachfolgendem Befehl:
chown ldap:ldap /var/lib/ldap/gidNumber.bdb /var/lib/ldap/loginShell.bdb /var/lib/ldap/uid.bdb /var/lib/ldap/uidNumber.bdb
Ob das setzen der richtigen Besitzrechte erfolgreich war, kann mit nachfolgendem Befehl überprüft werden, die Ausgabe sollte in etwa wie folgt aussehen:
# ls -la /var/lib/ldap total 20096 drwx------. 3 ldap ldap 4096 Sep 9 11:42 . drwxr-xr-x. 16 root root 4096 Sep 7 15:42 .. -rw-r--r--. 1 ldap ldap 2048 Sep 9 11:42 alock -rw-------. 1 ldap ldap 8192 Sep 9 11:42 cn.bdb -rw-------. 1 ldap ldap 24576 Sep 9 11:42 __db.001 -rw-------. 1 ldap ldap 17637376 Sep 9 11:42 __db.002 -rw-------. 1 ldap ldap 335552512 Sep 9 11:42 __db.003 -rw-------. 1 ldap ldap 2359296 Sep 9 11:42 __db.004 -rw-------. 1 ldap ldap 802816 Sep 9 11:42 __db.005 -rw-------. 1 ldap ldap 32768 Sep 9 11:42 __db.006 -rw-r--r--. 1 ldap ldap 921 Sep 7 17:04 DB_CONFIG -rw-------. 1 ldap ldap 8192 Sep 9 11:42 dn2id.bdb -rw-------. 1 ldap ldap 8192 Sep 9 11:42 gidNumber.bdb -rw-------. 1 ldap ldap 32768 Sep 9 11:42 id2entry.bdb -rw-------. 1 ldap ldap 10485760 Sep 9 11:42 log.0000000001 -rw-------. 1 ldap ldap 8192 Sep 9 11:42 loginShell.bdb -rw-------. 1 ldap ldap 8192 Sep 9 11:42 objectClass.bdb -rw-------. 1 ldap ldap 8192 Sep 9 11:38 ou.bdb -rw-------. 1 ldap ldap 8192 Sep 9 11:42 uid.bdb -rw-------. 1 ldap ldap 8192 Sep 9 11:42 uidNumber.bdb
WICHTIG - Es ist erforderlich, dass der OpenLDAP-Server bzw. slapd
-Daemon/Dienst wieder gestartet wird !!!
Dies kann mit folgendem Befehl durchgeführt werden:
# service slapd start Starting slapd: [ OK ]
Zur Überprüfung ob die Migration korrekt funktioniert hat, kann folgender Befehl verwendet werden, welche die nachfolgende Ausgabe erzeugen sollte:
# ldapsearch -x -b "uid=klaus,ou=People,dc=tachtler,dc=net" "(objectclass=*)" # extended LDIF # # LDAPv3 # base <uid=klaus,ou=People,dc=tachtler,dc=net> with scope subtree # filter: (objectclass=*) # requesting: ALL # # klaus, People, tachtler.net dn: uid=klaus,ou=People,dc=tachtler,dc=net uid: klaus cn: Klaus Tachtler objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowLastChange: 15210 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 500 gidNumber: 500 homeDirectory: /home/klaus gecos: Klaus Tachtler # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Beispielabfragen
1. Eine einfache Suchabfrage mittels ldapsearch
nach der uid
:
# ldapsearch -x -LLL -H ldap://ldap.dmz.tachtler.net -b "dc=tachtler,dc=net" "uid=klaus" dn: uid=klaus,ou=People,dc=tachtler,dc=net uid: klaus cn: Klaus Tachtler objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowLastChange: 15210 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 500 gidNumber: 500 homeDirectory: /home/klaus gecos: Klaus Tachtler
2. Eine einfache Suchabfrage mittels ldapsearch
inklusive Anmeldung als „Benutzer“ klaus
nach der uid
:
# ldapsearch -x -LLL -H ldap://ldap.dmz.tachtler.net -b "dc=tachtler,dc=net" "uid=petra" -W -D "uid=klaus,ou=People,dc=tachtler,dc=net" Enter LDAP Password: dn: uid=petra,ou=People,dc=tachtler,dc=net uid: petra cn: Petra Tachtler objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount shadowLastChange: 15210 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 501 gidNumber: 501 homeDirectory: /home/petra gecos: Petra Tachtler
3. Ein einfacher Vergleich von Daten mittels ldapcompare
auf die uidNumber
:
# ldapcompare -x uid=klaus,ou=People,dc=tachtler,dc=net uidNumber:500 TRUE
und mit einem falschen Wert:
# ldapcompare -x uid=klaus,ou=People,dc=tachtler,dc=net uidNumber:501 FALSE
"Anonymous bind" deaktivieren
Es sollen KEINE anonymen Anfragen „anonymous bind“ mehr erlaubt werden!
Zuerst soll die aktuelle globale Konfiguration angezeigt werden, welche sich in der Konfigurationsdatei
/etc/openldap/slap.d/cn=config/olcDatabase={0}config.ldif
befindet, und mit nachfolgendem Befehl abgefragt werden kann
# ldapsearch -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)" Enter LDAP Password: # extended LDIF # # LDAPv3 # base <cn=config> with scope subtree # filter: (objectclass=olcGlobal) # requesting: ALL # # config dn: cn=config objectClass: olcGlobal cn: config olcConfigFile: /etc/openldap/slapd.conf olcConfigDir: /etc/openldap/slapd.d olcAllows: bind_v2 olcArgsFile: /var/run/openldap/slapd.args olcAttributeOptions: lang- olcAuthzPolicy: none olcConcurrency: 0 olcConnMaxPending: 100 olcConnMaxPendingAuth: 1000 olcGentleHUP: FALSE olcIdleTimeout: 15 olcIndexSubstrIfMaxLen: 4 olcIndexSubstrIfMinLen: 2 olcIndexSubstrAnyLen: 4 olcIndexSubstrAnyStep: 2 olcIndexIntLen: 4 olcLocalSSF: 71 olcLogLevel: Stats olcPidFile: /var/run/openldap/slapd.pid olcReadOnly: FALSE olcReferral: ldap://ldap.dmz.tachtler.net olcReverseLookup: FALSE olcSaslSecProps: noplain,noanonymous olcSockbufMaxIncoming: 262143 olcSockbufMaxIncomingAuth: 16777215 olcThreads: 16 olcTLSCACertificateFile: /etc/pki/openldap/certs/CAcert.pem olcTLSCertificateFile: /etc/pki/openldap/certs/cert.pem olcTLSCertificateKeyFile: /etc/pki/openldap/private/key.pem olcTLSCipherSuite: HIGH olcTLSCRLCheck: none olcTLSVerifyClient: never olcToolThreads: 1 olcWriteTimeout: 0 # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
WICHTIG - Die Konfigurationsdatei im und unterhalb des Verzeichnisses sollten NICHT direkt editiert werden !!!
Um Änderungen durchzuführen, soll eine Änderungsdatei im *.LDIF-Format erstellt werden.
Dazu soll im ersten Schritt ein Verzeichnis mit dem Name
/etc/openldap/ldif
erstellt werden (falls dieses nicht bereits vorhanden ist), was mit nachfolgendem Befehl durchgeführt werden kann:
# mkdir /etc/openldap/ldif
Die Besitzrechte sollten mit nachfolgenden Befehl angepasst werden:
# chown -R ldap.ldap /etc/openldap/ldif/
ebenfalls die Dateirechte, mit nachfolgendem Befehl:
# chmod -R 700 /etc/openldap/ldif/
Der Name der Konfigurationsdatei im *.LDIF-Format soll hier
- /etc/openldap/ldif/bind_anon.ldif
lauten und nachfolgenden Inhalt haben
dn: cn=config changetype: modify add: olcDisallows olcDisallows: bind_anon - add: olcRequires olcRequires: authc
Durch nachfolgenden Befehl, wird die Konfigurationsdatei im *.LDIF-Format –> /etc/openldap/ldif/bind_anon.ldif
zur bestehenden OpenLDAP-Server bzw. slapd
-Daemon/Dienst-Konfiguration hinzugefügt:
# ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/bind_anon.ldif Enter LDAP Password: modifying entry "cn=config"
Eine Überprüfung, ob das Hinzufügen der zusätzlichen Konfigurationen erfolgreich war, kann mit nachfolgendem Befehl durchgeführt werden und sollte eine Ausgabe wie nachfolgend dargestellt, ausgeben:
# ldapsearch -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)" Enter LDAP Password: # extended LDIF # # LDAPv3 # base <cn=config> with scope subtree # filter: (objectclass=olcGlobal) # requesting: ALL # # config dn: cn=config objectClass: olcGlobal cn: config olcConfigFile: /etc/openldap/slapd.conf olcConfigDir: /etc/openldap/slapd.d olcAllows: bind_v2 olcArgsFile: /var/run/openldap/slapd.args olcAttributeOptions: lang- olcAuthzPolicy: none olcConcurrency: 0 olcConnMaxPending: 100 olcConnMaxPendingAuth: 1000 olcGentleHUP: FALSE olcIdleTimeout: 15 olcIndexSubstrIfMaxLen: 4 olcIndexSubstrIfMinLen: 2 olcIndexSubstrAnyLen: 4 olcIndexSubstrAnyStep: 2 olcIndexIntLen: 4 olcLocalSSF: 71 olcLogLevel: Stats olcPidFile: /var/run/openldap/slapd.pid olcReadOnly: FALSE olcReferral: ldap://ldap.dmz.tachtler.net olcReverseLookup: FALSE olcSaslSecProps: noplain,noanonymous olcSockbufMaxIncoming: 262143 olcSockbufMaxIncomingAuth: 16777215 olcThreads: 16 olcTLSCACertificateFile: /etc/pki/openldap/certs/CAcert.pem olcTLSCertificateFile: /etc/pki/openldap/certs/cert.pem olcTLSCertificateKeyFile: /etc/pki/openldap/private/key.pem olcTLSCipherSuite: HIGH olcTLSCRLCheck: none olcTLSVerifyClient: never olcToolThreads: 1 olcWriteTimeout: 0 olcDisallows: bind_anon olcRequires: authc # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
WICHTIG - Die Einträge
olcDisallows: bind_anon
olcRequires: authc
ermöglichen das Deaktivieren der anonymen Anfragen „anonymous bind“.
Zur Überprüfung ob das Deaktivieren der anonymen Anfragen „anonymous bind“ korrekt funktioniert hat, kann folgender Befehl verwendet werden, welche die nachfolgende Ausgabe erzeugen sollte:
# ldapsearch -x -LLL -H ldap://ldap.dmz.tachtler.net -b "dc=tachtler,dc=net" "uid=klaus" ldap_bind: Inappropriate authentication (48) additional info: anonymous bind disallowed
Der oben genannte Befehl zur Abfrage der Daten des Benutzer klaus, muss nun so lauten:
# ldapsearch -x -LLL -H ldap://ldap.dmz.tachtler.net -b "dc=tachtler,dc=net" "uid=klaus" -W -D "uid=klaus,ou=People,dc=tachtler,dc=net" Enter LDAP Password: dn: uid=klaus,ou=People,dc=tachtler,dc=net uid: klaus cn: Klaus Tachtler objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword:: e2NyeXB8htdfJDRuc7gHtf5LJKj7gfc0RWpOanExbkMudXlOOpjht5JOWkN2WVN Falkpld8Ijddu5f44bXY1VEjkZ64ULldQFglM6qzzBd4dUdxjj7d7jhad77Khe88dl3b53aTBU3Ux shadowLastChange: 15210 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 500 gidNumber: 500 homeDirectory: /home/klaus gecos: Klaus Tachtler
Ersatzauthentifizierung erstellen
Dadurch, das KEINE anonymen Anfragen „anonymous bind“, mehr möglich sind, es trotzdem Situationen gibt, in denen auch Abfragen von nicht Benutzern gestellt werden müssen. z.B. eines technischen Benutzers einer Web-Anwendung usw. soll ein Benutzer als „Ersatzauthentifizierer“ für anonyme Anfragen fungiert, hier z.B. könnte so ein Benutzer wie folgt heißen:
- cn=Ersatzbenutzer,dc=tachtler,dc=net
Bevor mit der eigentlichen Erstellung des „Ersatzauthentifizierer“ für anonyme Anfragen begonnen wird, soll noch ein userPassword generiert werden, welches später für den „Ersatzauthentifizierer“ für anonyme Anfragen gelten soll. Dies kann mit nachfolgendem Befehl erstellt werden:
# /usr/sbin/slappasswd -h {SSHA} New password: Re-enter new password: {SSHA}evF+NLXO5/M0d+4buPid0CYcCRzBllGk
Anschließend soll (wieder) eine Konfigurationsdatei im *.LDIF-Format erstellt werden.
Der Name der Konfigurationsdatei im *.LDIF-Format soll hier
- /etc/openldap/ldif/Ersatzbenutzer.ldif
lauten und nachfolgenden Inhalt haben
dn: cn=Ersatzbenutzer,dc=tachtler,dc=net cn: Ersatzbenutzer objectClass: organizationalRole objectClass: simpleSecurityObject objectClass: top userPassword: {SSHA}evF+NLXO5/M0d+4buPid0CYcCRzBllGk
WICHTIG - Es ist erforderlich, dass der OpenLDAP-Server bzw. slapd
-Daemon/Dienst gestoppt wird !!!
Dies kann mit folgendem Befehl durchgeführt werden:
# service slapd stop Stopping slapd: [ OK ]
Mit folgendem Befehl werden nun die Daten aus der *.LDIF-Format-Datei
/etc/openldap/ldif/Ersatzbenutzer.ldif
in den DIT Directory Information Tree eingestellt:
# slapadd -v -l /etc/openldap/ldif/Ersatzbenutzer.ldif added: "cn=Ersatzbenutzer,dc=tachtler,dc=net" (00000009) _#################### 100.00% eta none elapsed none fast! Closing DB...
WICHTIG - Es ist erforderlich, dass der OpenLDAP-Server bzw. slapd
-Daemon/Dienst wieder gestartet wird !!!
Dies kann mit folgendem Befehl durchgeführt werden:
# service slapd start Starting slapd: [ OK ]
Ein Suchanfrage zum Testen, ob das Hinzufügen des „Ersatzauthentifizierer“ für anonyme Anfragen zur DIT Directory Information Tree erfolgreich war, kann mit folgendem Befehl durchgeführt werden:
# ldapsearch -x -LLL -H ldap://ldap.dmz.tachtler.net -b "dc=tachtler,dc=net" "cn=Ersatzbenutzer" -W -D "cn=Ersatzbenutzer,dc=tachtler,dc=net" Enter LDAP Password: dn: cn=Ersatzbenutzer,dc=tachtler,dc=net cn: Ersatzbenutzer objectClass: organizationalRole objectClass: simpleSecurityObject objectClass: top userPassword:: eNf5RdF9dnNFYzd0u7Gf3XpUUjZwN2tIOEZJg50aRUVrNi7Gbk8=
Zugriffsrechte beschränken
Durch nachfolgende Abfrage, kann aufgelistet werden, welche Zugriffsrechte für die einzelnen im DIT Directory Information Tree enthaltenen Benutzerstrukturen bereits existieren, um diese Informationen als Grundlage für Anpassungen verwenden zu können:
# ldapsearch -W -x -D cn=config -b olcDatabase={-1}frontend,cn=config Enter LDAP Password: # extended LDIF # # LDAPv3 # base <olcDatabase={-1}frontend,cn=config> with scope subtree # filter: (objectclass=*) # requesting: ALL # # {-1}frontend, config dn: olcDatabase={-1}frontend,cn=config olcPasswordHash: {SSHA} objectClass: olcDatabaseConfig objectClass: olcFrontendConfig olcDatabase: {-1}frontend olcAccess: {0}to attrs=userPassword by self write by dn.base="cn=manager,dc= tachtler,dc=net" write by anonymous auth by * none olcAccess: {1}to * by self write by dn.base="cn=manager,dc=tachtler,dc=net" write by * read olcAddContentAcl: FALSE olcLastMod: TRUE olcMaxDerefDepth: 0 olcReadOnly: FALSE olcSchemaDN: cn=Subschema olcMonitoring: FALSE # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Nachfolgende Zeilen sind hier von Bedeutung (nur relevanter Ausschnitt):
... olcAccess: {0}to attrs=userPassword by self write by dn.base="cn=manager,dc= tachtler,dc=net" write by anonymous auth by * none olcAccess: {1}to * by self write by dn.base="cn=manager,dc=tachtler,dc=net" write by * read ...
Die vorangestellten Zeilen haben folgende Bedeutung:
userPassword
- kann nur vom „Eigentümer selbst“ geschrieben werden
- oder von „dn.base=„cn=manager,dc=tachtler,dc=net“ geschrieben werden
- von „anonymous“ authentifizierend zugegriffen werden
- von allen anderen keinen Zugriff durchgeführt werden.
* (auf den gesamten Baum)
- kann nur vom „Eigentümer selbst“ geschrieben werden
- oder von „dn.base=„cn=manager,dc=tachtler,dc=net“ geschrieben werden
- von allen anderen lesender Zugriff durchgeführt werden.
Um Änderungen an diesen Zugriffsberechtigungen durchzuführen, sind zwei wesentliche Schritte notwendig:
- Löschen der aktuellen ACL-Konfiguration
- Neuanlage der zukünftigen ACL-Konfiguration
WICHTIG - Die Konfigurationsdatei im und unterhalb des Verzeichnisses sollten NICHT direkt editiert werden !!!
Um Änderungen durchzuführen, soll eine Änderungsdatei im *.LDIF-Format erstellt werden.
Dazu soll im ersten Schritt ein Verzeichnis mit dem Name
/etc/openldap/ldif
erstellt werden (falls dieses nicht bereits vorhanden ist), was mit nachfolgendem Befehl durchgeführt werden kann:
# mkdir /etc/openldap/ldif
Die Besitzrechte sollten mit nachfolgenden Befehl angepasst werden:
# chown -R ldap.ldap /etc/openldap/ldif/
ebenfalls die Dateirechte, mit nachfolgendem Befehl:
# chmod -R 700 /etc/openldap/ldif/
Der Name der Konfigurationsdateien im *.LDIF-Format sollen hier
- /etc/openldap/ldif/frontend_acl_del.ldif
lauten und nachfolgende Inhalte haben
/etc/openldap/ldif/frontend_acl_del.ldif
dn: olcDatabase={-1}frontend,cn=config delete: olcAccess olcAccess: to attrs=userPassword by self write by dn.base="cn=manager,dc=tachtler,dc=net" write by anonymous auth by * none olcAccess: to * by self write by dn.base="cn=manager,dc=tachtler,dc=net" write by * read
/etc/openldap/ldif/frontend_acl_add.ldif
dn: olcDatabase={-1}frontend,cn=config add: olcAccess olcAccess: to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" read by anonymous auth by * none olcAccess: to dn="cn=Manager,dc=tachtler,dc=net" by self write by * none olcAccess: to dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by * none olcAccess: to dn.regex="cn=([^,]+),ou=Group,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" read by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc=net" read by * none olcAccess: to dn.regex="uid=([^,]+),ou=People,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" read by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc=net" read by * none olcAccess: to * by self write by dn.base="cn=manager,dc=tachtler,dc=net" write by * read
Durch nachfolgende Befehle, werden die Konfigurationsdatein im *.LDIF-Format –>
/etc/openldap/ldif/frontend_acl_del.ldif
und/etc/openldap/ldif/frontend_acl_add.ldif
von der bestehenden OpenLDAP-Server bzw. slapd
-Daemon/Dienst-Konfiguration gelöscht bzw. zu der bestehenden OpenLDAP-Server bzw. slapd
-Daemon/Dienst-Konfiguration hinzugefügt:
# ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/frontend_acl_del.ldif Enter LDAP Password: modifying entry "olcDatabase={-1}frontend,cn=config "
# ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/frontend_acl_add.ldif Enter LDAP Password: modifying entry "olcDatabase={-1}frontend,cn=config "
Eine Überprüfung, ob das Löschen und das Hinzufügen der zusätzlichen Konfigurationen erfolgreich war, kann mit nachfolgendem Befehl durchgeführt werden und sollte eine Ausgabe wie nachfolgend dargestellt, ausgeben:
# ldapsearch -W -x -D cn=config -b olcDatabase={-1}frontend,cn=config Enter LDAP Password: # extended LDIF # # LDAPv3 # base <olcDatabase={-1}frontend,cn=config> with scope subtree # filter: (objectclass=*) # requesting: ALL # # {-1}frontend, config dn: olcDatabase={-1}frontend,cn=config olcPasswordHash: {SSHA} objectClass: olcDatabaseConfig objectClass: olcFrontendConfig olcDatabase: {-1}frontend olcAddContentAcl: FALSE olcLastMod: TRUE olcMaxDerefDepth: 0 olcReadOnly: FALSE olcSchemaDN: cn=Subschema olcMonitoring: FALSE olcAccess: {0}to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzb enutzer,dc=tachtler,dc=net" read by anonymous auth by * none olcAccess: {1}to dn="cn=Manager,dc=tachtler,dc=net" by self write by * none olcAccess: {2}to dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by * none olcAccess: {3}to dn.regex="cn=([^,]+),ou=Group,dc=tachtler,dc=net" by self wr ite by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc =tachtler,dc=net" read by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc=n et" read by * none olcAccess: {4}to dn.regex="uid=([^,]+),ou=People,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer, dc=tachtler,dc=net" read by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc =net"read by * none olcAccess: {5}to * by self write by dn.base="cn=manager,dc=tachtler,dc=net" write by * read # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
Überprüfung Zugriffsbeschränkungen
Zur Überprüfung ob die Zugriffsbeschränkungen tatsächlich auch funktionieren, kann überprüft werden, ob der Benutzer
„uid=klaus,ou=People,dc=tachtler,dc=net“
die Daten des Benutzers
„uid=petra,ou=People,dc=tachtler,dc=net“
abfragen kann.
Nachfolgend der Befehl zur Überprüfung:
# ldapsearch -x -LLL -H ldap://ldap.dmz.tachtler.net -b "ou=People,dc=tachtler,dc=net" "uid=petra" -W -D "uid=klaus,ou=People,dc=tachtler,dc=net" Enter LDAP Password:
WICHTIG - Es sollte KEINE Anzeige erfolgen!!!
Nachfolgender Befehl, sollte jedoch weiterhin ein Ergebnis zurück liefern, da hier als
- „cn=Manager,dc=tachtler,dc=net“
die Abfrage durchgeführt wird:
# ldapsearch -x -LLL -H ldap://ldap.dmz.tachtler.net -b "ou=People,dc=tachtler,dc=net" "uid=petra" -W -D "cn=Manager,dc=tachtler,dc=net" Enter LDAP Password: dn: uid=petra,ou=People,dc=tachtler,dc=net uid: petra cn: Petra Tachtler objectClass: account objectClass: posixAccount objectClass: top objectClass: shadowAccount userPassword:: e2NyeX7HyRd4kLJwdW9zSFFEJGkz6SjqbmNJUm90dGl1WkllanY3UklwRVJOdTI ySUVSeE1aekYzdUpxBBg418nwRdofhUVRZ25QWmhEO6D9g3wkVc4xd2hmUTh2bFV2ZVYzNEZ4OVcx shadowLastChange: 15210 shadowMin: 0 shadowMax: 99999 shadowWarning: 7 loginShell: /bin/bash uidNumber: 501 gidNumber: 501 homeDirectory: /home/petra gecos: Petra Tachtler
Apache .htaccess Nutzung
OpenLDAP kann sehr gut dazu genutzt werden, um Verzeichnisse z.B. innerhalb des DokumentRoot
-Verzeichnisses von Apache HTTP Server mit einem Zugriffsschutz zu versehen.
Alles was Sie dazu benötigen ist eine .htaccess
-Datei innerhalb des zu schützenden Verzeichnisses der Web-Anwendung. Ein Beispiel mit Erklärungen könnte wie folgt aussehen:
Ab Apache HTTP Server-Version 2.2 nutzbar !
Benutzerauthentifizierung
AuthType Basic AuthName "Beispielanwendung - example.com" AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPURL "ldap://ldap.dmz.tachtler.net:389/dc=tachtler,dc=net?uid" Require valid-user
Zeile 1 - AuthType Basic
Die Direktive wählt die Art der Benutzer-Authentisierung für ein Verzeichnis aus. Derzeit sind lediglich Basic und Digest implementiert. Um zu funktionieren, muss die Anweisung von den Direktiven AuthName und Require sowie von Direktiven wie AuthUserFile und AuthGroupFile begleitet werden.
Zeile 2 - AuthName „Beispielanwendung - example.com“
Die Direktive legt den Namen des Autorisierungsbereiches (Anm.d.Ü.: Der Autorisierungsbereich wird auch Realm genannt.) für ein Verzeichnis fest.
Zeile 3 - AuthBasicProvider ldap
Angabe des Authentifizierungsanbieters (Standard wäre file
)
Zeile 4 - AuthzLDAPAuthoritative off
Ermöglicht die Zulassung von allen LDAP-Nutzern ohne Angabe einer speziellen Gruppe.
Zeile 5 - AuthLDAPURL
ldap://ldap.dmz.tachtler.net:389/dc=tachtler,dc=net?uid
URL zum LDAP-Server.
Zeile 6 - Require valid-user
Zulassung aller User auf dem LDAP-Server.
Um den Zugriff auf nur bestimmte Nutzer im LDAP zu begrenzen kann die Zeile 6 wie folgt abgeändert werden:
Require ldap-user klaus petra
Gruppenauthentifizierung
WICHTIG, nur zusätzliche Zeilen, sonst wie Benutzerauthentifizierung!
AuthType Basic AuthName "Beispielanwendung" AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPURL "ldap://ldap.dmz.tachtler.net:389/dc=tachtler,dc=net?uid" Require ldap-user klaus petra AuthLDAPGroupAttribute memberUid AuthLDAPGroupAttributeIsDN off Require ldap-group cn=<posixGroup with memberUid>,ou=<organizationalUnit>,dc=tachtler,dc=net
Zeile 7 - AuthLDAPGroupAttribute memberUid
In welchem Attribut nach den „Mitgliedern“ dieser Gruppe über das Attribut uid
gesucht werden soll.
Zeile 8 - AuthLDAPGroupAttributeIsDN off
Verhindert, dass auf der DN in der Zeile 9 aufgesetzt wird (WICHTIG).
Zeile 9 - Require ldap-group cn=<posixGroup with memberUid>,ou=<organizationalUnit>,dc=tachtler,dc=net
In welcher Gruppe gesucht werden soll.
Authentifizierung LDAP-Server ohne "anonymous" Authentifizierung
WICHTIG, nur zusätzliche Zeilen, sonst wie Gruppenauthentifizierung!
AuthType Basic AuthName "Beispielanwendung" AuthBasicProvider ldap AuthzLDAPAuthoritative off AuthLDAPURL "ldap://ldap.dmz.tachtler.net:389/dc=tachtler,dc=net?uid" Require ldap-user klaus petra AuthLDAPGroupAttribute memberUid AuthLDAPGroupAttributeIsDN off Require ldap-group cn=<posixGroup with memberUid>,ou=<organizationalUnit>,dc=tachtler,dc=net AuthLDAPBindDN "cn=<organizationalUnit with simpleSecurityObject>,dc=tachtler,dc=net" AuthLDAPBindPassword "geheim"
Zeile 10 - AuthLDAPBindDN „cn=<organizationalUnit with simpleSecurityObject>,dc=tachtler,dc=net“
Pfad zum Benutzer, der als „Ersatzauthentifizierer/Ersatzbenutzers“ bei quasi anonymen bind zum LDAP-Server dient.
Zeile 11 - AuthLDAPBindPassword „geheim“
Passwort des „Ersatzauthentifizierers/Ersatzbenutzers“.
SASL-Unterstützung
Die SALS-Unterstützung für einen OpenLDAP-Server hängt von zwei Faktoren ab:
- den installieren Cyrus-SASL-Modulen
- der Konfiguration des OpenLDAP-Servers
Das Verzeichnis in dem die installierten Cyrus-SASL-Module installiert werden lautet wie folgt
/usr/lib64/sasl2
und hat, falls keine Cyrus-SASL-Module zusätzlich installiert sind, folgenden Inhalt, welcher mit nachfolgendem Befehl aufgelistet werden kann:
# ls -la /usr/lib64/sasl2/ total 60 drwxr-xr-x. 2 root root 4096 Nov 11 2010 . dr-xr-xr-x. 23 root root 12288 Nov 22 15:31 .. lrwxrwxrwx. 1 root root 22 Aug 24 11:54 libanonymous.so -> libanonymous.so.2.0.23 lrwxrwxrwx. 1 root root 22 Aug 24 11:54 libanonymous.so.2 -> libanonymous.so.2.0.23 -rwxr-xr-x. 1 root root 16408 Nov 11 2010 libanonymous.so.2.0.23 lrwxrwxrwx. 1 root root 19 Aug 24 11:54 libsasldb.so -> libsasldb.so.2.0.23 lrwxrwxrwx. 1 root root 19 Aug 24 11:54 libsasldb.so.2 -> libsasldb.so.2.0.23 -rwxr-xr-x. 1 root root 22272 Nov 11 2010 libsasldb.so.2.0.23
Um herauszufinden, welche SASL (Simple Authentication and Security Layer) Mechanismen aktuellen vom OpenLDAP-Server unterstützt werden, kann nachfolgender Befehl genutzt werden:
# ldapsearch -LLL -x -H ldap://ldap.dmz.tachtler.net -s "base" -b "" -W -D "cn=Manager,dc=tachtler,dc=net" supportedSASLMechanisms Enter LDAP Password: dn:
HINWEIS - Im oben gezeigten Beispiel werden KEINE SASL-Mechanismen vom OpenLDAP-Server unterstützt !!!
Jetzt stellt sich evtl. die Frage, warum bei vorhergehender Abfrage, KEIN Ergebnis für die durch den OpenLDAP-Server unterstützten SASL-Mechanismen als Antwort zurückgegeben wurde, obwohl doch augenscheinlich mindestens ein Cyrus-SASL-Modul (libanonymous) installiert ist?
Die Antwort auf diese vorangehende Frage liegt in der Standard-Konfiguration des OpenLDAP-Servers.
Falls nachfolgende Option nicht gesetzt ist
sasl-secprops
wird der nachfolgende Standardwert für die Option sasl-secprops
gesetzt:
noplain,noanonymous
Dies bewirkt, wenn nachfolgende Tabelle zum Vergleich mit den aktuelle
- installierten Modulen - nur
libanonymous
und - dem Standardwert - für
sasl-secprops
=noplain,noanonymous
heranzieht, dass aktuell keine Cyrus-SASL-Module vom OpenLDAP-Server unterstützt werden:
SASL mechanism | Security property flags |
---|---|
ANONYMOUS | NOPLAIN |
CRAM-MD5 | NOPLAIN, NOANONYMOUS |
DIGEST-MD5 | NOPLAIN, NOANONYMOUS |
GSSAPI | NOPLAIN, NOANONYMOUS, NOACTIVE |
KERBEROS_V4 | NOPLAIN, NOANONYMOUS, NOACTIVE |
LOGIN | NOANONYMOUS |
PLAIN | NOANONYMOUS |
SCRAM-MD5 | NONE |
SRP | NOPLAIN |
Somit würden, wenn alle Cyrus-SASL-Module aus der oben stehenden Tabelle, installiert wären, nur nachfolgende Module durch den OpenLDAP-Server als unterstützte SASL-Mechanismen aufgelistet werden:
- CRAM-MD5
- DIGEST-MD5
- GSSAPI
- KERBEROS_V4
Installation: cyrus-sasl-plain
Der Cyrus-IMAP-Mailserver, beherrscht verschiedene Methoden zur Authentifizierung der einzelnen Benutzer bzw. e-Mail-Konten. Ein dieser Methoden ist die Authentifizierung durch „Klartext“-Passwörter (welche die Übertragungsart des Passworts bezeichnet).
Zur Installation der Authentifizierungsmethode plain durch den Cyrus-IMAP-Mailservers wird nachfolgendes Paket benötigt:
installiert werden.
Mit nachfolgendem Befehl, wird das Pakete cyrus-sasl-plain
installiert:
# yum install cyrus-sasl-plain Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package cyrus-sasl-plain.x86_64 0:2.1.23-8.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: cyrus-sasl-plain x86_64 2.1.23-8.el6 base 30 k Transaction Summary ================================================================================ Install 1 Package(s) Total download size: 30 k Installed size: 33 k Is this ok [y/N]: y Downloading Packages: cyrus-sasl-plain-2.1.23-8.el6.x86_64.rpm | 30 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : cyrus-sasl-plain-2.1.23-8.el6.x86_64 1/1 Installed: cyrus-sasl-plain.x86_64 0:2.1.23-8.el6 Complete!
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket cyrus-sasl-plain
installiert wurden.
# rpm -qil cyrus-sasl-plain Name : cyrus-sasl-plain Relocations: (not relocatable) Version : 2.1.23 Vendor: CentOS Release : 8.el6 Build Date: Thu 11 Nov 2010 05:11:37 AM CET Install Date: Fri 09 Dec 2011 01:16:59 PM CET Build Host: c6b3.bsys.dev.centos.org Group : System Environment/Libraries Source RPM: cyrus-sasl-2.1.23-8.el6.src.rpm Size : 34000 License: BSD Signature : RSA/8, Sun 03 Jul 2011 06:09:12 AM CEST, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://asg.web.cmu.edu/sasl/sasl-library.html Summary : PLAIN and LOGIN authentication support for Cyrus SASL Description : The cyrus-sasl-plain package contains the Cyrus SASL plugins which support PLAIN and LOGIN authentication schemes. /usr/lib64/sasl2/liblogin.so /usr/lib64/sasl2/liblogin.so.2 /usr/lib64/sasl2/liblogin.so.2.0.23 /usr/lib64/sasl2/libplain.so /usr/lib64/sasl2/libplain.so.2 /usr/lib64/sasl2/libplain.so.2.0.23
Installation: cyrus-sasl-md5
Der Cyrus-IMAP-Mailserver, beherrscht verschiedene Methoden zur Authentifizierung der einzelnen Benutzer bzw. e-Mail-Konten. Ein dieser Methoden ist die Authentifizierung durch auf dem Algorithmus von „MD5-Verschlüsselten“-Passwörter (CRAM-MD5 und DIGEST-MD5) (welche die Übertragungsart des Passworts bezeichnet).
Zur Installation der Authentifizierungsmethode CRAM-MD5 und DIGEST-MD5 durch den Cyrus-IMAP-Mailservers wird nachfolgendes Paket benötigt:
installiert werden.
Mit nachfolgendem Befehl, wird das Pakete cyrus-sasl-md5
installiert:
# yum install cyrus-sasl-md5 Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package cyrus-sasl-md5.x86_64 0:2.1.23-8.el6 will be installed --> Finished Dependency Resolution Dependencies Resolved ================================================================================ Package Arch Version Repository Size ================================================================================ Installing: cyrus-sasl-md5 x86_64 2.1.23-8.el6 base 46 k Transaction Summary ================================================================================ Install 1 Package(s) Total download size: 46 k Installed size: 67 k Is this ok [y/N]: y Downloading Packages: cyrus-sasl-md5-2.1.23-8.el6.x86_64.rpm | 46 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Installing : cyrus-sasl-md5-2.1.23-8.el6.x86_64 1/1 Installed: cyrus-sasl-md5.x86_64 0:2.1.23-8.el6 Complete!
Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket cyrus-sasl-md5
installiert wurden.
# rpm -qil cyrus-sasl-md5 Name : cyrus-sasl-md5 Relocations: (not relocatable) Version : 2.1.23 Vendor: CentOS Release : 8.el6 Build Date: Thu 11 Nov 2010 05:11:37 AM CET Install Date: Fri 09 Dec 2011 01:18:40 PM CET Build Host: c6b3.bsys.dev.centos.org Group : System Environment/Libraries Source RPM: cyrus-sasl-2.1.23-8.el6.src.rpm Size : 68592 License: BSD Signature : RSA/8, Sun 03 Jul 2011 06:09:09 AM CEST, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://asg.web.cmu.edu/sasl/sasl-library.html Summary : CRAM-MD5 and DIGEST-MD5 authentication support for Cyrus SASL Description : The cyrus-sasl-md5 package contains the Cyrus SASL plugins which support CRAM-MD5 and DIGEST-MD5 authentication schemes. /usr/lib64/sasl2/libcrammd5.so /usr/lib64/sasl2/libcrammd5.so.2 /usr/lib64/sasl2/libcrammd5.so.2.0.23 /usr/lib64/sasl2/libdigestmd5.so /usr/lib64/sasl2/libdigestmd5.so.2 /usr/lib64/sasl2/libdigestmd5.so.2.0.23
Anschließend sollt eine Neustart des OpenLDAP-Server durchgeführt werden, was mit nachfolgendem Befehl realisiert werden kann:
# service slapd restart Stopping slapd: [ OK ] Starting slapd: [ OK ]
Eine erneute Abfrage, welche SASL (Simple Authentication and Security Layer) Mechanismen aktuellen vom OpenLDAP-Server unterstützt werden, kann wieder mit nachfolgender Befehl ermittelt werden und solle in etwa nachfolgendes Ergebnis liefern:
# ldapsearch -LLL -x -H ldap://ldap.dmz.tachtler.net -s "base" -b "" -W -D "cn=Manager,dc=tachtler,dc=net" supportedSASLMechanisms Enter LDAP Password: dn: supportedSASLMechanisms: CRAM-MD5 supportedSASLMechanisms: DIGEST-MD5
Eine nochmalige TLS-Verschlüsselte Abfrage, welche SASL (Simple Authentication and Security Layer) Mechanismen aktuellen vom OpenLDAP-Server unterstützt werden, kann wieder mit nachfolgender Befehl ermittelt werden und solle in etwa nachfolgendes Ergebnis liefern:
# ldapsearch -D "cn=Manager,dc=tachtler,dc=net" -x -W -H ldap://ldap.dmz.tachtler.net -b '' -s base -ZZ -LLL supportedSASLMechanisms Enter LDAP Password: dn: supportedSASLMechanisms: LOGIN supportedSASLMechanisms: PLAIN supportedSASLMechanisms: CRAM-MD5 supportedSASLMechanisms: DIGEST-MD5
SASL Ersatzauthentifizierung erstellen
Dadurch, das eine Authentifizierung für SASL-Abfragen durch z.B. einen Cyrus-IMAP-Mailserver erfolgen können, soll ein Benutzer als „SASLErsatzauthentifizierer“ für SASL Anfragen fungiert, hier z.B. könnte so ein Benutzer wie folgt heißen:
- uid=SASLErsatzbenutzer,dc=tachtler,dc=net
WICHTIG - Das userPassword für den „SASLErsatzauthentifizierer“ für SASL Anfragen muss im Klartext gespeichert werden !!!
Deshalb sollte zuerst eine Konfigurationsdatei im *.LDIF-Format erstellt werden, mit der die Standard-Passwort-Verschlüsselung von
SSHA
aufCLEARTEXT
gesetzte wird!
Der Name der Konfigurationsdatei im *.LDIF-Format soll hier
- /etc/openldap/ldif/password-hash.ldif
lauten und nachfolgenden Inhalt haben
dn: olcDatabase={-1}frontend,cn=config delete: olcPasswordHash olcPasswordHash: {SSHA} - add: olcPasswordHash olcPasswordHash: {CLEARTEXT}
Mit folgendem Befehl werden nun die Daten aus der *.LDIF-Format-Datei
/etc/openldap/ldif/password-hash.ldif
in den DIT Directory Information Tree eingestellt:
# ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/password-hash.ldif Enter LDAP Password: modifying entry "olcDatabase={-1}frontend,cn=config "
Anschließend soll eine Konfigurationsdatei im *.LDIF-Format erstellt werden.
Der Name der Konfigurationsdatei im *.LDIF-Format soll hier
- /etc/openldap/ldif/SASLErsatzbenutzer.ldif
lauten und nachfolgenden Inhalt haben
dn: uid=SASLErsatzbenutzer,dc=tachtler,dc=net cn: SASLErsatzbenutzer sn: SASLErsatzbenutzer uid: SASLErsatzbenutzer objectClass: inetOrgPerson objectClass: simpleSecurityObject objectClass: top userPassword: geheim structuralObjectClass: inetOrgPerson authzTo: ldap:///dc=tachtler,dc=net??sub?(objectClass=*)
WICHTIG - Nachfolge Zeile ist für die Ersatzauthentifizierung zuständig!!!
authzTo: ldap:///dc=tachtler,dc=net??sub?(objectClass=*)
Der SASLErsatzbenutzer, kann so die Authentifizierung für alle Benutzer unterhalb dc=tachtler,dc=net
übernehmen !!!
WICHTIG - Es ist erforderlich, dass der OpenLDAP-Server bzw. slapd
-Daemon/Dienst gestoppt wird !!!
Dies kann mit folgendem Befehl durchgeführt werden:
# service slapd stop Stopping slapd: [ OK ]
Mit folgendem Befehl werden nun die Daten aus der *.LDIF-Format-Datei
/etc/openldap/ldif/SASLErsatzbenutzer.ldif
in den DIT Directory Information Tree eingestellt:
# slapadd -v -l /etc/openldap/ldif/SASLErsatzbenutzer.ldif added: "uid=SASLErsatzbenutzer,dc=tachtler,dc=net" (00000017) _#################### 100.00% eta none elapsed none fast! Closing DB...
WICHTIG - Es ist erforderlich, dass der OpenLDAP-Server bzw. slapd
-Daemon/Dienst wieder gestartet wird !!!
Dies kann mit folgendem Befehl durchgeführt werden:
# service slapd start Starting slapd: [ OK ]
HIWNEIS - Bevor eine Suchanfrage zum Testen, ob das Hinzufügen des „SASLErsatzauthentifizierer“ für SASL Anfragen zur DIT Directory Information Tree erfolgreich getestet werden kann, ist nachfolgender Schritt notwendig.
SASL-Mapping hinterlegen
Damit der OpenLDAP-Server überhaupt mit SASL Anfragen umgehen kann, ist das Hinzufügten einer sogenannten
authz-regexp
und einerauthz-policy
erforderlich.
Warum dies so ist und einige Erklärungen dazu, kann unter nachfolgenden externen Links nachgelesen werden:
olcAuthzRegexp
Deshalb soll eine Konfigurationsdatei im *.LDIF-Format erstellt werden.
Der Name der Konfigurationsdatei im *.LDIF-Format soll hier
- /etc/openldap/ldif/authz-regexp.ldif
lauten und nachfolgenden Inhalt haben
dn: cn=config changetype: modify add: olcAuthzRegexp olcAuthzRegexp: uid=([^,@]*) ldap:///dc=tachtler,dc=net??sub?(&(uid=$1)(objectClass=*))
Beispiele:
Der Eintrag
olcAuthzRegexp: uid=([^,@]*) ldap:///dc=tachtler,dc=net??sub?(&(uid=$1)(objectClass=*))
bewirkt, dass aus der e-Mail-Adresse klaus@tachtler.net
nur der localpart=klaus in die Suche nach uid=$1
übernommen wird.
Der Eintrag
olcAuthzRegexp: uid=([^,]*) ldap:///dc=tachtler,dc=net??sub?(&(mail=$1)(objectClass=*))
würde bewirkt, dass die gesamte e-Mail-Adresse klaus@tachtler.net
in die Suche nach mail=$1
übernommen wird.
Mit folgendem Befehl werden nun die Daten aus der *.LDIF-Format-Datei
/etc/openldap/ldif/authz-regexp.ldif
in den DIT Directory Information Tree eingestellt:
# ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/authz-regexp.ldif Enter LDAP Password: modifying entry "cn=config"
Mit nachfolgender Abfrage kann überprüft werden, ob das „Mapping“ erfolgreich vom OpenLDAP-Server akzeptiert wurde und in der Konfigurationsdatei enthalten ist (nur relevanter Ausschnitt):
# ldapsearch -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)" Enter LDAP Password: ... olcAuthzRegexp: {0}uid=([^,@]*) ldap:///dc=tachtler,dc=net??sub?(&(uid=$1)(obj ectClass=*)) ...
olcAuthzPolicy
Zusätzlich muss noch eine Konfigurationsdatei im *.LDIF-Format erstellt werden.
Der Name der Konfigurationsdatei im *.LDIF-Format soll hier
- /etc/openldap/ldif/authz-policy.ldif
lauten und nachfolgenden Inhalt haben
dn: cn=config changetype: modify delete: olcAuthzPolicy olcAuthzPolicy: none - add: olcAuthzPolicy olcAuthzPolicy: to
Mit folgendem Befehl werden nun die Daten aus der *.LDIF-Format-Datei
/etc/openldap/ldif/authz-policy.ldif
in den DIT Directory Information Tree eingestellt:
# ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/authz-policy.ldif Enter LDAP Password: modifying entry "cn=config"
Mit nachfolgender Abfrage kann überprüft werden, ob die „Policy“-Änderung erfolgreich vom OpenLDAP-Server akzeptiert wurde und in der Konfigurationsdatei enthalten ist (nur relevanter Ausschnitt):
# ldapsearch -W -x -D cn=config -b cn=config "(objectclass=olcGlobal)" ... olcAuthzPolicy: to ...
SASL-Zugriffsrechte beschränken
Durch nachfolgende Abfrage, kann aufgelistet werden, welche Zugriffsrechte für die einzelnen im DIT Directory Information Tree enthaltenen Benutzerstrukturen bereits existieren, um diese Informationen als Grundlage für Anpassungen verwenden zu können:
# ldapsearch -W -x -D cn=config -b olcDatabase={-1}frontend,cn=config Enter LDAP Password: # extended LDIF # # LDAPv3 # base <olcDatabase={-1}frontend,cn=config> with scope subtree # filter: (objectclass=*) # requesting: ALL # # {-1}frontend, config dn: olcDatabase={-1}frontend,cn=config olcPasswordHash: {CLEARTEXT} objectClass: olcDatabaseConfig objectClass: olcFrontendConfig olcDatabase: {-1}frontend olcAddContentAcl: FALSE olcLastMod: TRUE olcMaxDerefDepth: 0 olcReadOnly: FALSE olcSchemaDN: cn=Subschema olcMonitoring: FALSE olcAccess: {0}to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzb enutzer,dc=tachtler,dc=net" read by anonymous auth by * none olcAccess: {1}to dn="cn=Manager,dc=tachtler,dc=net" by self write by * none olcAccess: {2}to dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by * none olcAccess: {3}to dn.regex="cn=([^,]+),ou=Group,dc=tachtler,dc=net" by self wr ite by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc =tachtler,dc=net" read by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc=n et" read by * none olcAccess: {4}to dn.regex="uid=([^,]+),ou=People,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer, dc=tachtler,dc=net" read by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc =net"read by * none olcAccess: {5}to * by self write by dn.base="cn=manager,dc=tachtler,dc=net" write by * read # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
WICHTIG - Die Konfigurationsdatei im und unterhalb des Verzeichnisses sollten NICHT direkt editiert werden !!!
Um Änderungen durchzuführen, soll eine Änderungsdatei im *.LDIF-Format erstellt werden.
Dazu soll im ersten Schritt ein Verzeichnis mit dem Name
/etc/openldap/ldif
erstellt werden (falls dieses nicht bereits vorhanden ist), was mit nachfolgendem Befehl durchgeführt werden kann:
# mkdir /etc/openldap/ldif
Die Besitzrechte sollten mit nachfolgenden Befehl angepasst werden:
# chown -R ldap.ldap /etc/openldap/ldif/
ebenfalls die Dateirechte, mit nachfolgendem Befehl:
# chmod -R 700 /etc/openldap/ldif/
/etc/openldap/ldif/frontend_acl_add_sasl.ldif
dn: olcDatabase={-1}frontend,cn=config delete: olcAccess olcAccess: {0} olcAccess: {1} olcAccess: {2} olcAccess: {3} olcAccess: {4} olcAccess: {5} olcAccess: {6} - add: olcAccess olcAccess: to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" read by dn="uid=SASLErsatzbenutzer,dc=tachtler,dc=net" read by anonymous auth by * none olcAccess: to dn="cn=Manager,dc=tachtler,dc=net" by self write by * none olcAccess: to dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by * none olcAccess: to dn="uid=SASLErsatzbenutzer,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by * auth olcAccess: to dn.regex="cn=([^,]+),ou=Group,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" read by dn="uid=SASLErsatzbenutzer,dc=tachtler,dc=net" read by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc=net" read by * none olcAccess: to dn.regex="uid=([^,]+),ou=People,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" read by dn="uid=SASLErsatzbenutzer,dc=tachtler,dc=net" read by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc=net" read by * none olcAccess: to * by self write by dn.base="cn=manager,dc=tachtler,dc=net" write by * read
Durch nachfolgenden Befehl, wird die Konfigurationsdatei im *.LDIF-Format –>
/etc/openldap/ldif/frontend_acl_add_sasl.ldif
von der bestehenden OpenLDAP-Server bzw. slapd
-Daemon/Dienst-Konfiguration gelöscht bzw. zu der bestehenden OpenLDAP-Server bzw. slapd
-Daemon/Dienst-Konfiguration hinzugefügt:
# ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/frontend_acl_add_sasl.ldif Enter LDAP Password: modifying entry "olcDatabase={-1}frontend,cn=config "
Eine Überprüfung, ob das Löschen und das Hinzufügen der zusätzlichen Konfigurationen erfolgreich war, kann mit nachfolgendem Befehl durchgeführt werden und sollte eine Ausgabe wie nachfolgend dargestellt, ausgeben:
# ldapsearch -W -x -D cn=config -b olcDatabase={-1}frontend,cn=config Enter LDAP Password: # extended LDIF # # LDAPv3 # base <olcDatabase={-1}frontend,cn=config> with scope subtree # filter: (objectclass=*) # requesting: ALL # # {-1}frontend, config dn: olcDatabase={-1}frontend,cn=config olcPasswordHash: {CLEARTEXT} objectClass: olcDatabaseConfig objectClass: olcFrontendConfig olcDatabase: {-1}frontend olcAddContentAcl: FALSE olcLastMod: TRUE olcMaxDerefDepth: 0 olcReadOnly: FALSE olcSchemaDN: cn=Subschema olcMonitoring: FALSE olcAccess: {0}to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzb enutzer,dc=tachtler,dc=net" read by dn="uid=SASLAnonymous,dc=tachtler,dc=net " read by anonymous auth by * none olcAccess: {1}to dn="cn=Manager,dc=tachtler,dc=net" by self write by * none olcAccess: {2}to dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by * none olcAccess: {3}to dn="uid=SASLErsatzbenutzer,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by * auth olcAccess: {4}to dn.regex="cn=([^,]+),ou=Group,dc=tachtler,dc=net" by self wr ite by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc =tachtler,dc=net" read by dn="uid=SASLErsatzbenutzer,dc=tachtler,dc=net" rea d by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc=net" read by * none olcAccess: {5}to dn.regex="uid=([^,]+),ou=People,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer, dc=tachtler,dc=net" read by dn="uid=SASLErsatzbenutzer,dc=tachtler,dc=net" r ead by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc=net" read by * none olcAccess: {6}to * by self write by dn.base="cn=manager,dc=tachtler,dc=net" write by * read # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
HINWEIS - Nachfolgende Zeile sollte besonders beachtet werden:
olcAccess: to dn="uid=SASLErsatzbenutzer,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by * auth
HINWEIS - Es muss die Möglichkeit der Authentifizierung für ALLE möglich sein !!!