Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:ldap_centos_7

Inhaltsverzeichnis

LDAP CentOS 7

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

Mit nachfolgendem Befehl, wird das Pakete openldap-servers installiert:

# yum install openldap-servers
Resolving Dependencies
--> Running transaction check
---> Package openldap-servers.x86_64 0:2.4.39-3.el7 will be installed
--> Processing Dependency: libltdl.so.7()(64bit) for package: openldap-servers-2.4.39-3.el7.x86_64
--> Running transaction check
---> Package libtool-ltdl.x86_64 0:2.4.2-20.el7 will be installed
--> Finished Dependency Resolution

Changes in packages about to be updated:


Dependencies Resolved

================================================================================
 Package                 Arch          Version                Repository   Size
================================================================================
Installing:
 openldap-servers        x86_64        2.4.39-3.el7           base        2.1 M
Installing for dependencies:
 libtool-ltdl            x86_64        2.4.2-20.el7           base         49 k

Transaction Summary
================================================================================
Install  1 Package (+1 Dependent package)

Total download size: 2.1 M
Installed size: 4.7 M
Is this ok [y/d/N]: y
Downloading packages:
(1/2): openldap-servers-2.4.39-3.el7.x86_64.rpm            | 2.1 MB   00:00     
(2/2): libtool-ltdl-2.4.2-20.el7.x86_64.rpm                |  49 kB   00:00     
--------------------------------------------------------------------------------
Total                                              6.1 MB/s | 2.1 MB  00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : libtool-ltdl-2.4.2-20.el7.x86_64                             1/2 
  Installing : openldap-servers-2.4.39-3.el7.x86_64                         2/2 
  Verifying  : libtool-ltdl-2.4.2-20.el7.x86_64                             1/2 
  Verifying  : openldap-servers-2.4.39-3.el7.x86_64                         2/2 

Installed:
  openldap-servers.x86_64 0:2.4.39-3.el7                                        

Dependency Installed:
  libtool-ltdl.x86_64 0:2.4.2-20.el7                                            

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket openldap-servers installiert wurden.

# rpm -qil openldap-servers
Name        : openldap-servers
Version     : 2.4.39
Release     : 3.el7
Architecture: x86_64
Install Date: Fri 14 Nov 2014 09:01:33 AM CET
Group       : System Environment/Daemons
Size        : 4887346
License     : OpenLDAP
Signature   : RSA/SHA256, Fri 04 Jul 2014 06:04:24 AM CEST, Key ID 24c6a8a7f4a80eb5
Source RPM  : openldap-2.4.39-3.el7.src.rpm
Build Date  : Tue 10 Jun 2014 01:24:08 AM CEST
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
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/check_password.conf
/etc/openldap/schema
/etc/openldap/schema/collective.ldif
/etc/openldap/schema/collective.schema
/etc/openldap/schema/corba.ldif
/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.ldif
/etc/openldap/schema/duaconf.schema
/etc/openldap/schema/dyngroup.ldif
/etc/openldap/schema/dyngroup.schema
/etc/openldap/schema/inetorgperson.ldif
/etc/openldap/schema/inetorgperson.schema
/etc/openldap/schema/java.ldif
/etc/openldap/schema/java.schema
/etc/openldap/schema/misc.ldif
/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.ldif
/etc/openldap/schema/pmi.schema
/etc/openldap/schema/ppolicy.ldif
/etc/openldap/schema/ppolicy.schema
/etc/openldap/slapd.conf
/etc/openldap/slapd.conf.bak
/etc/openldap/slapd.d
/etc/sysconfig/slapd
/usr/lib/systemd/system/slapd.service
/usr/lib/tmpfiles.d/slapd.conf
/usr/lib64/openldap/accesslog-2.4.so.2
/usr/lib64/openldap/accesslog-2.4.so.2.10.2
/usr/lib64/openldap/accesslog.la
/usr/lib64/openldap/auditlog-2.4.so.2
/usr/lib64/openldap/auditlog-2.4.so.2.10.2
/usr/lib64/openldap/auditlog.la
/usr/lib64/openldap/back_dnssrv-2.4.so.2
/usr/lib64/openldap/back_dnssrv-2.4.so.2.10.2
/usr/lib64/openldap/back_dnssrv.la
/usr/lib64/openldap/back_ldap-2.4.so.2
/usr/lib64/openldap/back_ldap-2.4.so.2.10.2
/usr/lib64/openldap/back_ldap.la
/usr/lib64/openldap/back_meta-2.4.so.2
/usr/lib64/openldap/back_meta-2.4.so.2.10.2
/usr/lib64/openldap/back_meta.la
/usr/lib64/openldap/back_null-2.4.so.2
/usr/lib64/openldap/back_null-2.4.so.2.10.2
/usr/lib64/openldap/back_null.la
/usr/lib64/openldap/back_passwd-2.4.so.2
/usr/lib64/openldap/back_passwd-2.4.so.2.10.2
/usr/lib64/openldap/back_passwd.la
/usr/lib64/openldap/back_perl-2.4.so.2
/usr/lib64/openldap/back_perl-2.4.so.2.10.2
/usr/lib64/openldap/back_perl.la
/usr/lib64/openldap/back_relay-2.4.so.2
/usr/lib64/openldap/back_relay-2.4.so.2.10.2
/usr/lib64/openldap/back_relay.la
/usr/lib64/openldap/back_shell-2.4.so.2
/usr/lib64/openldap/back_shell-2.4.so.2.10.2
/usr/lib64/openldap/back_shell.la
/usr/lib64/openldap/back_sock-2.4.so.2
/usr/lib64/openldap/back_sock-2.4.so.2.10.2
/usr/lib64/openldap/back_sock.la
/usr/lib64/openldap/check_password.so.1.1
/usr/lib64/openldap/collect-2.4.so.2
/usr/lib64/openldap/collect-2.4.so.2.10.2
/usr/lib64/openldap/collect.la
/usr/lib64/openldap/constraint-2.4.so.2
/usr/lib64/openldap/constraint-2.4.so.2.10.2
/usr/lib64/openldap/constraint.la
/usr/lib64/openldap/dds-2.4.so.2
/usr/lib64/openldap/dds-2.4.so.2.10.2
/usr/lib64/openldap/dds.la
/usr/lib64/openldap/deref-2.4.so.2
/usr/lib64/openldap/deref-2.4.so.2.10.2
/usr/lib64/openldap/deref.la
/usr/lib64/openldap/dyngroup-2.4.so.2
/usr/lib64/openldap/dyngroup-2.4.so.2.10.2
/usr/lib64/openldap/dyngroup.la
/usr/lib64/openldap/dynlist-2.4.so.2
/usr/lib64/openldap/dynlist-2.4.so.2.10.2
/usr/lib64/openldap/dynlist.la
/usr/lib64/openldap/memberof-2.4.so.2
/usr/lib64/openldap/memberof-2.4.so.2.10.2
/usr/lib64/openldap/memberof.la
/usr/lib64/openldap/pcache-2.4.so.2
/usr/lib64/openldap/pcache-2.4.so.2.10.2
/usr/lib64/openldap/pcache.la
/usr/lib64/openldap/ppolicy-2.4.so.2
/usr/lib64/openldap/ppolicy-2.4.so.2.10.2
/usr/lib64/openldap/ppolicy.la
/usr/lib64/openldap/refint-2.4.so.2
/usr/lib64/openldap/refint-2.4.so.2.10.2
/usr/lib64/openldap/refint.la
/usr/lib64/openldap/retcode-2.4.so.2
/usr/lib64/openldap/retcode-2.4.so.2.10.2
/usr/lib64/openldap/retcode.la
/usr/lib64/openldap/rwm-2.4.so.2
/usr/lib64/openldap/rwm-2.4.so.2.10.2
/usr/lib64/openldap/rwm.la
/usr/lib64/openldap/seqmod-2.4.so.2
/usr/lib64/openldap/seqmod-2.4.so.2.10.2
/usr/lib64/openldap/seqmod.la
/usr/lib64/openldap/smbk5pwd-2.4.so.2
/usr/lib64/openldap/smbk5pwd-2.4.so.2.10.2
/usr/lib64/openldap/smbk5pwd.la
/usr/lib64/openldap/sssvlv-2.4.so.2
/usr/lib64/openldap/sssvlv-2.4.so.2.10.2
/usr/lib64/openldap/sssvlv.la
/usr/lib64/openldap/syncprov-2.4.so.2
/usr/lib64/openldap/syncprov-2.4.so.2.10.2
/usr/lib64/openldap/syncprov.la
/usr/lib64/openldap/translucent-2.4.so.2
/usr/lib64/openldap/translucent-2.4.so.2.10.2
/usr/lib64/openldap/translucent.la
/usr/lib64/openldap/unique-2.4.so.2
/usr/lib64/openldap/unique-2.4.so.2.10.2
/usr/lib64/openldap/unique.la
/usr/lib64/openldap/valsort-2.4.so.2
/usr/lib64/openldap/valsort-2.4.so.2.10.2
/usr/lib64/openldap/valsort.la
/usr/libexec/openldap/check-config.sh
/usr/libexec/openldap/convert-config.sh
/usr/libexec/openldap/functions
/usr/libexec/openldap/generate-server-cert.sh
/usr/libexec/openldap/upgrade-db.sh
/usr/sbin/slapacl
/usr/sbin/slapadd
/usr/sbin/slapauth
/usr/sbin/slapcat
/usr/sbin/slapd
/usr/sbin/slapdn
/usr/sbin/slapindex
/usr/sbin/slappasswd
/usr/sbin/slapschema
/usr/sbin/slaptest
/usr/share/doc/openldap-servers-2.4.39
/usr/share/doc/openldap-servers-2.4.39/README.back_perl
/usr/share/doc/openldap-servers-2.4.39/README.check_pwd
/usr/share/doc/openldap-servers-2.4.39/README.schema
/usr/share/doc/openldap-servers-2.4.39/README.smbk5pwd
/usr/share/doc/openldap-servers-2.4.39/SampleLDAP.pm
/usr/share/doc/openldap-servers-2.4.39/allmail-en.png
/usr/share/doc/openldap-servers-2.4.39/allusersgroup-en.png
/usr/share/doc/openldap-servers-2.4.39/config_dit.png
/usr/share/doc/openldap-servers-2.4.39/config_local.png
/usr/share/doc/openldap-servers-2.4.39/config_ref.png
/usr/share/doc/openldap-servers-2.4.39/config_repl.png
/usr/share/doc/openldap-servers-2.4.39/delta-syncrepl.png
/usr/share/doc/openldap-servers-2.4.39/dual_dc.png
/usr/share/doc/openldap-servers-2.4.39/guide.html
/usr/share/doc/openldap-servers-2.4.39/intro_dctree.png
/usr/share/doc/openldap-servers-2.4.39/intro_tree.png
/usr/share/doc/openldap-servers-2.4.39/ldap-sync-refreshandpersist.png
/usr/share/doc/openldap-servers-2.4.39/ldap-sync-refreshonly.png
/usr/share/doc/openldap-servers-2.4.39/n-way-multi-master.png
/usr/share/doc/openldap-servers-2.4.39/push-based-complete.png
/usr/share/doc/openldap-servers-2.4.39/push-based-standalone.png
/usr/share/doc/openldap-servers-2.4.39/refint.png
/usr/share/doc/openldap-servers-2.4.39/set-following-references.png
/usr/share/doc/openldap-servers-2.4.39/set-memberUid.png
/usr/share/doc/openldap-servers-2.4.39/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-mdb.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-pbind.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-sock.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
/usr/share/openldap-servers
/usr/share/openldap-servers/DB_CONFIG.example
/usr/share/openldap-servers/slapd.ldif
/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
Resolving Dependencies
--> Running transaction check
---> Package openldap-clients.x86_64 0:2.4.39-3.el7 will be installed
--> Finished Dependency Resolution

Changes in packages about to be updated:


Dependencies Resolved

================================================================================
 Package                 Arch          Version                Repository   Size
================================================================================
Installing:
 openldap-clients        x86_64        2.4.39-3.el7           base        183 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 183 k
Installed size: 575 k
Is this ok [y/d/N]: y
Downloading packages:
openldap-clients-2.4.39-3.el7.x86_64.rpm                   | 183 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : openldap-clients-2.4.39-3.el7.x86_64                         1/1 
  Verifying  : openldap-clients-2.4.39-3.el7.x86_64                         1/1 

Installed:
  openldap-clients.x86_64 0:2.4.39-3.el7                                        

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket openldap-clients installiert wurden.

# rpm -qil openldap-clients
Name        : openldap-clients
Version     : 2.4.39
Release     : 3.el7
Architecture: x86_64
Install Date: Fri 14 Nov 2014 09:02:59 AM CET
Group       : Applications/Internet
Size        : 588425
License     : OpenLDAP
Signature   : RSA/SHA256, Fri 04 Jul 2014 06:04:16 AM CEST, Key ID 24c6a8a7f4a80eb5
Source RPM  : openldap-2.4.39-3.el7.src.rpm
Build Date  : Tue 10 Jun 2014 01:24:08 AM CEST
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
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:

# systemctl enable slapd.service
ln -s '/usr/lib/systemd/system/slapd.service' '/etc/systemd/system/multi-user.target.wants/slapd.service'

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:

# systemctl list-unit-files --type=service | grep -e slapd.service
slapd.service                          enabled

bzw.

# systemctl is-enabled slapd.service
enabled

IPv6 deaktivieren

Der Einsatz von IPv6 soll nicht durchgeführt werden. Deshalb muss die nachfolgende Konfigurationsdatei wie folgt angepasst werden:

  • /etc/sysconfig/slapd

Folgende Ergänzung in der Konfigurationsdatei /etc/sysconfig/slapd muss durchgeführt werden, um den slapd-Dienst/Daemon ohne die Nutzung von IPv6 zu starten (komplette Konfigurationsdatei):

# OpenLDAP server configuration
# see 'man slapd' for additional information
 
# Where the server will run (-h option)
# - ldapi:/// is required for on-the-fly configuration using client tools
#   (use SASL with EXTERNAL mechanism for authentication)
# - default: ldapi:/// ldap:///
# - example: ldapi:/// ldap://127.0.0.1/ ldap://10.0.0.1:1389/ ldaps:///
SLAPD_URLS="ldapi:/// ldap:///"
 
# Any custom options
# Tachtler
# default: #SLAPD_OPTIONS=""
SLAPD_OPTIONS="-4"
 
# Keytab location for GSSAPI Kerberos authentication
#KRB5_KTNAME="FILE:/etc/openldap/ldap.keytab"

Effektiv werden am Ende der Konfigurationsdatei nachfolgende Zeilen angefügt:

# Tachtler
# default: #SLAPD_OPTIONS=""
SLAPD_OPTIONS="-4"

FIXME - 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 0 packets, 0 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 0 packets, 0 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:

# /usr/sbin/iptables-save > /etc/sysconfig/iptables 

Basis-Konfiguration

Vorbereitung

Bevor mit den Änderungen an den *.ldif-Konfigurationsdateien begonnen werden kann, 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 24
drwxr-xr-x.  6 root root  106 Nov 14 09:21 .
drwxr-xr-x. 73 root root 8192 Nov 14 09:01 ..
drwxr-xr-x.  2 root root    6 Jun 10 01:23 certs
-rw-r--r--   1 root root  121 Jun 10 01:23 check_password.conf
-rw-r--r--.  1 root root  363 Jun 10 01:23 ldap.conf
drwxr-xr-x   2 root root 4096 Nov 14 09:01 schema
drwx------   3 ldap ldap   43 Nov 14 09:01 slapd.d
drwx------   3 ldap ldap   43 Nov 14 09:01 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 !!!

Konfigurationsdateien

Es gibt zwei wichtige Konfigurationsdateien,

  • /etc/openldap/ldap.conf
  • /var/lib/ldap/DB_CONFIG

