Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:ldap_centos_6

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:

  • openldap-servers - ist im base-Repository von CentOS enthalten

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:

  • openldap-clients - ist im base-Repository von CentOS enthalten

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:

  • openssl - ist im base-Repository von CentOS enthalten

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:

  • migrationstools - ist im base-Repository von CentOS enthalten

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:

  1. Löschen der aktuellen ACL-Konfiguration
  2. 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:

  1. den installieren Cyrus-SASL-Modulen
  2. 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:

  • cyrus-sasl-plain - ist im base-Repository von CentOS enthalten

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:

  • cyrus-sasl-md5 - ist im base-Repository von CentOS enthalten

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 auf
  • CLEARTEXT

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 einer
  • authz-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 !!!

Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
tachtler/ldap_centos_6.txt · Zuletzt geändert: 2014/03/23 10:34 von klaus