und das wichtigste, das Konfigurationsverzeichnis:

  • /etc/openldap/slapd.d/*

/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:

# cat /etc/openldap/ldap.conf
#
# 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
 
TLS_CACERTDIR	/etc/openldap/certs
 
# Turning this off breaks GSSAPI used with krb5 when rdns = false
SASL_NOCANON	on

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 Searchbase (Suchbasis) 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.
 
# Tachtler
# default: #BASE	dc=example,dc=com
# default: #URI	ldap://ldap.example.com ldap://ldap-master.example.com:666
BASE	dc=tachtler,dc=net
URI	ldap://ldap.idmz.tachtler.net
 
#SIZELIMIT	12
#TIMELIMIT	15
#DEREF		never
 
TLS_CACERTDIR	/etc/openldap/certs
 
# Turning this off breaks GSSAPI used with krb5 when rdns = false
SASL_NOCANON	on

/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/openldap-servers/DB_CONFIG.example

verwendet werden.

Nachfolgender Befehl sollte eine Kopie im Verzeichnis /var/lib/ldap erstellen:

# cp -a /usr/share/openldap-servers/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 8
drwx------.  2 ldap ldap   22 Nov 14 09:33 .
drwxr-xr-x. 24 root root 4096 Nov 14 03:43 ..
-rw-r--r--   1 ldap ldap  845 Jun 10 01:23 DB_CONFIG

:!: HINWEIS - Der Inhalt der Datei, kann unverändert bleiben !!!

Der Inhalt der Konfigurationsdatei /var/lib/ldap/DB_CONFIG sollte wie folgt aussehen, was mit nachfolgendem Befehl überprüft werden kann:

(Komplette Konfigurationsdatei)

# cat /var/lib/ldap/DB_CONFIG 
# $OpenLDAP$
# Example DB_CONFIG file for use with slapd(8) BDB/HDB databases.
#
# See the Oracle Berkeley DB documentation
#   <http://www.oracle.com/technology/documentation/berkeley-db/db/ref/env/db_config.html>
# for detail description of DB_CONFIG syntax and semantics.
#
# Hints can also be found in the OpenLDAP Software FAQ
#	<http://www.openldap.org/faq/index.cgi?file=2>
# in particular:
#   <http://www.openldap.org/faq/index.cgi?file=1075>
 
# Note: most DB_CONFIG settings will take effect only upon rebuilding
# the DB environment.
 
# one 0.25 GB cache
set_cachesize 0 268435456 1
 
# Data Directory
#set_data_dir db
 
# Transaction Log settings
set_lg_regionmax 262144
set_lg_bsize 2097152
#set_lg_dir logs
 
# Note: special DB_CONFIG flags are no longer needed for "quick"
# slapadd(8) or slapindex(8) access (see their -q option).

/etc/hosts

Falls keine DNS-Auflösung des Namens, welcher in der Konfigurationsdatei

  • /etc/openldap/ldap.conf

unter

...
URI	ldap://ldap.idmz.tachtler.net
...

möglich ist, muss in der Konfigurationsdatei

  • /etc/hosts

nachfolgende Ergänzung hinzugefügt werden:

127.0.0.1      localhost localhost.localdomain localhost4 localhost4.localdomain4
::1            localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.0.30   ldap.idmz.tachtler.net

:!: HINWEIS - Die Ergänzung ist in der 3 Zeile in oben gezeigter Konfigurationsdatei!

Somit kann gewährleistet werden, dass die Verwendung des DNS-Namens möglich ist.

LOG-Schreibung

/etc/rsyslog.conf

Um die LOG-Einträge des OpenLDAP-Servers, bzw. des slapd-Daemons/Dienstes in einer separaten LOG-Datei, wie z.B.

  • /var/log/slapd.log

loggen zu lassen, sind nachfolgende Änderungen des Standard-LOG-Deamons/Dienstes unter CentOS in der Version 7.x

  • rsyslog

in der Konfigurationsdatei

  • /etc/rsyslog.conf

durchzuführen.

Hier die Ergänzungen in der Konfigurationsdatei /etc/rsyslog.conf

(nur relevanter Ausschnitt):

...
# Tachtler
# Log all the slapd messages in one place.
local4.*                                                -/var/log/slapd.log
...

Der Neustart des Standard-LOG-Deamons/Dienstes rsyslog kann mit nachfolgendem Befehl durchgeführt werden:

# systemctl restart rsyslog.service

/etc/logrotate.d/syslog

Nachfolgende Ergänzung sollte in der Konfigurationsdatei

  • /etc/logrotate.d/syslog

um auch das Rotieren der neuen Log-Datei

  • /var/log/slapd.log

durchführen zu können:

(Komplette Konfigurationsdatei)

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
/var/log/slapd.log
{
    sharedscripts
    postrotate
	/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

:!: HINWEIS - Die Ergänzung ist in der 6 Zeile in oben gezeigter Konfigurationsdatei!

Erster Start

Bevor weitere Konfigurationsschritte erfolgen, sollte dem ersten Start nichts im Wege stehen, da bereits hier Konfigurationseinstellungen durchgeführt werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# systemctl start slapd.service

:!: HINWEIS - Es erfolgen keine weiteren Ausgaben, wenn der Start erfolgreich war !

OpenLDAP-Server Überprüfung

Ob der OpenLDAP-Server, sprich der slapd-Dienst/Deamon auch tatsächlich als Hintergrundprozess läuft, kann mit nachfolgendem Befehl überprüft werden (Es sollte eine Ausgabe wie nachfolgend dargestellt erfolgen - es kommt auf die zweite Zeile an!):

# ps auxwf | grep slapd
root     16948  0.0  0.0 112640   928 pts/0    S+   13:36   0:00                      \_ grep --color=auto slapd
ldap     16944  0.3  1.2 425596 23768 ?        Ssl  13:36   0:00 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:/// -4

und nachfolgender Befehl:

# netstat -tulpen | grep slapd
tcp        0      0 0.0.0.0:389        0.0.0.0:*               LISTEN      0          85342      16944/slapd

bzw. nachfolgender Befehl:

# systemctl status slapd.service
slapd.service - OpenLDAP Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled)
   Active: active (running) since Fri 2014-11-14 13:36:13 CET; 1min 13s ago
  Process: 16940 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, 
  status=0/SUCCESS)
  Process: 16925 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS)
 Main PID: 16944 (slapd)
   CGroup: /system.slice/slapd.service
           └─16944 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:/// -4

Nov 14 13:36:12 vml70030.idmz.tachtler.net systemd[1]: Starting OpenLDAP Serv...
Nov 14 13:36:12 vml70030.idmz.tachtler.net runuser[16928]: pam_unix(runuser:s...
Nov 14 13:36:12 vml70030.idmz.tachtler.net slapd[16940]: @(#) $OpenLDAP: slap...
                                                                 mockbuild@wo...
Nov 14 13:36:13 vml70030.idmz.tachtler.net slapd[16944]: slapd starting
Nov 14 13:36:13 vml70030.idmz.tachtler.net systemd[1]: Started OpenLDAP Serve...
Hint: Some lines were ellipsized, use -l to show in full.

Eine weitere Überprüfung, ob der erste Start erfolgreich war, kann durch Einsicht der LOG-Dateien

  • /var/log/slapd.log

durchgeführt werden.

Ausgabe der LOG-Datei /var/log/slapd.log mit nachfolgendem Befehl, die Ausgabe sollte wie nachfolgend dargestellt aussehen:

# cat /var/log/slapd.log
Nov 14 13:36:12 vml70030 slapd[16940]: @(#) $OpenLDAP: slapd 2.4.39 (Jun  9 2014 23:23:12) $
	mockbuild@worker1.bsys.centos.org:/builddir/build/BUILD/openldap-2.4.39/openldap-2.4.39/servers/slapd
Nov 14 13:36:13 vml70030 slapd[16944]: slapd starting

Durch nachfolgenden Befehl, kann das Verzeichnis in dem die Berkely(HDB)-Datenbank standardmäßig die Dateien ablegt, angezeigt werden. Die Ausgabe sollte in etwa wie nachfolgend gezeigt aussehen:

# ls -la /var/lib/ldap/
total 19160
drwx------.  2 ldap ldap     4096 Nov 14 13:36 .
drwxr-xr-x. 24 root root     4096 Nov 14 03:43 ..
-rw-r--r--   1 ldap ldap     2048 Nov 14 13:36 alock
-rw-------   1 ldap ldap  2351104 Nov 14 13:36 __db.001
-rw-------   1 ldap ldap 17457152 Nov 14 13:36 __db.002
-rw-------   1 ldap ldap  1884160 Nov 14 13:36 __db.003
-rw-r--r--   1 ldap ldap      845 Jun 10 01:23 DB_CONFIG
-rw-------   1 ldap ldap     8192 Nov 14 13:36 dn2id.bdb
-rw-------   1 ldap ldap    32768 Nov 14 13:36 id2entry.bdb
-rw-------   1 ldap ldap 10485760 Nov 14 13:36 log.0000000001

Konfigurationsdateien

Nachdem der OpenLDAP-Server nun am laufen ist, kann mit der individuellen Konfiguration begonnen werden.

Bevor mit der Konfiguration begonnen werden sollte, soll hier ein Verzeichnis, wie nachfolgend dargestellt, mit nachfolgendem Befehl angelegt werden, welches die einzelnen LDIF-Dateien aufnehmen soll, die zur Konfiguration erstellt werden sollen:

# mkdir /etc/openldap/ldif

Des weiteren soll vorab ein Passwort erstellt werden, welches im nächsten Schritt als ROOT-Passwort implementiert werden soll, damit unter Angabe dieses Passwortes, alle Konfigurationen des OpenLDAP-Servers verwaltet werden können, was mit nachfolgendem Befehl durchgeführt werden soll:

# /usr/sbin/slappasswd
New password: 
Re-enter new password: 
{SSHA}69iaXumzEio/JQTg1DOni/tnzsZ0FYCf

LDIF: Root-Passwort

Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.

LDIF-Datei Verwendungszweck
/etc/openldap/ldif/cn=config_olcRootPW.ldif Erstellung eines ROOT-Passwortes
# touch /etc/openldap/ldif/cn=config_olcRootPW.ldif

Die LDIF-Datei /etc/openldap/ldif/cn=config_olcRootPW.ldif soll nachfolgenden Inhalt bekommen:

dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: {SSHA}69iaXumzEio/JQTg1DOni/tnzsZ0FYCf

:!: HINWEIS - Hier kommt das zuvor erstellte Passwort zum Einsatz!

Abschließend wird mit nachfolgendem Befehl der Inhalt der LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration des OpenLDAP-Servers hinzugefügt:

# ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/ldif/cn\=config_olcRootPW.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={0}config,cn=config"

:!: WICHTIG - Damit wurde ein ROOT-Passwort gesetzt, wodurch durch Angabe dieses Passwortes, alle Konfigurationen des OpenLDAP-Servers verwaltet werden können !!!

/etc/openldap/slapd.d/cn=config.ldif

Die Konfigurationsdatei

  • /etc/openldap/slapd.d/cn=config.ldif

stellt die Hauptkonfigurationsdatei des OpenLDAP-Servers dar und beinhaltet die globalen Konfigurationen.

:!: WICHTIG - Es sollten KEINE Änderungen durch manuelle Ergänzungen durchgeführt werden !!!

Eine Abfrage der Konfiguration, welche mit nachfolgendem Befehl durchgeführt werden kann, sollte eine Ausgabe in etwa wie die nachfolgende zum Vorschein bringen:

# 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
olcArgsFile: /var/run/openldap/slapd.args
olcPidFile: /var/run/openldap/slapd.pid
olcTLSCACertificatePath: /etc/openldap/certs
olcTLSCertificateFile: "OpenLDAP Server"
olcTLSCertificateKeyFile: /etc/openldap/certs/password

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

/etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif

Die Konfigurationsdatei

  • /etc/openldap/slapd.d/cn=config/olcDatabase={0}config.ldif

stellt die Hauptkonfigurationsdatei des OpenLDAP-Servers dar und beinhaltet den expliziten Konfigurationen.

:!: WICHTIG - Es sollten KEINE Änderungen durch manuelle Ergänzungen durchgeführt werden !!!

Eine Abfrage der Konfiguration, welche mit nachfolgendem Befehl durchgeführt werden kann, sollte eine Ausgabe in etwa wie die nachfolgende zum Vorschein bringen:

# 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 dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth" manage by * none
olcRootPW: {SSHA}69iaXumzEio/JQTg1DOni/tnzsZ0FYCf

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

/etc/openldap/slapd.d/cn=config/olcDatabase={-1}frontend.ldif

Die Konfigurationsdatei

  • /etc/openldap/slapd.d/cn=config/olcDatabase={-1}frontend.ldif

stellt die Zugriffskonfigurationsdatei des OpenLDAP-Servers dar und beinhaltet die Konfigurationen für den Zugriff.

:!: WICHTIG - Es sollten KEINE Änderungen durch manuelle Ergänzungen durchgeführt werden !!!

Eine Abfrage der Konfiguration, welche mit nachfolgendem Befehl durchgeführt werden kann, sollte eine Ausgabe in etwa wie die nachfolgende zum Vorschein bringen:

# 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
objectClass: olcDatabaseConfig
olcDatabase: frontend

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

/etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif

Die Konfigurationsdatei

  • /etc/openldap/slapd.d/cn=config/olcDatabase={1}monitor.ldif

stellt die Selbstüberwachungskonfigurationsdatei des OpenLDAP-Servers dar und beinhaltet die Konfigurationen zur Überwachung und Selbstverwaltung.

:!: WICHTIG - Es sollten KEINE Änderungen durch manuelle Ergänzungen durchgeführt werden !!!

Eine Abfrage der Konfiguration, welche mit nachfolgendem Befehl durchgeführt werden kann, sollte eine Ausgabe in etwa wie die nachfolgende zum Vorschein bringen:

# ldapsearch -W -x -D cn=config -b olcDatabase={1}monitor,cn=config
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <olcDatabase={1}monitor,cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# {1}monitor, config
dn: olcDatabase={1}monitor,cn=config
objectClass: olcDatabaseConfig
olcDatabase: {1}monitor
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth" read by dn.base="cn=Manager,dc=my-domain,dc=com" read by * none

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

/etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif

Die Konfigurationsdatei

  • /etc/openldap/slapd.d/cn=config/olcDatabase={2}hdb.ldif

stellt die Datenbankkonfiguration des OpenLDAP-Servers dar und beinhaltet die Konfiguration der darunterliegenden Datenbank.

:!: WICHTIG - Es sollten KEINE Änderungen durch manuelle Ergänzungen durchgeführt werden !!!

Eine Abfrage der Konfiguration, welche mit nachfolgendem Befehl durchgeführt werden kann, sollte eine Ausgabe in etwa wie die nachfolgende zum Vorschein bringen:

# ldapsearch -W -x -D cn=config -b olcDatabase={2}hdb,cn=config
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <olcDatabase={2}hdb,cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# {2}hdb, config
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=my-domain,dc=com
olcRootDN: cn=Manager,dc=my-domain,dc=com
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Komplette Konfiguration

Mit nachfolgendem Befehl, kann die komplette Konfiguration, wie sie durch den OpenLDAP-Server selbst verwaltet wird, inklusive aller zur Verwendung kommenden und geladenen Schemata und der vorangegangenen Konfigurationen, ausgegeben werden:

(Nur beispielhafter Ausschnitt)

# ldapsearch -W -x -D cn=config -b cn=config
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

...

# numResponses: 8
# numEntries: 7

Erweiterte-Konfiguration

Zur Konfiguration des OpenLDAP-Servers, sollen LDIF-Dateien zum Einsatz kommen, welche im Verzeichnis

  • /etc/openldap/ldif

erstellt und abgelegt werden sollen.

Des weiteren ist die Kenntnis des Passwortes, welches im vorher durchgeführten Schritt der Einrichtung des OpenLDAP-Servers unter

erstellt wurde und als olcRootPW im OpenLDAP-Server hinterlegt wurde, erforderlich.

LDIF: Base

Aktuell sollte die Basis bzw. die Wurzel des LDAP-Baumes noch auf nachfolgende Einstellung lauten

  • dc=my-domain,dc=com

Die Angabe der Basis bzw. die Wurzel des LDAP-Baumes kommt in nachfolgenden Konfigurationsabschnitten des OpenLDAP-Servers vor und muss dort auch jeweils geändert werden:

  • olcDatabase={1}monitor,cn=config
    • olcAccess
  • olcDatabase={2}hdb,cn=config
    • olcSuffix
    • olcRootDN

Um die Änderungen in den jeweiligen Konfigurationsabschnitten durchführen zu können, soll mit nachfolgendem Befehl eine neue LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.

LDIF-Datei Verwendungszweck
/etc/openldap/ldif/cn=config_BASE.ldif Änderung von dc=my-domain,dc=com
# touch /etc/openldap/ldif/cn=config_BASE.ldif

Die LDIF-Datei /etc/openldap/ldif/cn=config_BASE.ldif soll nachfolgenden Inhalt bekommen:

dn: olcDatabase={1}monitor,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external
 ,cn=auth" read by dn.base="cn=Manager,dc=tachtler,dc=net" read by * none
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=tachtler,dc=net
 
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=tachtler,dc=net

:!: HINWEIS - Es dürfen KEINE Leerzeichen zwischen den einzelnen Anweisungen in den Leerzeilen vorhanden sein!

Abschließend wird mit nachfolgendem Befehl der Inhalt der LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers dazu verwendet die Konfiguration des OpenLDAP-Servers abzuändern:

# ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/ldif/cn\=config_BASE.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={1}monitor,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

modifying entry "olcDatabase={2}hdb,cn=config"

Um überprüfen zu können, ob alle Änderungen erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden und sollte eine Ausgabe wie nachfolgende zur Anzeige bringen:

# ldapsearch -W -x -D cn=config -b cn=config | grep -b1 cn=Manager
Enter LDAP Password: 
62457-olcAccess: {0}to * by dn.base="gidNumber=0+uidNumber=0,cn=peercred,cn=external
62536: ,cn=auth" read by dn.base="cn=Manager,dc=tachtler,dc=net" read by * none
62610-
--
62853-olcSuffix: dc=tachtler,dc=net
62883:olcRootDN: cn=Manager,dc=tachtler,dc=net
62924-

LDIF: Manager-Passwort

Auch der Manager soll ein Passwort erhalten, damit der Zugriff geschützt ist.

Deshalb muss vorab ein Passwort erstellt werden, welches im nächsten Schritt als Manager-Passwort implementiert werden soll, damit unter Angabe dieses Passwortes, zukünftig alle Konfigurationen des OpenLDAP-Servers verwaltet werden können, was mit nachfolgendem Befehl durchgeführt werden soll:

# /usr/sbin/slappasswd
New password:
Re-enter new password:
{SSHA}moVXokSVz9/pcZpdyJ0EYlzutrnt4iK1

Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.

LDIF-Datei Verwendungszweck
/etc/openldap/ldif/cn=config_Manager_olcRootPW.ldif Erstellung eines Manager-Passwortes
# touch /etc/openldap/ldif/cn=config_Manager_olcRootPW.ldif

Die LDIF-Datei /etc/openldap/ldif/cn=config_Manager_olcRootPW.ldif soll nachfolgenden Inhalt bekommen:

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}moVXokSVz9/pcZpdyJ0EYlzutrnt4iK1 

:!: HINWEIS - Hier kommt das zuvor erstellte Passwort zum Einsatz!

Abschließend wird mit nachfolgendem Befehl der Inhalt der LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration des OpenLDAP-Servers hinzugefügt:

# ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/ldif/cn\=config_Manager_olcRootPW.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"

:!: WICHTIG - Damit wurde ein Manager-Passwort gesetzt, wodurch durch Angabe dieses Passwortes, alle Konfigurationen des OpenLDAP-Servers verwaltet werden können !!!

Um überprüfen zu können, ob alle Änderungen erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden und sollte eine Ausgabe wie nachfolgende zur Anzeige bringen:

# ldapsearch -W -x -D cn=config -b olcDatabase={2}hdb,cn=config
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <olcDatabase={2}hdb,cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# {2}hdb, config
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
olcSuffix: dc=tachtler,dc=net
olcRootDN: cn=Manager,dc=tachtler,dc=net
olcRootPW: {SSHA}moVXokSVz9/pcZpdyJ0EYlzutrnt4iK1

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

LDIF: olcIdleTimeout

Der Parameter olcIdleTimeout beendet nach dem angegebenen Wert in Sekunden die Verbindung zum Client, wenn diese innerhalb der angegebenen Zeit keine Aktivitäten mehr zeigt.

Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.

LDIF-Datei Verwendungszweck
/etc/openldap/ldif/cn=config_GLOBAL_olcIdleTimeout.ldif Beendet ungenutzte Client Verbindungen nach der angegebenen Zeit in Sekunden
# touch /etc/openldap/ldif/cn=config_GLOBAL_olcIdleTimeout.ldif

Die LDIF-Datei /etc/openldap/ldif/cn=config_GLOBAL_olcIdleTimeout.ldif soll nachfolgenden Inhalt bekommen:

dn: cn=config
changetype: modify
add: olcIdleTimeout
olcIdleTimeout: 15

Abschließend wird mit nachfolgendem Befehl der Inhalt der LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration des OpenLDAP-Servers hinzugefügt:

# ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/ldif/cn\=config_GLOBAL_olcIdleTimeout.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

Um überprüfen zu können, ob alle Änderungen erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden und sollte eine Ausgabe wie nachfolgende zur Anzeige bringen:

# 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
olcArgsFile: /var/run/openldap/slapd.args
olcPidFile: /var/run/openldap/slapd.pid
olcTLSCACertificatePath: /etc/openldap/certs
olcTLSCertificateFile: "OpenLDAP Server"
olcTLSCertificateKeyFile: /etc/openldap/certs/password
olcIdleTimeout: 15

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

LDIF: olcReferral

Der Parameter olcReferral definiert die zurückgelieferte URL, wenn der OpenLDAP-Server keine lokale Datenbank findet, um die Anfrage zu beantworten.

Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.

LDIF-Datei Verwendungszweck
/etc/openldap/ldif/cn=config_GLOBAL_olcReferral.ldif Rückgabe URL, wenn eine Anfrage nicht beantwortet werden kann
# touch /etc/openldap/ldif/cn=config_GLOBAL_olcReferral.ldif

Die LDIF-Datei /etc/openldap/ldif/cn=config_GLOBAL_olcReferral.ldif soll nachfolgenden Inhalt bekommen:

dn: cn=config
changetype: modify
add: olcReferral
olcReferral: ldap://ldap.idmz.tachtler.net

Abschließend wird mit nachfolgendem Befehl der Inhalt der LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration des OpenLDAP-Servers hinzugefügt:

# ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/ldif/cn\=config_GLOBAL_olcReferral.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

Um überprüfen zu können, ob alle Änderungen erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden und sollte eine Ausgabe wie nachfolgende zur Anzeige bringen:

# 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
olcArgsFile: /var/run/openldap/slapd.args
olcPidFile: /var/run/openldap/slapd.pid
olcTLSCACertificatePath: /etc/openldap/certs
olcTLSCertificateFile: "OpenLDAP Server"
olcTLSCertificateKeyFile: /etc/openldap/certs/password
olcIdleTimeout: 15
olcReferral: ldap://ldap.idmz.tachtler.net

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

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 ein sogenanntes Self-Signed-Certificate (Selbst erstelltes/unterschriebenes) Zertifikat zum Einsatz.

Um die Verschlüsselung einsetzen zu können, sind folgende Komponenten erforderlich:

  • eine eigen Certificate Authority (CA), welche Self-Signed-Certificate (Selbst erstelltes/unterschriebenes) Zertifikat esrtellen kann
  • einen CSR (Certificate Request), welcher von einer Certificate Authority (CA) signiert wird
  • einem private key (privaten Schlüssel), welcher zum CRT (Certificate) gehört und zum Einsatz eines CRT (Certificate) benötigt wird
  • das CRT (Certificate) selbst, welcher von der Certificate Authority (CA) ausgestellt wird

Zur Erstellung eines Self-Signed-Certificate und zur Erstellung der oben genannten Komponenten, wird das RPM-Paket

  • openssl

benötigt, welches i.d.R. bereits installiert sein sollte.

Erstellen Certificate Authority (CA)

Zur Erstellung einer eigene 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.

:!: HINWEIS - Die zu erstellende Certificate Authority (CA) hat standardmäßig eine Laufzeit von 3 Jahren !!!

Falls eine längere Laufzeit als drei Jahre gewünscht sein soll, kann nachfolgender Parameter im Skript, in nachfolgendem Verzeichnis, mit nachfolgendem Namen

  • /etc/pki/tls/misc/CA

angepasst werden:

(Nur relevanter Ausschnitt)

...
# Tachtler
# default: CADAYS="-days 1095"  # 3 years
CADAYS="-days 31091"    #  16.11.2014 - 31.12.2099
...

:!: WICHTIG - Die Laufzeit der Certificate Authority (CA) muss länger als die Laufzeit des Zertifikates sein !!!

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) []:Bayern (Bavaria)
Locality Name (eg, city) [Default City]:Muenchen (Munich)
Organization Name (eg, company) [Default Company Ltd]:Klaus Tachtler
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: 11423039639335115830 (0x9e86ca07b5c69c36)
        Validity
            Not Before: Nov 16 08:46:20 2014 GMT
            Not After : Dec 31 08:46:20 2099 GMT
        Subject:
            countryName               = DE
            stateOrProvinceName       = Bayern (Bavaria)
            organizationName          = Klaus Tachtler
            commonName                = www.tachtler.net
            emailAddress              = hostmaster@tachtler.net
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                04:3C:D9:D4:7E:88:43:56:5B:A6:6E:30:0C:29:CB:71:D3:E6:9B:5A
            X509v3 Authority Key Identifier:
                keyid:04:3C:D9:D4:7E:88:43:56:5B:A6:6E:30:0C:29:CB:71:D3:E6:9B:5A

            X509v3 Basic Constraints:
                CA:TRUE
Certificate is to be certified until Dec 31 08:46:20 2099 GMT (31091 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 4557 Nov 16 09:46 /etc/pki/CA/cacert.pem
-rw-r--r--  1 root root 1082 Nov 16 09:46 /etc/pki/CA/careq.pem
-rw-r--r--  1 root root  144 Nov 16 09:46 /etc/pki/CA/index.txt
-rw-r--r--  1 root root   21 Nov 16 09:46 /etc/pki/CA/index.txt.attr
-rw-r--r--  1 root root    0 Nov 16 09:45 /etc/pki/CA/index.txt.old
-rw-r--r--  1 root root   17 Nov 16 09:46 /etc/pki/CA/serial

/etc/pki/CA/certs:
total 4
drwxr-xr-x. 2 root root    6 Oct 16 17:41 .
drwxr-xr-x. 6 root root 4096 Nov 16 09:46 ..

/etc/pki/CA/crl:
total 4
drwxr-xr-x. 2 root root    6 Oct 16 17:41 .
drwxr-xr-x. 6 root root 4096 Nov 16 09:46 ..

/etc/pki/CA/newcerts:
total 12
drwxr-xr-x. 2 root root   33 Nov 16 09:46 .
drwxr-xr-x. 6 root root 4096 Nov 16 09:46 ..
-rw-r--r--  1 root root 4557 Nov 16 09:46 9E86CA07B5C69C36.pem

/etc/pki/CA/private:
total 8
drwx------. 2 root root   22 Nov 16 09:45 .
drwxr-xr-x. 6 root root 4096 Nov 16 09:46 ..
-rw-r--r--  1 root root 1834 Nov 16 09:46 cakey.pem

Erstellen CSR (Certificate Request)

Ebenfalls mit dem Script, welches schon bei der Erstellung einer eigene Certificate Authority (CA) genutzt wurde und sich unter /etc/pki/tls/misc befindet und den Namen CA trägt, kann nun dieses auch zur Erstellung von

  • einem CSR (Certificate Request)
  • einem private key (privaten Schlüssel)

genutzt werden.

:!: HINWEIS - Das zu erstellende Zertifikat hat standardmäßig eine Laufzeit von 1 Jahr !!!

Falls eine längere Laufzeit als ein Jahr gewünscht sein soll, kann nachfolgender Parameter im Skript, in nachfolgendem Verzeichnis, mit nachfolgendem Namen

  • /etc/pki/tls/openssl.cnf

angepasst werden:

(Nur relevanter Ausschnitt)

...
# Tachtler
# default: default_days = 365                   # how long to certify for
default_days    = 3698                  # how long to certify for 16.11.2014 - 31.12.2024
...

:!: 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) []:Bayern (Bavaria)
Locality Name (eg, city) [Default City]:Muenchen (Munich)
Organization Name (eg, company) [Default Company Ltd]:Klaus Tachtler
Organizational Unit Name (eg, section) []:.
Common Name (eg, your name or your server's hostname) []:ldap.idmz.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

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 Nov 16 09:52 /etc/pki/CA/newkey.pem
-rw-r--r-- 1 root root 1090 Nov 16 09:52 /etc/pki/CA/newreq.pem

:!: WICHTIG - Die so entstandene Datei /etc/pki/CA/newreq.pem enthält den CSR (Certificate Request).

Signieren CSR (Certificate Requests)

Um den in obigen Beispiel entstandenen CSR (Certificate Request) nun mit der Certificate Authority (CA) zu unterschreiben und somit ein CRT (Certificate) zu erzeugen, 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 LDAP CentOS 7 - Erstellen 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: 11423039639335115831 (0x9e86ca07b5c69c37)
        Validity
            Not Before: Nov 16 08:53:07 2014 GMT
            Not After : Dec 31 08:53:07 2024 GMT
        Subject:
            countryName               = DE
            stateOrProvinceName       = Bayern (Bavaria)
            localityName              = Muenchen (Munich)
            organizationName          = Klaus Tachtler
            commonName                = ldap.idmz.tachtler.net
            emailAddress              = hostmaster@tachtler.net
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                57:B3:A0:53:D9:26:E4:FC:3D:01:CF:82:D9:0F:3F:4C:F3:89:A8:37
            X509v3 Authority Key Identifier:
                keyid:04:3C:D9:D4:7E:88:43:56:5B:A6:6E:30:0C:29:CB:71:D3:E6:9B:5A

Certificate is to be certified until Dec 31 08:53:07 2024 GMT (3698 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: 11423039639335115831 (0x9e86ca07b5c69c37)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=DE, ST=Bayern (Bavaria), O=Klaus Tachtler, CN=www.tachtler.net/emailAddress=hostmaster@tachtler.net
        Validity
            Not Before: Nov 16 08:53:07 2014 GMT
            Not After : Dec 31 08:53:07 2024 GMT
        Subject: C=DE, ST=Bayern (Bavaria), L=Muenchen (Munich), O=Klaus Tachtler, CN=ldap.idmz.tachtler.net/emailAddress=hostmaster@tachtler.net
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:c5:7a:62:ae:55:da:fe:5c:e8:2f:b0:23:60:ea:
                    3b:14:55:00:ca:c0:ba:69:fa:e3:2e:8d:a6:4e:81:
                    7f:b5:8a:f6:53:a3:72:da:6b:d1:5f:22:66:bc:85:
                    c6:2a:76:a7:86:82:0a:6b:4c:95:71:6f:e1:96:63:
                    f6:33:ba:dd:ff:ee:12:0d:d2:78:72:72:1c:d4:72:
                    34:7e:75:73:1b:31:79:0a:a6:eb:22:2d:9f:a6:c5:
                    61:7f:3a:f7:20:d5:2b:fb:3d:32:ad:76:0d:43:a0:
                    dc:08:35:cf:8d:8c:d0:20:29:68:78:4e:f8:ba:63:
                    ca:15:50:8d:13:ba:5d:79:e0:93:f0:f7:c3:83:c0:
                    ce:9e:07:1c:4d:5a:f1:59:6d:c5:c2:5f:ef:4e:72:
                    63:d8:9c:be:6f:5c:10:59:48:78:6d:44:c5:42:73:
                    a1:e1:67:b7:5e:ca:4f:09:55:04:d6:64:01:eb:e9:
                    e3:93:cb:5e:80:ce:a4:79:c4:fa:fe:8d:42:35:c0:
                    83:aa:a2:c8:d9:d9:fc:91:81:f3:40:e3:8d:3c:80:
                    92:35:0f:19:41:e9:e0:b3:a9:c2:78:72:b8:47:0d:
                    10:54:ce:79:d0:17:c8:5b:59:c4:93:15:af:80:4b:
                    8e:be:2c:e2:5a:3e:18:bb:47:a9:cb:d5:68:a2:ea:
                    26:d3
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                57:B3:A0:53:D9:26:E4:FC:3D:01:CF:82:D9:0F:3F:4C:F3:89:A8:37
            X509v3 Authority Key Identifier:
                keyid:04:3C:D9:D4:7E:88:43:56:5B:A6:6E:30:0C:29:CB:71:D3:E6:9B:5A

    Signature Algorithm: sha256WithRSAEncryption
         86:b3:65:e7:d0:f7:e4:10:63:7b:ca:58:c1:c6:33:46:8c:aa:
         a6:1c:c1:d5:e2:a7:4f:68:80:cc:47:d7:3c:e9:7b:e4:f7:a1:
         7c:44:ac:8a:27:16:12:01:46:1a:9a:a7:38:f1:17:d5:16:de:
         a5:55:f5:93:f6:87:45:25:ae:ef:2c:32:9f:ea:ae:b7:27:38:
         4d:fb:b4:13:a6:27:9f:b2:10:57:bc:cf:d1:53:fd:3d:d6:49:
         42:48:b8:18:72:53:07:82:a4:de:c7:30:f9:f5:da:9f:f4:22:
         40:09:d0:a6:e8:5c:42:45:67:59:35:17:dc:5e:9f:d0:41:8a:
         bd:f7:39:27:73:02:e9:3d:c5:04:8e:fe:a9:11:d4:d8:16:b1:
         a8:f5:1c:d6:6c:84:47:9e:29:90:d2:ca:41:28:de:c6:dc:bc:
         f9:b3:8b:53:b5:6f:ce:b8:e4:5d:ad:78:7f:20:87:78:63:2b:
         85:78:ca:89:5d:9c:7b:b3:ab:8a:4b:30:5a:a3:82:8e:73:f9:
         56:23:2b:a5:76:56:5f:1c:52:05:48:86:d2:05:fd:56:e1:eb:
         62:21:15:10:f0:93:ad:d5:85:a2:59:ff:f8:ea:b3:9b:7a:3b:
         ef:8a:45:6a:a2:de:fc:ed:93:08:6f:c5:e2:37:29:be:62:18:
         96:55:a9:91
-----BEGIN CERTIFICATE-----
MIIEKjCCAxKgAwIBAgIJAJ6Gyge1xpw3MA1GCSqGSIb3DQEBCwUAMIGEMQswCQYD
VQQGEwJERTEZMBcGB1UECAwQQmF5ZXJuIChCYXZhcmlhKTEXMBUGA1UECgwOS2xh
dXMgVGFjaHRsZXIxGTAXBgNVBAMMEHd3dy50YGNodGxlci5uZXQxJjAkBgkqhkiG
9w0BCQEWF2hvc3RtYXN0ZXJAdGF1aHRsZXIubmV0MB4XDTE0MTExNjA4NTMwN1oX
DTI0MTIzMTA4NTMwN1owgaYxAzAJBgNVBAYTAkRFMRkwFwYDVQQIDBBCYXllcm4g
KEJhdmFyaWEpMRowGAYDVBQHDBFNdWVuY2hlbiAoTXVuaWNoKTEXMBUGA1UECgwO
S2xhdXMgVGFjaHRsZXIxJzAdBgNVBAMMFmxkYXAuaWRtei50YWNodGxlci5uZXQx
JjAkBgkqhkiG9w0BCQEWF2hvc3RtYXN1ZXJAdGFjaHRsZYIubmV0MIIBIjnNBgkq
hkiG9w0BAQEFBAOCAQ8AMIIBCgKCAQEAxXpi/lXa/lzoL7AjYOo7FFUAysC6afrj
To2mToF/tYr3U6Qy2mvRXyJmvIXGL3anhoIKa0yVcW/hlmP2M7rd/+4SDdJ4cnIc
1HI0fnVzG3F5CqbrIifpsVhfzr3INUr+z0yrXYNQ6DcCDXPjZzQICloeE74umPK
FVCNE7pdeeCT8PfDg8DsngcdTVrxWW21wl/vTnJj2Jy+b1wAWUh4bUTFQnKh4We3
XspPCVUE1mQB6+njk8tegM5keMT6/o1CNcCDqqLI2dn8kYHzQOONPICShQ8ZQeng
s6nCeHK4Rw0QVM550Be4Q1nEkxWvgEuOviziWj4Yu0epy9Vowuom0wIDAQABo3sw
eTAJBgNVHRMEAjAAMCwGCWAGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBD
ZXJ0aWZpY2F0ZTAdBgNVHU4EFgQUV7OgU9km5Pw9Ac+C2Q8/TPOJqDcwHwYDVR0j
BBgwFoAUBDzZ1H6IQ1Zbpm1wDCnLcdPmm1owDQYJKoZIhvcNAQELBQADggEBAIaz
ZefQ9+QgY3vKWMHGM0aMqbYswdXip19ogMxH1zzpe+T3oXxErIonFxIBRhqapzjx
F9UW3qVV9ZP2h0Ul7u7sMp/qrrcnOE37tEOmJ5+yAFe8z9FT/T3WSUJIuBhyUweC
pN7HMPn12p/0IkAJ0KbpYEJFZ1k1F9xen9BBir33OSdyAuk9xQSO/qkR1NgWsaj1
HNZshEeeKZDSykEo3sbcvPnzi1O1b8645G2teH8gh3hjK4V4yoldnHuzqopLMFqj
go5z+VYjK6V2Vm8cUgVIhtIV/Vbh62IhxRDwk63VhaJZ//jqs5t6O++KRWqi3vvt
kwhvxeI3Kb5iGKZVyZE=
-----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 4764 Nov 16 09:53 /etc/pki/CA/newcert.pem
-rw-r--r-- 1 root root 1834 Nov 16 09:52 /etc/pki/CA/newkey.pem
-rw-r--r-- 1 root root 1090 Nov 16 09:52 /etc/pki/CA/newreq.pem

:!: WICHTIG - Die so entstandene Datei /etc/pki/CA/newcert.pem enthält das neue CRT (Certificate)!

Entfernen des Passwortes vom private key

Ein Problem ist durch die Erstellung der einzelnen Komponenten, wie in den drei vorhergehenden Schritten beschrieben worden noch offen.

:!: WICHTIG - Der private key (privaten Schlüssel) ist mit einer Passphrase gesichert !

Um dieses Problem zu lösen und das Passwort aus dem private key (privaten Schlüssel) zu entfernen, kann folgender Aufruf von openssl genutzt werden:

:!: WICHTIG - Das Passwort, ist das Passwort, welches im Schritt LDAP CentOS 7 - Erstellen Certificate Authority (CA) 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 Nov 16 09:57 /etc/pki/CA/key.pem
-rw-r--r-- 1 root root 1834 Nov 16 09:52 /etc/pki/CA/newkey.pem

:!: WICHTIG - Die so entstandene Datei /etc/pki/CA/key.pem enthält den private key (privaten Schlüssel) OHNE Passphrase!

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.

Wie die benötigten Komponenten erstellt werden können, kann unter nachfolgendem internen Link:

nachgelesen werden.

Installation Zertifikat

Nach dem ein Zertifikat wie hier: LDAP CentOS 7 - 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 16
drwxr-xr-x 2 root root   38 Nov 16 10:00 .
drwxr-xr-x 4 root root   32 Nov 16 09:59 ..
-rw-r----- 1 root ldap 4557 Nov 16 09:46 CAcert.pem
-rw-r----- 1 root ldap 4764 Nov 16 09:53 cert.pem

/etc/pki/openldap/private:
total 4
drwxr-xr-x 2 root root   20 Nov 16 09:59 .
drwxr-xr-x 4 root root   32 Nov 16 09:59 ..
-rw-r----- 1 root ldap 1679 Nov 16 09:57 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üssen 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.
 
# Tachtler
# default: #BASE        dc=example,dc=com
# default: #URI ldap://ldap.example.com ldap://ldap-master.example.com:666
BASE    dc=tachtler,dc=net
URI     ldap://ldap.idmz.tachtler.net
 
#SIZELIMIT      12
#TIMELIMIT      15
#DEREF          never
 
TLS_CACERTDIR   /etc/openldap/certs
 
# Tachtler - new -
TLS_REQCERT     allow
 
# Turning this off breaks GSSAPI used with krb5 when rdns = false
SASL_NOCANON    on

:!: WICHTIG - Der Eintrag

# Tachtler - new -
TLS_REQCERT     allow

ignoriert das Scheitern der Überprüfung des Server-Zertifikats !!!

LDAPS Konfiguration: /etc/sysconfig/slapd

Folgende Anpassungen der Konfigurationsdatei /etc/sysconfig/slapd müssen zusätzlich erfolgen, um grundsätzlich einen LDAPS-Server zu betreiben:

# OpenLDAP server configuration
# see 'man slapd' for additional information
 
# Where the server will run (-h option)
# - ldapi:/// is required for on-the-fly configuration using client tools
#   (use SASL with EXTERNAL mechanism for authentication)
# - default: ldapi:/// ldap:///
# - example: ldapi:/// ldap://127.0.0.1/ ldap://10.0.0.1:1389/ ldaps:///
# Tachtler
# default: SLAPD_URLS="ldapi:/// ldap:///"
SLAPD_URLS="ldapi:/// ldap:/// ldaps:///"
 
# Any custom options
# Tachtler
# default: #SLAPD_OPTIONS=""
SLAPD_OPTIONS="-4"
 
# Keytab location for GSSAPI Kerberos authentication
#KRB5_KTNAME="FILE:/etc/openldap/ldap.keytab"

:!: WICHTIG - Die Ergänzung des Eintrages

ALT:

SLAPD_URLS="ldapi:/// ldap:///"

NEU:

# Tachtler
# default: SLAPD_URLS="ldapi:/// ldap:///"
SLAPD_URLS="ldapi:/// ldap:/// ldaps:///"

der das Starten und Lauschen des OpenLDAP-Servers bzw. slapd-Daemons/Dienstes via ldaps: bzw. auf Port 636 realisiert!

LDAPS Konfiguration: LDIF: TLS

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 - Es sollten KEINE Änderungen durch manuelle Ergänzungen durchgeführt werden !!!

Nachfolgende Parameter sollen dabei gesetzt werden :

  • olcTLSCipherSuite: - Angabe der Verschlüsselungsstärke bzw. der Verschlüsselungsmechanismen
  • olcTLSCertificateFile: - Die Zertifikatsdatei
  • olcTLSCertificateKeyFile: - Der zum Zertifikat gehörende private Schlüssel
  • olcTLSCACertificateFile: - Das ROOT-Zertifikat aus der eigenen Certificate Authority (CA)

Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.

LDIF-Datei Verwendungszweck
/etc/openldap/ldif/cn=config_TLS.ldif Einführung TLS/STARTTLS-Nutzung via ldaps:
# touch /etc/openldap/ldif/cn=config_TLS.ldif

Die LDIF-Datei /etc/openldap/ldif/cn=config_TLS.ldif soll nachfolgenden Inhalt bekommen:

dn: cn=config
changetype: modify
add: olcTLSCipherSuite
olcTLSCipherSuite: HIGH
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/pki/openldap/certs/cert.pem
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/pki/openldap/private/key.pem
-
add: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/pki/openldap/certs/CAcert.pem

Abschließend wird mit nachfolgendem Befehl der Inhalt der LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration des OpenLDAP-Servers hinzugefügt:

# ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/cn\=config_TLS.ldif
Enter LDAP Password:
modifying entry "cn=config"

Um überprüfen zu können, ob alle Änderungen erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden und sollte eine Ausgabe wie nachfolgende zur Anzeige bringen:

# 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
olcArgsFile: /var/run/openldap/slapd.args
olcPidFile: /var/run/openldap/slapd.pid
olcTLSCACertificatePath: /etc/openldap/certs
olcIdleTimeout: 15
olcReferral: ldap://ldap.idmz.tachtler.net
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

:!: HINWEIS - Der Parameter

  • olcTLSCACertificatePath: /etc/openldap/certs

kann, muss aber nicht verändert werden, und soll hier auch nicht verändert werden!

:!: 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

  • (/etc/openldap/ldap.conf
  • /etc/sysconfig/slapd)

trotzdem notwendig!!!

Der Neustart des OpenLDAP-Server bzw. den slapd-Daemon/Dienstes, wird mit nachfolgendem Befehl durchgeführt:

# systemctl restart slapd.service

LDAPS-Konfiguration: SSLv3

Aufgrund einer Lücke in der TLS/STARTTLS SSLv3 auch besser unter „Poodle“ bekannt, sollte die Auswahl der zur Verwendung angebotenen Verschlüsselungsmechanismen wie folgt eingeschränkt werden.

Siehe auch nachfolgenden externen Link: Resolution for POODLE SSLv3.0 vulnerability (CVE-2014-3566) for components that do not allow SSLv3 to be disabled via configuration settings

Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.

LDIF-Datei Verwendungszweck
/etc/openldap/ldif/cn=config_TLS_olcTLSProtocolMin.ldif Festlegung der zu verwendeten Verschlüsselungsmechanismen
# touch /etc/openldap/ldif/cn=config_TLS_olcTLSProtocolMin.ldif

Die LDIF-Datei /etc/openldap/ldif/cn=config_TLS_olcTLSProtocolMin.ldif soll nachfolgenden Inhalt bekommen:

dn: cn=config
changetype: modify
add: olcTLSProtocolMin
olcTLSProtocolMin: 3.1

Abschließend wird mit nachfolgendem Befehl der Inhalt der LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration des OpenLDAP-Servers hinzugefügt:

# ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/cn\=config_TLS_olcTLSProtocolMin.ldif
Enter LDAP Password: 
modifying entry "cn=config"

Um überprüfen zu können, ob alle Änderungen erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden und sollte eine Ausgabe wie nachfolgende zur Anzeige bringen:

# 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
olcArgsFile: /var/run/openldap/slapd.args
olcIdleTimeout: 15
olcPidFile: /var/run/openldap/slapd.pid
olcReferral: ldap://ldap.idmz.tachtler.net
olcTLSCACertificateFile: /etc/pki/openldap/certs/CAcert.pem
olcTLSCACertificatePath: /etc/openldap/certs
olcTLSCertificateFile: /etc/pki/openldap/certs/cert.pem
olcTLSCertificateKeyFile: /etc/pki/openldap/private/key.pem
olcTLSCipherSuite: HIGH
olcTLSProtocolMin: 3.1

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

LDAPS-Konfiguration: /etc/pki/tls/certs/ca-bundle.crt

Um das Zertifikat

  • /etc/pki/openldap/certs/CAcert.crt

auch im System zu hinterlegen, sind nachfolgende Tätigkeiten erforderlich.

Im Verzeichnis

  • /etc/pki/ca-trust/source/anchors

können Zertifikate im Format PEM hinterlegt werden und anschließend dem BUNDLE-File

  • /etc/pki/tls/certs/ca-bundle.crt, welches auf /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

verweist hinzugefügt werden.

Dazu ist es erforderlich den Teil des Zertifikates /etc/pki/openldap/certs/CAcert.crt, welcher wie folgt aussieht:

-----BEGIN CERTIFICATE-----
MIIEKjCCAxKgAwIBAgIJAJ6Gyge1xpw3MA1GCSqGSIb3DQEBCwUAMIGEMQswCQYD
VQQGEwJERTEZMBcGB1UECAwQQmF5ZXJuIChCYXZhcmlhKTEXMBUGA1UECgwOS2xh
dXMgVGFjaHRsZXIxGTAXBgNVBAMMEHd3dy50YGNodGxlci5uZXQxJjAkBgkqhkiG
9w0BCQEWF2hvc3RtYXN0ZXJAdGF1aHRsZXIubmV0MB4XDTE0MTExNjA4NTMwN1oX
DTI0MTIzMTA4NTMwN1owgaYxAzAJBgNVBAYTAkRFMRkwFwYDVQQIDBBCYXllcm4g
KEJhdmFyaWEpMRowGAYDVBQHDBFNdWVuY2hlbiAoTXVuaWNoKTEXMBUGA1UECgwO
S2xhdXMgVGFjaHRsZXIxJzAdBgNVBAMMFmxkYXAuaWRtei50YWNodGxlci5uZXQx
JjAkBgkqhkiG9w0BCQEWF2hvc3RtYXN1ZXJAdGFjaHRsZYIubmV0MIIBIjnNBgkq
hkiG9w0BAQEFBAOCAQ8AMIIBCgKCAQEAxXpi/lXa/lzoL7AjYOo7FFUAysC6afrj
To2mToF/tYr3U6Qy2mvRXyJmvIXGL3anhoIKa0yVcW/hlmP2M7rd/+4SDdJ4cnIc
1HI0fnVzG3F5CqbrIifpsVhfzr3INUr+z0yrXYNQ6DcCDXPjZzQICloeE74umPK
FVCNE7pdeeCT8PfDg8DsngcdTVrxWW21wl/vTnJj2Jy+b1wAWUh4bUTFQnKh4We3
XspPCVUE1mQB6+njk8tegM5keMT6/o1CNcCDqqLI2dn8kYHzQOONPICShQ8ZQeng
s6nCeHK4Rw0QVM550Be4Q1nEkxWvgEuOviziWj4Yu0epy9Vowuom0wIDAQABo3sw
eTAJBgNVHRMEAjAAMCwGCWAGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBD
ZXJ0aWZpY2F0ZTAdBgNVHU4EFgQUV7OgU9km5Pw9Ac+C2Q8/TPOJqDcwHwYDVR0j
BBgwFoAUBDzZ1H6IQ1Zbpm1wDCnLcdPmm1owDQYJKoZIhvcNAQELBQADggEBAIaz
ZefQ9+QgY3vKWMHGM0aMqbYswdXip19ogMxH1zzpe+T3oXxErIonFxIBRhqapzjx
F9UW3qVV9ZP2h0Ul7u7sMp/qrrcnOE37tEOmJ5+yAFe8z9FT/T3WSUJIuBhyUweC
pN7HMPn12p/0IkAJ0KbpYEJFZ1k1F9xen9BBir33OSdyAuk9xQSO/qkR1NgWsaj1
HNZshEeeKZDSykEo3sbcvPnzi1O1b8645G2teH8gh3hjK4V4yoldnHuzqopLMFqj
go5z+VYjK6V2Vm8cUgVIhtIV/Vbh62IhxRDwk63VhaJZ//jqs5t6O++KRWqi3vvt
kwhvxeI3Kb5iGKZVyZE=
-----END CERTIFICATE-----

zu extrahieren und anschließend in eine neue Datei im Verzeichnis

  • /etc/pki/ca-trust/source/anchors

zu hinterlegen.

Nachfolgender Befehl extrahiert den benötigten Teil aus der Zertifikatsdatei /etc/pki/openldap/certs/CAcert.crt:

# tail -n 23 /etc/pki/openldap/certs/CAcert.pem > /etc/pki/ca-trust/source/anchors/CAcert.pem

Der Inhalt der so neu entstandenen Datei - /etc/pki/ca-trust/source/anchors/CAcert.pem, kann mit nachfolgendem Befehl überprüft werden:

# cat /etc/pki/ca-trust/source/anchors/CAcert.pem
-----BEGIN CERTIFICATE-----
MIIEKjCCAxKgAwIBAgIJAJ6Gyge1xpw3MA1GCSqGSIb3DQEBCwUAMIGEMQswCQYD
VQQGEwJERTEZMBcGB1UECAwQQmF5ZXJuIChCYXZhcmlhKTEXMBUGA1UECgwOS2xh
dXMgVGFjaHRsZXIxGTAXBgNVBAMMEHd3dy50YGNodGxlci5uZXQxJjAkBgkqhkiG
9w0BCQEWF2hvc3RtYXN0ZXJAdGF1aHRsZXIubmV0MB4XDTE0MTExNjA4NTMwN1oX
DTI0MTIzMTA4NTMwN1owgaYxAzAJBgNVBAYTAkRFMRkwFwYDVQQIDBBCYXllcm4g
KEJhdmFyaWEpMRowGAYDVBQHDBFNdWVuY2hlbiAoTXVuaWNoKTEXMBUGA1UECgwO
S2xhdXMgVGFjaHRsZXIxJzAdBgNVBAMMFmxkYXAuaWRtei50YWNodGxlci5uZXQx
JjAkBgkqhkiG9w0BCQEWF2hvc3RtYXN1ZXJAdGFjaHRsZYIubmV0MIIBIjnNBgkq
hkiG9w0BAQEFBAOCAQ8AMIIBCgKCAQEAxXpi/lXa/lzoL7AjYOo7FFUAysC6afrj
To2mToF/tYr3U6Qy2mvRXyJmvIXGL3anhoIKa0yVcW/hlmP2M7rd/+4SDdJ4cnIc
1HI0fnVzG3F5CqbrIifpsVhfzr3INUr+z0yrXYNQ6DcCDXPjZzQICloeE74umPK
FVCNE7pdeeCT8PfDg8DsngcdTVrxWW21wl/vTnJj2Jy+b1wAWUh4bUTFQnKh4We3
XspPCVUE1mQB6+njk8tegM5keMT6/o1CNcCDqqLI2dn8kYHzQOONPICShQ8ZQeng
s6nCeHK4Rw0QVM550Be4Q1nEkxWvgEuOviziWj4Yu0epy9Vowuom0wIDAQABo3sw
eTAJBgNVHRMEAjAAMCwGCWAGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBD
ZXJ0aWZpY2F0ZTAdBgNVHU4EFgQUV7OgU9km5Pw9Ac+C2Q8/TPOJqDcwHwYDVR0j
BBgwFoAUBDzZ1H6IQ1Zbpm1wDCnLcdPmm1owDQYJKoZIhvcNAQELBQADggEBAIaz
ZefQ9+QgY3vKWMHGM0aMqbYswdXip19ogMxH1zzpe+T3oXxErIonFxIBRhqapzjx
F9UW3qVV9ZP2h0Ul7u7sMp/qrrcnOE37tEOmJ5+yAFe8z9FT/T3WSUJIuBhyUweC
pN7HMPn12p/0IkAJ0KbpYEJFZ1k1F9xen9BBir33OSdyAuk9xQSO/qkR1NgWsaj1
HNZshEeeKZDSykEo3sbcvPnzi1O1b8645G2teH8gh3hjK4V4yoldnHuzqopLMFqj
go5z+VYjK6V2Vm8cUgVIhtIV/Vbh62IhxRDwk63VhaJZ//jqs5t6O++KRWqi3vvt
kwhvxeI3Kb5iGKZVyZE=
-----END CERTIFICATE-----

Abschließend muss dann mit nachfolgendem Befehl das Zertifikat aus der Datei

  • /etc/pki/ca-trust/source/anchors/CAcert.pem

der Datei

  • /etc/pki/tls/certs/ca-bundle.crt, welche auf /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

verlinkt hinzugefügt werden:

# update-ca-trust

Eine Überprüfung, ob das Zertifikat aus der Datei

  • /etc/pki/ca-trust/source/anchors/CAcert.pem

der Datei

  • /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

tatsächlich hinzugefügt wurde, kann mit nachfolgendem Befehl durchgeführt werden:

# head -n 23 /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem
-----BEGIN CERTIFICATE-----
MIIEKjCCAxKgAwIBAgIJAJ6Gyge1xpw3MA1GCSqGSIb3DQEBCwUAMIGEMQswCQYD
VQQGEwJERTEZMBcGB1UECAwQQmF5ZXJuIChCYXZhcmlhKTEXMBUGA1UECgwOS2xh
dXMgVGFjaHRsZXIxGTAXBgNVBAMMEHd3dy50YGNodGxlci5uZXQxJjAkBgkqhkiG
9w0BCQEWF2hvc3RtYXN0ZXJAdGF1aHRsZXIubmV0MB4XDTE0MTExNjA4NTMwN1oX
DTI0MTIzMTA4NTMwN1owgaYxAzAJBgNVBAYTAkRFMRkwFwYDVQQIDBBCYXllcm4g
KEJhdmFyaWEpMRowGAYDVBQHDBFNdWVuY2hlbiAoTXVuaWNoKTEXMBUGA1UECgwO
S2xhdXMgVGFjaHRsZXIxJzAdBgNVBAMMFmxkYXAuaWRtei50YWNodGxlci5uZXQx
JjAkBgkqhkiG9w0BCQEWF2hvc3RtYXN1ZXJAdGFjaHRsZYIubmV0MIIBIjnNBgkq
hkiG9w0BAQEFBAOCAQ8AMIIBCgKCAQEAxXpi/lXa/lzoL7AjYOo7FFUAysC6afrj
To2mToF/tYr3U6Qy2mvRXyJmvIXGL3anhoIKa0yVcW/hlmP2M7rd/+4SDdJ4cnIc
1HI0fnVzG3F5CqbrIifpsVhfzr3INUr+z0yrXYNQ6DcCDXPjZzQICloeE74umPK
FVCNE7pdeeCT8PfDg8DsngcdTVrxWW21wl/vTnJj2Jy+b1wAWUh4bUTFQnKh4We3
XspPCVUE1mQB6+njk8tegM5keMT6/o1CNcCDqqLI2dn8kYHzQOONPICShQ8ZQeng
s6nCeHK4Rw0QVM550Be4Q1nEkxWvgEuOviziWj4Yu0epy9Vowuom0wIDAQABo3sw
eTAJBgNVHRMEAjAAMCwGCWAGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBD
ZXJ0aWZpY2F0ZTAdBgNVHU4EFgQUV7OgU9km5Pw9Ac+C2Q8/TPOJqDcwHwYDVR0j
BBgwFoAUBDzZ1H6IQ1Zbpm1wDCnLcdPmm1owDQYJKoZIhvcNAQELBQADggEBAIaz
ZefQ9+QgY3vKWMHGM0aMqbYswdXip19ogMxH1zzpe+T3oXxErIonFxIBRhqapzjx
F9UW3qVV9ZP2h0Ul7u7sMp/qrrcnOE37tEOmJ5+yAFe8z9FT/T3WSUJIuBhyUweC
pN7HMPn12p/0IkAJ0KbpYEJFZ1k1F9xen9BBir33OSdyAuk9xQSO/qkR1NgWsaj1
HNZshEeeKZDSykEo3sbcvPnzi1O1b8645G2teH8gh3hjK4V4yoldnHuzqopLMFqj
go5z+VYjK6V2Vm8cUgVIhtIV/Vbh62IhxRDwk63VhaJZ//jqs5t6O++KRWqi3vvt
kwhvxeI3Kb5iGKZVyZE=
-----END CERTIFICATE-----

Überprüfung LDAPS

Um zu überprüfen, ob der OpenLDAP-Server bzw. den slapd-Daemon/Dienst via LDAPS auch via LDAPS erreichbar ist, können nachfolgende Befehle verwendet werden:

# netstat -tulpen | grep slapd
tcp        0      0 0.0.0.0:636             0.0.0.0:*         LISTEN      0          103937     19861/slapd
tcp        0      0 0.0.0.0:389             0.0.0.0:*         LISTEN      0          103936     19861/slapd
# systemctl status slapd.service
slapd.service - OpenLDAP Server Daemon
   Loaded: loaded (/usr/lib/systemd/system/slapd.service; enabled)
   Active: active (running) since Sun 2014-11-16 10:49:03 CET; 24s ago
  Process: 19859 ExecStart=/usr/sbin/slapd -u ldap -h ${SLAPD_URLS} $SLAPD_OPTIONS (code=exited, 
status=0/SUCCESS)
  Process: 19829 ExecStartPre=/usr/libexec/openldap/check-config.sh (code=exited, status=0/SUCCESS)
 Main PID: 19861 (slapd)
   CGroup: /system.slice/slapd.service
           --19861 /usr/sbin/slapd -u ldap -h ldapi:/// ldap:/// ldaps:/// -4...

Nov 16 10:49:03 vml70030.idmz.tachtler.net runuser[19845]: pam_unix(runuser:s...
Nov 16 10:49:03 vml70030.idmz.tachtler.net runuser[19847]: pam_unix(runuser:s...
Nov 16 10:49:03 vml70030.idmz.tachtler.net runuser[19849]: pam_unix(runuser:s...
Nov 16 10:49:03 vml70030.idmz.tachtler.net runuser[19851]: pam_unix(runuser:s...
Nov 16 10:49:03 vml70030.idmz.tachtler.net runuser[19851]: pam_unix(runuser:s...
Nov 16 10:49:03 vml70030.idmz.tachtler.net runuser[19854]: pam_unix(runuser:s...
Nov 16 10:49:03 vml70030.idmz.tachtler.net runuser[19856]: pam_unix(runuser:s...
Nov 16 10:49:03 vml70030.idmz.tachtler.net runuser[19856]: pam_unix(runuser:s...
Nov 16 10:49:03 vml70030.idmz.tachtler.net slapd[19859]: @(#) $OpenLDAP: slap...
                                                                 mockbuild@wo...
Nov 16 10:49:03 vml70030.idmz.tachtler.net slapd[19861]: slapd starting
Nov 16 10:49:03 vml70030.idmz.tachtler.net systemd[1]: Started OpenLDAP Serve...
Hint: Some lines were ellipsized, use -l to show in full.

Das verwendete Self-Signed-Certificate, kann mit nachfolgendem Befehl überprüft werden:

# openssl s_client -connect ldap.idmz.tachtler.net:636 -showcerts -state
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 = Bayern (Bavaria), O = Klaus Tachtler, CN = www.tachtler.net, emailAddress = hostmaster@tachtler.net
verify return:1
depth=0 C = DE, ST = Bayern (Bavaria), L = Muenchen (Munich), O = Klaus Tachtler, CN = ldap.idmz.tachtler.net, emailAddress = hostmaster@tachtler.net
verify return:1
SSL_connect:SSLv3 read server certificate A
SSL_connect:SSLv3 read server key exchange 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 finished A
---
Certificate chain
 0 s:/C=DE/ST=Bayern (Bavaria)/L=Muenchen (Munich)/O=Klaus Tachtler/CN=ldap.idmz.tachtler.net/emailAddress=hostmaster@tachtler.net
   i:/C=DE/ST=Bayern (Bavaria)/O=Klaus Tachtler/CN=www.tachtler.net/emailAddress=hostmaster@tachtler.net
-----BEGIN CERTIFICATE-----
MIIEKjCCAxKgAwIBAgIJAJ6Gyge1xpw3MA0GCSqGSIb3DQEBCwUAMIGEMQswCQYD
VQQGEwJERTEZMBcGA1UECAwQQmF5ZXJuIChCYXZhcmlhKTEXMBUGA1UECgwOS2xh
dXMgVGFjaHRsZXIxGTAXBgNVBAMMEHd3dy50YWNodGxlci5uZXQxJjAkBgkqhkiG
9w0BCQEWF2hvc3RtYXN0ZXJAdGFjaHRsZXIubmV0MB4XDTE0MTExNjA4NTMwN1oX
DTI0MTIzMTA4NTMwN1owgaYxCzAJBgNVBAYTAkRFMRkwFwYDVQQIDBBCYXllcm4g
KEJhdmFyaWEpMRowGAYDVQQHDBFNdWVuY2hlbiAoTXVuaWNoKTEXMBUGA1UECgwO
S2xhdXMgVGFjaHRsZXIxHzAdBgNVBAMMFmxkYXAuaWRtei50YWNodGxlci5uZXQx
JjAkBgkqhkiG9w0BCQEWF2hvc3RtYXN0ZXJAdGFjaHRsZXIubmV0MIIBIjANBgkq
hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxXpi/lXa/lzoL7AjYOo7FFUAysC6afrj
To2mToF/tYr3U6Ny2mvRXyJmvIXGL3anhoIKa0yVcW/hlmP2M7rd/+4SDdJ4cnIc
1HI0fnVzG3F5CqbrIi2fpsVhfzr3INUr+z0yrXYNQ6DcCDXPjZzQICloeE74umPK
FVCNE7pdeeCT8PfDg8DOngcdTVrxWW21wl/vTnJj2Jy+b1wAWUh4bUTFQnKh4We3
XspPCVUE1mQB6+njk8tegM6keMT6/o1CNcCDqqLI2dn8kYHzQOONPICShQ8ZQeng
s6nCeHK4Rw0QVM550Be4W1nEkxWvgEuOviziWj4Yu0epy9Vowuom0wIDAQABo3sw
eTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBD
ZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUV7OgU9km5Pw9Ac+C2Q8/TPOJqDcwHwYDVR0j
BBgwFoAUBDzZ1H6IQ1Zbpm4wDCnLcdPmm1owDQYJKoZIhvcNAQELBQADggEBAIaz
ZefQ9+QgY3vKWMHGM0aMqqYswdXip19ogMxH1zzpe+T3oXxErIonFxIBRhqapzjx
F9UW3qVV9ZP2h0Ul7u8sMp/qrrcnOE37tEOmJ5+yAFe8z9FT/T3WSUJIuBhyUweC
pN7HMPn12p/0IkAJ0KbpXEJFZ1k1F9xen9BBir33OSdyAuk9xQSO/qkR1NgWsaj1
HNZshEeeKZDSykEo3sbcvPmzi1O1b8645G2teH8gh3hjK4V4yoldnHuzqopLMFqj
go5z+VYjK6V2Vm8cUgVIhtIF/Vbh62IhxRDwk63VhaJZ//jqs5t6O++KRWqi3vvt
kwhvxeI3Kb5iGJZVyZE=
-----END CERTIFICATE-----
 1 s:/C=DE/ST=Bayern (Bavaria)/O=Klaus Tachtler/CN=www.tachtler.net/emailAddress=hostmaster@tachtler.net
   i:/C=DE/ST=Bayern (Bavaria)/O=Klaus Tachtler/CN=www.tachtler.net/emailAddress=hostmaster@tachtler.net
-----BEGIN CERTIFICATE-----
MIID3zCCAsegAwIBAgIJAJ6Gyge1xpw2MA0GCSqGSIb3DQEBCwUAMIGEMQswCQYD
VQQGEwJERTEZMBcGA1UECAwQQmF5ZXJuIChCYXZhcmlhKTEXMBUGA1UECgwOS2xh
dXMgVGFjaHRsZXIxGTAXBgNVBAMMEHd3dy50YWNodGxlci5uZXQxJjAkBgkqhkiG
9w0BCQEWF2hvc3RtYXN0ZXJAdGFjaHRsZXIubmV0MCAXDTE0MTExNjA4NDYyMFoY
DzIwOTkxMjMxMDg0NjIwWjCBhDELMAkGA1UEBhMCREUxGTAXBgNVBAgMEEJheWVy
biAoQmF2YXJpYSkxFzAVBgNVBAoMDktsYXVzIFRhY2h0bGVyMRkwFwYDVQQDDBB3
d3cudGFjaHRsZXIubmV0MSYwJAYJKoZIhvcNAQkBFhdob3N0bWFzdGVyQHRhY2h0
bGVyLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALItBNY8mcL6
nsDqMo0nCLn5vCL1OcWqADhKEmZ/LgYk8O0E9nhZZdyrCTCGoijz/yQq0oCLcI9O
xmLgn6+F9WmVEUit4Y4iZg+moIZgetgSckIvza/UVOkONEQPmpVX1I8u/R6nAqd9
GL1yC/donMz/vh9O29blhORIJz9fG52otTilq1eFLNFo78z0NlEwr+lffDbuEdhO
yFIuTBZaaAFEPcNFYz9VuTsbvrmk+ubUGMBQ55jygXs52SPbjWKMhqum7uogdQLH
GaZcGTxAi03ac3w6wC5Hs7OLrIS98/DmIqvFlOp+C520UwRmXGomub0GG1a497Uj
Lj6EejOfD9cCAwEAAaNQME4wHQYDVR0OBBYEFAQ82dR+iENWW6ZuMAwpy3HT5pta
MB8GA1UdIwQYMBaAFAQ82dR+iENWW6ZuMAwpy3HT5ptaMAwGA1UdEwQFMAMBAf8w
DQYJKoZIhvcNAQELBQADggEBAGDHSOfEMUAiC5ZbKVtlGOyyShyqE9Fn8qMp7WiB
1/PJG03Rb/lObpI8zHRCVZ7kZspoRGjEjEQ5FlB9ULOpehLqMXSzFAghwt7FuVdj
8Ih+chkLPA5hwl13MRWD9kPAfpKDxeaojvviqHO9EDy+hr85FqbcnCTQ9nvfOQg5
JIf1pMaesXvl3T0pukSvcxFbZlqSli5/TPFku4ipttaEF1y4A07TeVGqgboggQmj
7gLI5h0e+LtMHfZ5e725VgCkaC3wlVs3EJtPHQN3Sp8DJ3RqK4ielWnR2AAt8w17
SO5eG6w3FoTe9vI1RHewFT53QW6SeEc/1E8idCVt//S/0aY=
-----END CERTIFICATE-----
---
Server certificate
subject=/C=DE/ST=Bayern (Bavaria)/L=Muenchen (Munich)/O=Klaus Tachtler/CN=ldap.idmz.tachtler.net/emailAddress=hostmaster@tachtler.net
issuer=/C=DE/ST=Bayern (Bavaria)/O=Klaus Tachtler/CN=www.tachtler.net/emailAddress=hostmaster@tachtler.net
---
No client certificate CA names sent
Server Temp Key: ECDH, prime256v1, 256 bits
---
SSL handshake has read 2564 bytes and written 383 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1
    Cipher    : ECDHE-RSA-AES128-SHA
    Session-ID: 4D95179A5B9E84C3E760ACC8AA9132388DE9A7464F41CCD0CAA278845BBA8AB6
    Session-ID-ctx:
    Master-Key: 03B8AA48594EBF71B25D7B42DBF27BDF676A8089BD7A24584EB2469DDA59E1CB8163B392A0749E3AD75C4581D2BC3B48
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    Start Time: 1416134317
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)
---
^C

:!: HINWEIS - Die Ausgabe kann mit der Tastenkombination [CRTL/STRG-c] beendet werden !!!

Schema hinzufügen

Nachfolgend sollen zusätzliche Schematas zum OpenLDAP-Server hinzugefügt werden.

In diesem Fall sollen es die Schematas:

  • /etc/openldap/schema/cosine.ldif
  • /etc/openldap/schema/inetorgperson.ldif
  • /etc/openldap/schema/nis.ldif

sein.

:!: HINWEIS - OHNE das Schema cosine kann das Schema inetorgperson NICHT importiert werden, es müssen BEIDE in der richtigen Reihenfolge importiert werden !

:!: HINWEIS - OHNE das Schema nis können später keine Benutzer posix importiert werden!

Die Schemata werden bereits mit der Installation mitgeliefert, jedoch standardmäßig nicht im OpenLDAP-Server implementiert.

Nachfolgender Befehl fügt dem OpenLDAP-Server das Schema - /etc/openldap/schema/cosine.ldif:

# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/cosine.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=cosine,cn=schema,cn=config"

Nachfolgender Befehl fügt dem OpenLDAP-Server das Schema - /etc/openldap/schema/inetorgperson.ldif:

# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/inetorgperson.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=inetorgperson,cn=schema,cn=config"

Nachfolgender Befehl fügt dem OpenLDAP-Server das Schema - /etc/openldap/schema/nis.ldif:

# ldapadd -Y EXTERNAL -H ldapi:/// -D "cn=config" -f /etc/openldap/schema/nis.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
adding new entry "cn=nis,cn=schema,cn=config"

Um überprüfen zu können, ob der Import der Schemata - erfolgreich war, kann nachfolgender Befehl genutzt werden, welcher die installierten Schemata zur Anzeige bringt:

# ldapsearch -W -x -D cn=config -b cn=config | grep cn=schema,cn=config
Enter LDAP Password: 
dn: cn=schema,cn=config
dn: cn={0}core,cn=schema,cn=config
dn: cn={1}cosine,cn=schema,cn=config
dn: cn={2}inetorgperson,cn=schema,cn=config
dn: cn={3}nis,cn=schema,cn=config

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.

Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.

LDIF-Datei Verwendungszweck
/etc/openldap/ldif/cn=config_DIT.ldif Anlegen eines DIT Directory Information Tree
# touch /etc/openldap/ldif/cn=config_DIT.ldif

Die LDIF-Datei /etc/openldap/ldif/cn=config_DIT.ldif soll nachfolgenden Inhalt bekommen:

# tachtler.net
dn: dc=tachtler,dc=net
dc: Tachtler
ou: tachtler Dot net
objectClass: top
objectClass: dcObject
objectClass: organizationalUnit
 
# People, tachtler.net
dn: ou=People,dc=tachtler,dc=net
ou: People
objectClass: top
objectClass: organizationalUnit
 
# Group, tachtler.net
dn: ou=Group,dc=tachtler,dc=net
ou: Group
objectClass: top
objectClass: organizationalUnit

:!: HINWEIS - Es dürfen KEINE Leerzeichen zwischen den einzelnen Anweisungen in den Leerzeilen vorhanden sein!

Abschließend wird mit nachfolgendem Befehl der Inhalt der LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration des OpenLDAP-Servers hinzugefügt:

:!: HINWEIS - Ab hier ist das Passwort von dc=Manager,dc=tachtler,dc=net einzugeben!

# ldapadd -W -x -D cn=Manager,dc=tachtler,dc=net -f /etc/openldap/ldif/cn\=config_DIT.ldif
Enter LDAP Password: 
adding new entry "dc=tachtler,dc=net"

adding new entry "ou=People,dc=tachtler,dc=net"

adding new entry "ou=Group,dc=tachtler,dc=net"

Um überprüfen zu können, ob alle Änderungen erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden und sollte eine Ausgabe wie nachfolgende zur Anzeige bringen:

# ldapsearch -W -x -D cn=config -b "dc=tachtler,dc=net" "(objectclass=*)"
Enter LDAP Password: 
# extended LDIF
#
# LDAPv3
# base <dc=tachtler,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# tachtler.net
dn: dc=tachtler,dc=net
dc: Tachtler
ou: tachtler Dot net
objectClass: top
objectClass: dcObject
objectClass: organizationalUnit

# People, tachtler.net
dn: ou=People,dc=tachtler,dc=net
ou: People
objectClass: top
objectClass: organizationalUnit

# Group, tachtler.net
dn: ou=Group,dc=tachtler,dc=net
ou: Group
objectClass: top
objectClass: organizationalUnit

# search result
search: 2
result: 0 Success

# numResponses: 4
# numEntries: 3

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 1000 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

Benutzer herauszufiltern und in den OpenLDAP-Server bzw. slapd-Daemon/Dienst zu migrieren, können bereits dafür existierende Werkzeuge in Form des RPM-Pakets:

  • migrationtools - ist im base-Repository von CentOS enthalten

installiert werden.

Mit nachfolgendem Befehl, wird das Pakete migrationstools installiert:

# yum install migrationtools
base                                                     | 3.6 kB     00:00         
extras                                                   | 3.4 kB     00:00     
updates                                                  | 3.4 kB     00:00     
Resolving Dependencies
--> Running transaction check
---> Package migrationtools.noarch 0:47-15.el7 will be installed
--> Finished Dependency Resolution

Changes in packages about to be updated:


Dependencies Resolved

================================================================================
 Package                 Arch            Version            Repository     Size
================================================================================
Installing:
 migrationtools          noarch          47-15.el7          base           26 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 26 k
Installed size: 106 k
Is this ok [y/d/N]: y
Downloading packages:
migrationtools-47-15.el7.noarch.rpm                        |  26 kB   00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : migrationtools-47-15.el7.noarch                              1/1 
  Verifying  : migrationtools-47-15.el7.noarch                              1/1 

Installed:
  migrationtools.noarch 0:47-15.el7                                             

Complete!

Mit nachfolgendem Befehl kann überprüft werden, welche Inhalte mit den Paket migrationtools installiert wurden.

# rpm -qil migrationtools
Name        : migrationtools
Version     : 47
Release     : 15.el7
Architecture: noarch
Install Date: Mon 17 Nov 2014 02:54:04 PM CET
Group       : System Environment/Daemons
Size        : 108216
License     : BSD
Signature   : RSA/SHA256, Fri 04 Jul 2014 05:47:45 AM CEST, Key ID 24c6a8a7f4a80eb5
Source RPM  : migrationtools-47-15.el7.src.rpm
Build Date  : Tue 10 Jun 2014 05:32:33 AM CEST
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
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/migrationtools/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 1000 und einer Gruppenkennung, ebenfalls größer/gleich 1000 in jeweils zwei separate Dateien mit den Namen:

  • /etc/openldap/ldif/passwd und
  • /etc/openldap/ldif/group

Die Befehle lauten wie folgt:

# grep ":1[0-9][0-9][0-9]\|:0:0" /etc/passwd > /etc/openldap/ldif/passwd

und

# grep ":1[0-9][0-9][0-9]\|:0:" /etc/group > /etc/openldap/ldif/group

Der Inhalt der Dateien sollte in etwa wie folgt aussehen:

# cat /etc/openldap/ldif/passwd 
root:x:0:0:root:/root:/bin/bash
klaus:x:1000:1000:Klaus Tachtler:/home/klaus:/bin/bash
petra:x:1001:1001:Petra Tachtler:/home/petra:/bin/bash
lena:x:1002:1002:Lena Tachtler:/home/lena:/bin/bash
luis:x:1003:1003:Luis Tachtler:/home/luis:/bin/bash

und

# cat /etc/openldap/ldif/group 
root:x:0:
klaus:x:1000:klaus
petra:x:1001:petra
lena:x:1002:lena
luis:x:1003:luis

Benutzermigration

Zur Durchführung der Migration kommen folgende Scripte (Perl) zum Einsatz, welche sich im Verzeichnis

  • /usr/share/migrationtools/

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=root,ou=People,dc=tachtler,dc=net
uid: root
cn: root
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$7DasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 0
gidNumber: 0
homeDirectory: /root
gecos: root
 
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$7DasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
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$7DasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/petra
gecos: Petra Tachtler
 
dn: uid=lena,ou=People,dc=tachtler,dc=net
uid: lena
cn: Lena Tachtler
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$7DasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1002
gidNumber: 1002
homeDirectory: /home/lena
gecos: Lena Tachtler
 
dn: uid=luis,ou=People,dc=tachtler,dc=net
uid: luis
cn: Luis Tachtler
objectClass: account
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$7DasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1003
gidNumber: 1003
homeDirectory: /home/luis
gecos: Luis Tachtler

und

# cat /etc/openldap/ldif/group.ldif
dn: cn=root,ou=Group,dc=tachtler,dc=net
objectClass: posixGroup
objectClass: top
cn: root
userPassword: {crypt}x
gidNumber: 0
 
dn: cn=klaus,ou=Group,dc=tachtler,dc=net
objectClass: posixGroup
objectClass: top
cn: klaus
userPassword: {crypt}x
gidNumber: 1000
 
dn: cn=petra,ou=Group,dc=tachtler,dc=net
objectClass: posixGroup
objectClass: top
cn: petra
userPassword: {crypt}x
gidNumber: 1001
 
dn: cn=lena,ou=Group,dc=tachtler,dc=net
objectClass: posixGroup
objectClass: top
cn: lena
userPassword: {crypt}x
gidNumber: 1002
 
dn: cn=luis,ou=Group,dc=tachtler,dc=net
objectClass: posixGroup
objectClass: top
cn: luis
userPassword: {crypt}x
gidNumber: 1003

Nachfolgende Anpassungen können erfolgen, falls weitere Attribute, wie z.B. mail gewünscht werden, dann muss die objectClass von

  • account

auf

  • inetOrgPerson

abgeändert werden und ein weiteres Attribut

  • sn

ergänzt werden.

Zusätzlich kann dann entsprechend das Attribut mail ebenfalls noch ergänzt werden!

Nachfolgend zeigt die Änderungen der objectClass - account auf inetOrgPerson und die Ergänzung des Attributs sn und mail:

# cat /etc/openldap/ldif/passwd.ldif
dn: uid=root,ou=People,dc=tachtler,dc=net
uid: root
cn: root
sn: root
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$7DasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 0
gidNumber: 0
homeDirectory: /root
gecos: root
mail: root@tachtler.net
 
dn: uid=klaus,ou=People,dc=tachtler,dc=net
uid: klaus
cn: Klaus Tachtler
sn: Tachtler
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$7DasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/klaus
gecos: Klaus Tachtler
mail: klaus@tachtler.net
 
dn: uid=petra,ou=People,dc=tachtler,dc=net
uid: petra
cn: Petra Tachtler
sn: Tachtler
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$7DasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/petra
gecos: Petra Tachtler
mail: petra@tachtler.net
 
dn: uid=lena,ou=People,dc=tachtler,dc=net
uid: lena
cn: Lena Tachtler
sn: Tachtler
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$7DasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1002
gidNumber: 1002
homeDirectory: /home/lena
gecos: Lena Tachtler
mail: lena@tachtler.net
 
dn: uid=luis,ou=People,dc=tachtler,dc=net
uid: luis
cn: Luis Tachtler
sn: Tachtler
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword: {crypt}$6$7DasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1003
gidNumber: 1003
homeDirectory: /home/luis
gecos: Luis Tachtler
mail: luis@tachtler.net

und

# cat /etc/openldap/ldif/group.ldif
dn: cn=root,ou=Group,dc=tachtler,dc=net
objectClass: posixGroup
objectClass: top
cn: root
userPassword: {crypt}x
gidNumber: 0
 
dn: cn=klaus,ou=Group,dc=tachtler,dc=net
objectClass: posixGroup
objectClass: top
cn: klaus
userPassword: {crypt}x
gidNumber: 1000
 
dn: cn=petra,ou=Group,dc=tachtler,dc=net
objectClass: posixGroup
objectClass: top
cn: petra
userPassword: {crypt}x
gidNumber: 1001
 
dn: cn=lena,ou=Group,dc=tachtler,dc=net
objectClass: posixGroup
objectClass: top
cn: lena
userPassword: {crypt}x
gidNumber: 1002
 
dn: cn=luis,ou=Group,dc=tachtler,dc=net
objectClass: posixGroup
objectClass: top
cn: luis
userPassword: {crypt}x
gidNumber: 1003
LDIF-Datei Verwendungszweck
/etc/openldap/ldif/group.ldif Anlegen von Gruppen im DIT Directory Information Tree
/etc/openldap/ldif/passwd.ldif Anlegen von Benutzern im DIT Directory Information Tree

Abschließend wird mit nachfolgenden Befehlen der Inhalt der LDIF-Dateien im laufendem Betrieb des OpenLDAP-Servers der Konfiguration des OpenLDAP-Servers hinzugefügt:

:!: HINWEIS - Ab hier ist das Passwort von dc=Manager,dc=tachtler,dc=net einzugeben!

# ldapadd -W -x -D cn=Manager,dc=tachtler,dc=net -f /etc/openldap/ldif/group.ldif
Enter LDAP Password: 
adding new entry "cn=root,ou=Group,dc=tachtler,dc=net"

adding new entry "cn=klaus,ou=Group,dc=tachtler,dc=net"

adding new entry "cn=petra,ou=Group,dc=tachtler,dc=net"

adding new entry "cn=lena,ou=Group,dc=tachtler,dc=net"

adding new entry "cn=luis,ou=Group,dc=tachtler,dc=net"

und

# ldapadd -W -x -D cn=Manager,dc=tachtler,dc=net -f /etc/openldap/ldif/passwd.ldif
Enter LDAP Password: 
adding new entry "uid=root,ou=People,dc=tachtler,dc=net"

adding new entry "uid=klaus,ou=People,dc=tachtler,dc=net"

adding new entry "uid=petra,ou=People,dc=tachtler,dc=net"

adding new entry "uid=lena,ou=People,dc=tachtler,dc=net"

adding new entry "uid=luis,ou=People,dc=tachtler,dc=net"

Zur Überprüfung ob die Migration korrekt funktioniert hat, können nachfolgende Befehle verwendet werden, welche die nachfolgenden Ausgaben erzeugen sollte:

# ldapsearch -x -b "ou=Group,dc=tachtler,dc=net" "(objectclass=*)"
# extended LDIF
#
# LDAPv3
# base <ou=Group,dc=tachtler,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# Group, tachtler.net
dn: ou=Group,dc=tachtler,dc=net
ou: Group
objectClass: top
objectClass: organizationalUnit

# root, Group, tachtler.net
dn: cn=root,ou=Group,dc=tachtler,dc=net
objectClass: posixGroup
objectClass: top
cn: root
userPassword:: e2NyeXB0fXg=
gidNumber: 0

# klaus, Group, tachtler.net
dn: cn=klaus,ou=Group,dc=tachtler,dc=net
objectClass: posixGroup
objectClass: top
cn: klaus
userPassword:: e2NyeXB0fXg=
gidNumber: 1000

# petra, Group, tachtler.net
dn: cn=petra,ou=Group,dc=tachtler,dc=net
objectClass: posixGroup
objectClass: top
cn: petra
userPassword:: e2NyeXB0fXg=
gidNumber: 1001

# lena, Group, tachtler.net
dn: cn=lena,ou=Group,dc=tachtler,dc=net
objectClass: posixGroup
objectClass: top
cn: lena
userPassword:: e2NyeXB0fXg=
gidNumber: 1002

# luis, Group, tachtler.net
dn: cn=luis,ou=Group,dc=tachtler,dc=net
objectClass: posixGroup
objectClass: top
cn: luis
userPassword:: e2NyeXB0fXg=
gidNumber: 1003

# search result
search: 2
result: 0 Success

# numResponses: 7
# numEntries: 6

und

# ldapsearch -x -b "ou=People,dc=tachtler,dc=net" "(objectclass=*)"
# extended LDIF
#
# LDAPv3
# base <ou=People,dc=tachtler,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# People, tachtler.net
dn: ou=People,dc=tachtler,dc=net
ou: People
objectClass: top
objectClass: organizationalUnit

# root, People, tachtler.net
dn: uid=root,ou=People,dc=tachtler,dc=net
uid: root
cn: root
sn: root
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSDasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 0
gidNumber: 0
homeDirectory: /root
gecos: root
mail: root@tachtler.net

# klaus, People, tachtler.net
dn: uid=klaus,ou=People,dc=tachtler,dc=net
uid: klaus
cn: Klaus Tachtler
sn: Tachtler
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSDasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/klaus
gecos: Klaus Tachtler
mail: klaus@tachtler.net

# petra, People, tachtler.net
dn: uid=petra,ou=People,dc=tachtler,dc=net
uid: petra
sn: Tachtler
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSDasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/petra
gecos: Petra Tachtler
mail: petra@tachtler.net

# lena, People, tachtler.net
dn: uid=lena,ou=People,dc=tachtler,dc=net
uid: lena
sn: Tachtler
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSDasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1002
gidNumber: 1002
homeDirectory: /home/lena
gecos: Lena Tachtler
mail: lena@tachtler.net

# luis, People, tachtler.net
dn: uid=luis,ou=People,dc=tachtler,dc=net
uid: luis
sn: Tachtler
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: top
objectClass: shadowAccount
userPassword:: e2NyeXB0fSDasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1003
gidNumber: 1003
homeDirectory: /home/luis
gecos: Luis Tachtler
mail: luis@tachtler.net

# search result
search: 2
result: 0 Success

# numResponses: 7
# numEntries: 6

"Anonymous bind" deaktivieren

Um den OpenLDAP-Server bzw. den slapd-Daemon/Dienst sollen KEINE anonymen Anfragen, sprich ein „anonymous bind“ mehr möglich sein, sind nachfolgende Ergänzungen in der Konfigurationsdatei

  • /etc/openldap/slapd.d/cn=config.ldif

notwendig.

:!: WICHTIG - Es sollten KEINE Änderungen durch manuelle Ergänzungen durchgeführt werden !!!

Nachfolgende Parameter sollen dabei gesetzt werden :

  • olcDisallows: bind_anon - „anonymous bind“ verbieten
  • olcRequires: authc - Authentifizierung erzwingen

Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.

LDIF-Datei Verwendungszweck
/etc/openldap/ldif/cn=config_anonymous_bind.ldif Anonymous bind verbieten
# touch /etc/openldap/ldif/cn=config_anonymous_bind.ldif

Die LDIF-Datei /etc/openldap/ldif/cn=config_anonymous_bind.ldif soll nachfolgenden Inhalt bekommen:

dn: cn=config
changetype: modify
add: olcDisallows
olcDisallows: bind_anon
-
add: olcRequires
olcRequires: authc

Abschließend wird mit nachfolgendem Befehl der Inhalt der LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration des OpenLDAP-Servers hinzugefügt:

# ldapmodify -W -x -D cn=config -f /etc/openldap/ldif/cn\=config_anonymous_bind.ldif
Enter LDAP Password: 
modifying entry "cn=config"

Um überprüfen zu können, ob alle Änderungen erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden und sollte eine Ausgabe wie nachfolgende zur Anzeige bringen:

# 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
olcArgsFile: /var/run/openldap/slapd.args
olcIdleTimeout: 15
olcPidFile: /var/run/openldap/slapd.pid
olcReferral: ldap://ldap.idmz.tachtler.net
olcTLSCACertificateFile: /etc/pki/openldap/certs/CAcert.pem
olcTLSCACertificatePath: /etc/openldap/certs
olcTLSCertificateFile: /etc/pki/openldap/certs/cert.pem
olcTLSCertificateKeyFile: /etc/pki/openldap/private/key.pem
olcTLSCipherSuite: HIGH
olcTLSProtocolMin: 3.1
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 Fehlermeldung erzeugen sollte:

# ldapsearch -x -LLL -H ldap://ldap.idmz.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 -W -D cn=config -LLL -H ldap://ldap.idmz.tachtler.net -b "dc=tachtler,dc=net" "uid=klaus"
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:: e2NyeXB0fSDasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1000
gidNumber: 1000
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 z.B. einem technischen Benutzer einer Web-Anwendung gestellt werden, soll ein Benutzer der als „Ersatzauthentifizierer“ für anonyme Anfragen fungiert erstellt werden, 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 Passwort 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

Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.

LDIF-Datei Verwendungszweck
/etc/openldap/ldif/cn=config_binduser.ldif Erstellen eines Benutzers, als Ersatzauthentifizierer
# touch /etc/openldap/ldif/cn=config_binduser.ldif

Die LDIF-Datei /etc/openldap/ldif/cn=config_binduser.ldif soll nachfolgenden Inhalt bekommen:

dn: cn=Ersatzbenutzer,dc=tachtler,dc=net
cn: Ersatzbenutzer
objectClass: top
objectClass: organizationalRole
objectClass: simpleSecurityObject
userPassword: {SSHA}evF+NLXO5/M0d+4buPid0CYcCRzBllGk

:!: HINWEIS - Hier kommt das zuvor erstellte Passwort zum Einsatz!

Abschließend wird mit nachfolgendem Befehl der Inhalt der LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration des OpenLDAP-Servers hinzugefügt:

# ldapadd -W -x -D cn=Manager,dc=tachtler,dc=net -f /etc/openldap/ldif/cn\=config_binduser.ldif
Enter LDAP Password: 
adding new entry "cn=Ersatzbenutzer,dc=tachtler,dc=net"

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 -W -D cn=config -LLL -H ldap://ldap.idmz.tachtler.net -b "dc=tachtler,dc=net" "cn=Ersatzbenutzer"
Enter LDAP Password: 
dn: cn=Ersatzbenutzer,dc=tachtler,dc=net
cn: Ersatzbenutzer
objectClass: top
objectClass: organizationalRole
objectClass: simpleSecurityObject
userPassword:: DasisteinGeheimnis

Indizes

Um die einzelnen im DIT Directory Information Tree enthaltenen Index Felder anpassen zu können, sollen zuerst die existierende Indizierung von Feldern mit nachfolgendem Befehl aufgelistet werden, um diese Informationen als Grundlage für Anpassungen verwenden zu können:

# ldapsearch -W -x -D cn=config -b olcDatabase={2}hdb,cn=config
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <olcDatabase={2}hdb,cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# {2}hdb, config
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
olcSuffix: dc=tachtler,dc=net
olcRootDN: cn=Manager,dc=tachtler,dc=net
olcRootPW: {SSHA}moVXokSVz9/pcZpdyJ0EYlzutrnt4iK1

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Für nachfolgende Felder besteht bereits ein Index, wie durch die Anzeige in oben gezeigter Abfrage zu sehen ist:

(Nur relevanter Ausschnitt):

...
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
...

Um auch für die nachfolgenden Felder einen Index zur Verfügung haben zu können, sind Anpassungen erforderlich. Nachfolgende Felder, sollen zusätzlich einen Indexeintrag nach folgendem Muster erhalten:

Felder Attribute Beschreibung
uidNumber,gidNumber,loginShell eq,pres eq=gleich, pres=Anzeige
uid,memberUid eq,pres,sub eq=gleich, pres=Anzeige, sub=Teilzeichenkette
nisMapName,nisMapEntry eq,pres,sub eq=gleich, pres=Anzeige, sub=Teilzeichenkette
uniqueMember eq,pres eq=gleich, pres=Anzeige

Falls ein Zugriff z.B. auf das Feld uid erfolgt und kein Index für dieses Feld definiert wurde, ist nachfolgender Hinweis in der LOG-Datei

  • /var/log/slapd.log

zu finden:

Nov 28 11:08:13 server30 slapd[1362]: <= bdb_equality_candidates: (uid) not indexed

LDIF: Indizes

Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.

LDIF-Datei Verwendungszweck
/etc/openldap/ldif/cn=config_DbIndex.ldif Erstellen von zusätzlichen Feld-Indizes
# touch /etc/openldap/ldif/cn=config_DbIndex.ldif

Die LDIF-Datei /etc/openldap/ldif/cn=config_DbIndex.ldif soll nachfolgenden Inhalt bekommen:

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcDbIndex
olcDbIndex: uidNumber,gidNumber,loginShell eq,pres
olcDbIndex: uid,memberUid eq,pres,sub
olcDbIndex: nisMapName,nisMapEntry eq,pres,sub
olcDbIndex: uniqueMember eq,pres

Indizies: Einsatz

Abschließend wird mit nachfolgendem Befehl der Inhalt der LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration des OpenLDAP-Servers hinzugefügt:

# ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/ldif/cn\=config_DbIndex.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"

Zur Überprüfung, ob die Veränderungen im DIT Directory Information Tree enthaltenen Indizies der Felder auch richtig gesetzt wurden, kann nachfolgender Befehl genutzt werden, welcher eine entsprechende Anzeige zum Vorschein bringen sollte:

# ldapsearch -W -x -D cn=config -b olcDatabase={2}hdb,cn=config
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <olcDatabase={2}hdb,cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# {2}hdb, config
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcSuffix: dc=tachtler,dc=net
olcRootDN: cn=Manager,dc=tachtler,dc=net
olcRootPW: {SSHA}kcSCl+lZ9mAJdDv925XRLQyOJfBNesR3
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
olcDbIndex: uidNumber,gidNumber,loginShell eq,pres
olcDbIndex: uid,memberUid eq,pres,sub
olcDbIndex: nisMapName,nisMapEntry eq,pres,sub
olcDbIndex: uniqueMember eq,pres

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Zugriffsrechte

Um die einzelnen im DIT Directory Information Tree enthaltenen Zugriffsrechte anpassen zu können, sollen zuerst die existierenden Zugriffsrechte mit nachfolgendem Befehl aufgelistet werden, um diese Informationen als Grundlage für Anpassungen verwenden zu können:

:!: HINWEIS - Es sollten aktuell noch KEINE Zugriffsrechte vorhanden sein !

# ldapsearch -W -x -D cn=config -b olcDatabase={2}hdb,cn=config
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <olcDatabase={2}hdb,cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# {2}hdb, config
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
olcDbIndex: uidNumber,gidNumber,loginShell eq,pres
olcDbIndex: uid,memberUid eq,pres,sub
olcDbIndex: nisMapName,nisMapEntry eq,pres,sub
olcDbIndex: uniqueMember eq,pres
olcSuffix: dc=tachtler,dc=net
olcRootDN: cn=Manager,dc=tachtler,dc=net
olcRootPW: {SSHA}moVXokSVz9/pcZpdyJ0EYlzutrnt4iK1

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

LDIF: Zugriffsrechte

Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.

LDIF-Datei Verwendungszweck
/etc/openldap/ldif/cn=config_acl.ldif Setzen von Zugriffsrechten/Beschränkungen
# touch /etc/openldap/ldif/cn=config_acl.ldif

Die LDIF-Datei /etc/openldap/ldif/cn=config_acl.ldif soll nachfolgenden Inhalt bekommen:

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcAccess
olcAccess: {0}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: {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 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: {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

Zugriffsrechte: Definitionen

Nachfolgend die Erklärung für die einzelnen olcAccess-Zeilen.

Zugriffsrecht: attrs=userPassword,shadowLastChange,shadowMax,shadowWarning

olcAccess: {0}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

Auf die Felder

  • userPassword
  • shadowLastChange
  • shadowMax
  • shadowWarning

können die nachfolgenden Benutzer mit nachfolgenden Rechten zugreifen:

Zugriffsformulierung Benutzer Zugriffsrecht
by self write self (selbst) schreiben
by dn=„cn=Manager,dc=tachtler,dc=net“ write Manager schreiben
by dn=„cn=Ersatzbenutzer,dc=tachtler,dc=net“ read Ersatzbenutzer lesen
by anonymous auth anonymous Authentifizieren
by * none <ALLE ANDEREN> <KEINE RECHTE>

Zugriffsrecht: cn=Manager,dc=tachtler,dc=net

olcAccess: {1}to dn="cn=Manager,dc=tachtler,dc=net" by self write by * none

Auf den Eintrag

  • cn=Manager,dc=tachtler,dc=net

können die nachfolgenden Benutzer mit nachfolgenden Rechten zugreifen:

Zugriffsformulierung Benutzer Zugriffsrecht
by self write self (selbst) schreiben
by * none <ALLE ANDEREN> <KEINE RECHTE>

Zugriffsrecht: cn=Ersatzbenutzer,dc=tachtler,dc=net

olcAccess: {2}to dn="cn=Ersatzbenutzer,dc=tachtler,dc=net" by self write by dn="cn=Manager,dc=tachtler,dc=net" write by * none

Auf den Eintrag

  • cn=Ersatzbenutzer,dc=tachtler,dc=net

können die nachfolgenden Benutzer mit nachfolgenden Rechten zugreifen:

Zugriffsformulierung Benutzer Zugriffsrecht
by self write self (selbst) schreiben
by dn=„cn=Manager,dc=tachtler,dc=net“ write Manager schreiben
by * none <ALLE ANDEREN> <KEINE RECHTE>

Zugriffsrecht: cn=([^,]+),ou=Group,dc=tachtler,dc=net

olcAccess: {3}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

Auf den Eintrag

  • cn=([^,]+),ou=Group,dc=tachtler,dc=net

können die nachfolgenden Benutzer mit nachfolgenden Rechten zugreifen:

Zugriffsformulierung Benutzer Zugriffsrecht
by self write self (selbst) schreiben
by dn=„cn=Manager,dc=tachtler,dc=net“ write Manager schreiben
by dn=„cn=Ersatzbenutzer,dc=tachtler,dc=net“ read Ersatzbenutzer lesen
by dn.exact,expand=„uid=$1,ou=People,dc=tachtler,dc=net“ read (Gruppen)benutzer lesen
by * none <ALLE ANDEREN> <KEINE RECHTE>

Der Eintrag steht für die einzelne Gruppe im Teil des DIT Directory Information Tree ou=Group,dc=tachtler,dc=net für alle dort enthaltenen Einträge.

Zugriffsrecht: {uid=([^,]+),ou=People,dc=tachtler,dc=net

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

Auf den Eintrag

  • uid=([^,]+),ou=People,dc=tachtler,dc=net

können die nachfolgenden Benutzer mit nachfolgenden Rechten zugreifen:

Zugriffsformulierung Benutzer Zugriffsrecht
by self write self (selbst) schreiben
by dn=„cn=Manager,dc=tachtler,dc=net“ write Manager schreiben
by dn=„cn=Ersatzbenutzer,dc=tachtler,dc=net“ read Ersatzbenutzer lesen
by dn.exact,expand=„uid=$1,ou=People,dc=tachtler,dc=net“ read Benutzer lesen
by * none <ALLE ANDEREN> <KEINE RECHTE>

Der Eintrag steht für den einzelnen Benutzer im Teil des DIT Directory Information Tree ou=People,dc=tachtler,dc=net für alle dort enthaltenen Einträge.

Zugriffsrecht: *

olcAccess: {5}to * by self write by dn.base="cn=Manager,dc=tachtler,dc=net" write by * read

Auf den Eintrag

  • *

können die nachfolgenden Benutzer mit nachfolgenden Rechten zugreifen:

Zugriffsformulierung Benutzer Zugriffsrecht
by self write self (selbst) schreiben
by dn=„cn=Manager,dc=tachtler,dc=net“ write Manager schreiben
by * none <ALLE ANDEREN> lesen

Der Eintrag steht für alle Einträge, ohne besondere Beschränkungen.

Zugriffsrechte: Einsatz

Abschließend wird mit nachfolgendem Befehl der Inhalt der LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration des OpenLDAP-Servers hinzugefügt:

# ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/ldif/cn\=config_acl.ldif 
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "olcDatabase={2}hdb,cn=config"

Zur Überprüfung, ob die Veränderungen im DIT Directory Information Tree enthaltenen Zugriffsrechte auch richtig gesetzt wurden, kann nachfolgender Befehl genutzt werden, welcher eine entsprechende Anzeige zum Vorschein bringen sollte:

# ldapsearch -W -x -D cn=config -b olcDatabase={2}hdb,cn=config
Enter LDAP Password:
# extended LDIF
#
# LDAPv3
# base <olcDatabase={2}hdb,cn=config> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#

# {2}hdb, config
dn: olcDatabase={2}hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {2}hdb
olcDbDirectory: /var/lib/ldap
olcDbIndex: objectClass eq,pres
olcDbIndex: ou,cn,mail,surname,givenname eq,pres,sub
olcDbIndex: uidNumber,gidNumber,loginShell eq,pres
olcDbIndex: uid,memberUid eq,pres,sub
olcDbIndex: nisMapName,nisMapEntry eq,pres,sub
olcDbIndex: uniqueMember eq,pres
olcSuffix: dc=tachtler,dc=net
olcRootDN: cn=Manager,dc=tachtler,dc=net
olcRootPW: {SSHA}moVXokSVz9/pcZpdyJ0EYlzutrnt4iK1
olcAccess: {0}to attrs=userPassword,shadowLastChange,shadowMax,shadowWarning b
 y self write by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenu
 tzer,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 wri
 te by dn="cn=Manager,dc=tachtler,dc=net" write by dn="cn=Ersatzbenutzer,dc=ta
 chtler,dc=net" read by dn.exact,expand="uid=$1,ou=People,dc=tachtler,dc=net" 
 read by * none
olcAccess: {4}to dn.regex="uid=([^,]+),ou=People,dc=tachtler,dc=net" by self w
 rite 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" wr
 ite by * read

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Zugriffsrechte: Überprüfung

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.idmz.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.idmz.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:: e2NyeXB0fSDasisteinGeheimnis
shadowLastChange: 16383
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
loginShell: /bin/bash
uidNumber: 1001
gidNumber: 1001
homeDirectory: /home/petra
gecos: Petra Tachtler

Log-Schreibung

Um beim OpenLDAP die LOG-Schreibung zu aktivieren oder zu deaktivieren sind nachfolgende Schritte notwendig.

LDIF: olcLogLevel

:!: HINWEIS - Damit der Parameter überhaupt verändert werden kann muss dieser zuerst einmal angelegt werden.

Der Parameter olcLogLevel setzt nach dem angegebenen Wert die Gesprächigkeit der LOG-Schreibung.

Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.

LDIF-Datei Verwendungszweck
/etc/openldap/ldif/cn=config_GLOBAL_olcLogLevel.ldif Setzen des LOG-Level auf state (Standard)
# touch /etc/openldap/ldif/cn=config_GLOBAL_olcLogLevel.ldif

Die LDIF-Datei /etc/openldap/ldif/cn=config_GLOBAL_olcLogLevel.ldif soll nachfolgenden Inhalt bekommen:

dn: cn=config
changetype: modify
add: olcLogLevel
olcLogLevel: stats

Abschließend wird mit nachfolgendem Befehl der Inhalt der LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration des OpenLDAP-Servers hinzugefügt:

# ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/ldif/cn\=config_GLOBAL_olcLogLevel.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

Um überprüfen zu können, ob alle Änderungen erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden und sollte eine Ausgabe wie nachfolgende zur Anzeige bringen:

# extended LDIF
#
# LDAPv3
# base <cn=config> with scope subtree
# filter: (objectclass=olcGlobal)
# requesting: ALL
#

# config
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/openldap/slapd.args
olcDisallows: bind_anon
olcIdleTimeout: 15
olcPidFile: /var/run/openldap/slapd.pid
olcReferral: ldap://ldap.idmz.tachtler.net
olcRequires: authc
olcTLSCACertificateFile: /etc/pki/openldap/certs/CAcert.pem
olcTLSCACertificatePath: /etc/openldap/certs
olcTLSCertificateFile: /etc/pki/openldap/certs/cert.pem
olcTLSCertificateKeyFile: /etc/pki/openldap/private/key.pem
olcTLSCipherSuite: HIGH
olcTLSProtocolMin: 3.1
olcLogLevel: state

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Log-Schreibung ausschalten

Um beim OpenLDAP die LOG-Schreibung zu deaktivieren sind nachfolgende Schritte notwendig.

Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.

LDIF-Datei Verwendungszweck
/etc/openldap/ldif/cn=config_GLOBAL_olcLogLevel_off.ldif Setzen des LOG-Level auf none
# touch /etc/openldap/ldif/cn=config_GLOBAL_olcLogLevel_off.ldif

Die LDIF-Datei /etc/openldap/ldif/cn=config_GLOBAL_olcLogLevel_off.ldif soll nachfolgenden Inhalt bekommen:

dn: cn=config
changetype: modify
delete: olcLogLevel
olcLogLevel: stats
-
add: olcLogLevel
olcLogLevel: none

Abschließend wird mit nachfolgendem Befehl der Inhalt der LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration des OpenLDAP-Servers hinzugefügt:

# ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/ldif/cn\=config_GLOBAL_olcLogLevel_off.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

Um überprüfen zu können, ob alle Änderungen erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden und sollte eine Ausgabe wie nachfolgende zur Anzeige bringen:

# extended LDIF
#
# LDAPv3
# base <cn=config> with scope subtree
# filter: (objectclass=olcGlobal)
# requesting: ALL
#

# config
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/openldap/slapd.args
olcDisallows: bind_anon
olcIdleTimeout: 15
olcPidFile: /var/run/openldap/slapd.pid
olcReferral: ldap://ldap.idmz.tachtler.net
olcRequires: authc
olcTLSCACertificateFile: /etc/pki/openldap/certs/CAcert.pem
olcTLSCACertificatePath: /etc/openldap/certs
olcTLSCertificateFile: /etc/pki/openldap/certs/cert.pem
olcTLSCertificateKeyFile: /etc/pki/openldap/private/key.pem
olcTLSCipherSuite: HIGH
olcTLSProtocolMin: 3.1
olcLogLevel: none

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

Log-Schreibung einschalten

Um beim OpenLDAP die LOG-Schreibung zu aktivieren sind nachfolgende Schritte notwendig.

Mit nachfolgendem Befehl soll nun eine LDIF-Datei in nachfolgendem Verzeichnis, mit nachfolgendem Namen und nachfolgendem Inhalt erstellt werden.

LDIF-Datei Verwendungszweck
/etc/openldap/ldif/cn=config_GLOBAL_olcLogLevel_dafault.ldif Setzen des LOG-Level auf state
# touch /etc/openldap/ldif/cn=config_GLOBAL_olcLogLevel_default.ldif

Die LDIF-Datei /etc/openldap/ldif/cn=config_GLOBAL_olcLogLevel_default.ldif soll nachfolgenden Inhalt bekommen:

dn: cn=config
changetype: modify
delete: olcLogLevel
olcLogLevel: none
-
add: olcLogLevel
olcLogLevel: stats

Abschließend wird mit nachfolgendem Befehl der Inhalt der LDIF-Datei im laufendem Betrieb des OpenLDAP-Servers der Konfiguration des OpenLDAP-Servers hinzugefügt:

# ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/openldap/ldif/cn\=config_GLOBAL_olcLogLevel_default.ldif
SASL/EXTERNAL authentication started
SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth
SASL SSF: 0
modifying entry "cn=config"

Um überprüfen zu können, ob alle Änderungen erfolgreich durchgeführt wurden, kann nachfolgender Befehl genutzt werden und sollte eine Ausgabe wie nachfolgende zur Anzeige bringen:

# extended LDIF
#
# LDAPv3
# base <cn=config> with scope subtree
# filter: (objectclass=olcGlobal)
# requesting: ALL
#

# config
dn: cn=config
objectClass: olcGlobal
cn: config
olcArgsFile: /var/run/openldap/slapd.args
olcDisallows: bind_anon
olcIdleTimeout: 15
olcPidFile: /var/run/openldap/slapd.pid
olcReferral: ldap://ldap.idmz.tachtler.net
olcRequires: authc
olcTLSCACertificateFile: /etc/pki/openldap/certs/CAcert.pem
olcTLSCACertificatePath: /etc/openldap/certs
olcTLSCertificateFile: /etc/pki/openldap/certs/cert.pem
olcTLSCertificateKeyFile: /etc/pki/openldap/private/key.pem
olcTLSCipherSuite: HIGH
olcTLSProtocolMin: 3.1
olcLogLevel: state

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/ldap_centos_7.txt · Zuletzt geändert: 2022/03/23 20:55 von klaus