====== LDAP (Lighweight Directory Access Protokoll) ======
Quelle: https://www.codeflow.site/de/article/how-to-install-and-configure-openldap-and-phpldapadmin-on-ubuntu-16-04
Verwendete LDAP-Ports:
Port 389 ungesichert
Port 636 TLS-Verbindungen
====== Konfiguration eines openldap-servers unter Centos 7 ======
=== Centos7 notwendige Pakete installieren ===
yum install openldap-servers -y
=== Debian 10.x notwendige Pakete ===
apt-get install -y slapd slapd-contrib
== Originalinhalt der /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
== Konfigurationsverzeichnis von Openldap ==
/etc/openldap
=== Grundsicherung von slapd.d durchführen ===
cd /etc/oepnldap
cp -R slapd.d slapd.d.DEFAULT -> Sicherung der Originaldateien
== Firewall für LDAP anpassen ==
firewall-cmd --permanent --zone=lan-1 --add-port=389/tcp
firewall-cmd --permanent --zone=lan-1 --add-port=636/tcp # SSL/TLS
firewall-cmd --reload
=== Auf Centos 7 notwendige Pakete installieren ===
yum install openldap-clients
=== Grundkonfiguration vornehmen ===
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
cat /var/lib/ldap/DB_CONFIG
== Inhalt der /var/lib/ldap/DB_CONFIG ==
# $OpenLDAP$
# Example DB_CONFIG file for use with slapd(8) BDB/HDB databases.
#
# See the Oracle Berkeley DB documentation
#
# for detail description of DB_CONFIG syntax and semantics.
#
# Hints can also be found in the OpenLDAP Software FAQ
#
# in particular:
#
# 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).
== LDAP die notwendigen Rechte auf das Verzeichnis geben ==
chown ldap:ldap /var/lib/ldap/DB_CONFIG
=== LDAP-Server slapd starten ===
systemctl enable slapd
systemctl start slapd
=== LDAP Root-Passwort setzen ===
/usr/sbin/slappasswd -h {SSHA}
# New password:
# Re-enter new password:
# → {SSHA} -> MUSS in db.ldif hinter olcRootPW eingetragen werden
===== LDAP-Server konfigurieren =====
Dateiendung = LDIF → LDAP Data Interchange Format
cd /etc/openldap
mkdir ldif
cd ldif
vi db.ldif
== Inhalt der db.ldif ==
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=fritz,dc=box
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=ldapadm,dc=fritz,dc=box
dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootPW
olcRootPW:
cd /etc/openldap/ldif
== db.ldiff zum LDAP-Server hinzufügen ==
ldapmodify -Y EXTERNAL -H ldapi:/// -f db.ldif
cd /etc/openldap/ldif
vi monitor.ldif
== Inhalt der monitor.ldif ==
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=ldapadm,dc=fritz,dc=box" read by * none
cd /etc/openldap/ldif
== monitor.ldif zum LDAP-Server hinzufügen ==
ldapmodify -Y EXTERNAL -H ldapi:/// -f monitor.ldif
== Schemata cosine, nis und inetorgperson hinzufügen ==
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/cosine.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/nis.ldif
ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/openldap/schema/inetorgperson.ldif
vi base.ldif
== Inhalt der base.ldif ==
dn: dc=fritz,dc=box
dc: fritz
objectClass: top
objectClass: domain
dn: cn=ldapadm,dc=fritz,dc=box
objectClass: organizationalRole
cn: ldapadm
description: LDAP Manager
dn: ou=People,dc=fritz,dc=box
objectClass: organizationalUnit
ou: People
dn: ou=Group,dc=fritz,dc=box
objectClass: organizationalUnit
ou: Group
== base.ldif zum LDAP-Server hinzufügen ==
ldapadd -x -W -D "cn=ldapadm,dc=fritz,dc=box" -f base.ldif -> mit PW-Abfrage auf STDIN
oder direkt mit PW: ldapadd -x -w -D "cn=ldapadm,dc=fritz,dc=box" -f base.ldif
== Der Inhalt des DIT zur Kontroll ausgeben ==
slapcat -n2
== Ausgabe ==
dn: dc=fritz,dc=box
dc: fritz
objectClass: top
objectClass: domain
structuralObjectClass: domain
entryUUID: cbeb2cce-e398-103a-8046-b7a24d4664d2
creatorsName: cn=ldapadm,dc=fritz,dc=box
createTimestamp: 20210105115631Z
entryCSN: 20210105115631.993944Z#000000#000#000000
modifiersName: cn=ldapadm,dc=fritz,dc=box
modifyTimestamp: 20210105115631Z
dn: cn=ldapadm,dc=fritz,dc=box
objectClass: organizationalRole
cn: ldapadm
description: LDAP Manager
structuralObjectClass: organizationalRole
entryUUID: cbebc454-e398-103a-8047-b7a24d4664d2
creatorsName: cn=ldapadm,dc=fritz,dc=box
createTimestamp: 20210105115631Z
entryCSN: 20210105115631.997820Z#000000#000#000000
modifiersName: cn=ldapadm,dc=fritz,dc=box
modifyTimestamp: 20210105115631Z
dn: ou=People,dc=fritz,dc=box
objectClass: organizationalUnit
ou: People
structuralObjectClass: organizationalUnit
entryUUID: cbec285e-e398-103a-8048-b7a24d4664d2
creatorsName: cn=ldapadm,dc=fritz,dc=box
createTimestamp: 20210105115632Z
entryCSN: 20210105115632.000384Z#000000#000#000000
modifiersName: cn=ldapadm,dc=fritz,dc=box
modifyTimestamp: 20210105115632Z
dn: ou=Group,dc=fritz,dc=box
objectClass: organizationalUnit
ou: Group
structuralObjectClass: organizationalUnit
entryUUID: cbecae32-e398-103a-8049-b7a24d4664d2
creatorsName: cn=ldapadm,dc=fritz,dc=box
createTimestamp: 20210105115632Z
entryCSN: 20210105115632.003810Z#000000#000#000000
modifiersName: cn=ldapadm,dc=fritz,dc=box
modifyTimestamp: 20210105115632Z
=== Bei einem Fehler DIT (Directory information tree) zurücksetzen ===
systemctl stop slapd
rm -rf /var/lib/ldap
mkdir /var/lib/ldap
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap:ldap /var/lib/ldap
cd /etc/openldap
rm -rf slapd.d
cp -R slapd.d.DEFAULT slapd.d
chown -R ldap:ldap slapd.d
systemctl start slapd
=== Changing the RootDN Password ===
Doku: [[https://www.digitalocean.com/community/tutorials/how-to-change-account-passwords-on-an-openldap-server#changing-the-rootdn-password]]
== LDAP Benutzerkonto Hans hinzufügen ==
vi /etc/openldap/ldif/user_hans.ldif
== Inhalt der user_hans.ldif ==
dn: uid=hans,ou=People,dc=Fritz,dc=box
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: hans
uid: hans
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/hans
loginShell: /bin/bash
gecos: hans [Admin (at) Fritz]
userPassword: {crypt}x
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
== Datei /etc/openldap/ldif/user_hans.ldif dem LDAP-Server hinzufügen ==
ldapadd -x -W -D "cn=ldapadm,dc=fritz,dc=box" -f /etc/openldap/ldif/user_hans.ldif
== Passwort für LDAP-Benutzer hans setzen ==
ldappasswd -s -W -D "cn=ldapadm,dc=fritz,dc=box" -x "uid=hans,ou=People,dc=fritz,dc=box"
== Ein LDAP Benutzerkonto meier hinzufügen ==
vi /etc/openldap/ldif/user_meier.ldif
== Inhalt der Datei /etc/openldap/ldif/user_meier.ldif ==
dn: uid=meier,ou=Group,dc=fritz,dc=box
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: meier
uid: meier
uidNumber: 9998
gidNumber: 101
homeDirectory: /home/meier
loginShell: /bin/bash
gecos: meier [Admin (at) fritz]
userPassword: {crypt}x
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
== User meier der Domain fritz.box hinzufügen ==
ldapadd -x -W -D "cn=ldapadm,dc=fritz,dc=box" -f /etc/openldap/ldif/user_meier.ldif
== Ein Passwort für LDAP-Benutzer meier setzen ==
ldappasswd -s -W -D "cn=ldapadm,dc=fritz,dc=box" -x "uid=meier,ou=Group,dc=fritz,dc=box"
== LDAP Eintrag überprüfen ==
ldapsearch -x cn=meier -b dc=fritz,dc=box
How To Change Account Passwords on an OpenLDAP Server: [[Doku: https://www.digitalocean.com/community/tutorials/how-to-change-account-passwords-on-an-openldap-server]]
OpenLDAP using OLC (cn=config): [[Doku: https://www.zytrax.com/books/ldap/ch6/slapd-config.html#use-security]]
=== LogLevel für openldap konfigurieren ===
vi /etc/openldap/ldif/loglevel.ldif
== Inhalt der Datei /etc/openldap/ldif/loglevel.ldif ==
dn: cn=config
changetype: modify
add: olcLogLevel
olcLogLevel: # z. B -1 (any enable all debugging ) oder 0 (no debugging
Level Keyword Description
---------------------------------------------------------
-1 any enable all debugging
0 no debugging
1 (0x1 trace) trace function calls
2 (0x2 packets) debug packet handling
4 (0x4 args) heavy trace debugging
8 (0x8 conns) connection management
16 (0x10 BER) print out packets sent and received
32 (0x20 filter) search filter processing
64 (0x40 config) configuration processing
128 (0x80 ACL) access control list processing
256 (0x100 stats) stats log connections/operations/results
512 (0x200 stats2) stats log entries sent
1024 (0x400 shell) print communication with shell backends
2048 (0x800 parse) print entry parsing debugging
16384 (0x4000 sync) syncrepl consumer processing
32768 (0x8000 none) only messages that get logged whatever log level is set
--> Die Loglevel sind mischbar, als z. B. 129= Loglevel 1 + Loglevel 128
== Datei /etc/openldap/ldif/loglevel.ldif der LDAP-Domäne hinzufügen:
cd /etc/openldap/ldif
ldapmodify -Y EXTERNAL -H ldapi:/// -f loglevel.ldif
LDAP-Client Konfiguration:
Doku: https://www.digitalocean.com/community/tutorials/how-to-use-ldif-files-to-make-changes-to-an-openldap-system
=== Debian 10.x: ldap-client Paket installieren ===
apt install ldapscripts
=== LDAP-Server Einträge anpassen ===
== ldap.conf anpassen ==
cp /etc/ldap/ldap.conf /etc/ldap.conf.
vi /etc/ldap/ldap.conf
== Folgende Einträge inder Datei /etc/ldap/ldap.conf anpassen ==
→ BASE dc=fritz,dc=box
→ URI ldap://ldap.fritz.box
== ldapsearch ausführen ==
wenn die Werte in der /etc/ldap.conf nicht gesetzt sind mit:
ldapsearch -H ldap://ldap.fritz.box -b "dc=fritz,dc=box" -D "cn=ldapadm,dc=fritz,dc=box" "uid=hans" -x -w
sonst mit:
ldapsearch -x -LLL uid=hans
== Ausgabe ==
dn: uid=hans,ou=People,dc=fritz,dc=box
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: hans
uid: hans
uidNumber: 9999
gidNumber: 100
homeDirectory: /home/hans
loginShell: /bin/bash
gecos: hans [Admin (at) Fritz]
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
userPassword:: e1NTSEF9Q1hTdmlqYkdJUjRjZEpHRHBYRTZoVHkwYzd0VzlxQ00=
dn: uid=meier,ou=Group,dc=fritz,dc=box
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: hans
uid: hans
uid: meier
uidNumber: 9998
gidNumber: 100
homeDirectory: /home/meier
loginShell: /bin/bash
gecos: meier [Admin (at) Fritz]
shadowLastChange: 17058
shadowMin: 0
shadowMax: 99999
shadowWarning: 7
userPassword:: e1NTSEF9Nkg2M2d2T2gzbHpRNUdCYU16OVlVTHJNdWw2WjVLcU8=
=== Bestehende LDAP-Einträge ändern ===
== Datei /etc/openldap/ldif/user_meier.ldif erstellen ==
mkdir -p /etc/openldap/ldif
vi /etc/openldap/ldif/user_meier.ldif
== Inhalt der neu angelegten Datei /etc/openldap/ldif/user_meier.ldif ==
dn: uid=meier,ou=Group,dc=fritz,dc=box
changetype: modify
replace: gidNumber
gidNumber: 101
== ldapmodify ausführen ==
ldapmodify -x -D "cn=ldapadm,dc=fritz,dc=box" -W -f user_meier.ldif -> Es kommt eine Passwortabfrage (LDAP-Admin)
=== Bestehende LDAP-Einträge löschen ===
== ldapdelete ausführen ==
# mit Passwortabfrage
ldapdelete -x -D "cn=ldapadm,dc=fritz,dc=box" -W "uid=meier,ou=Group,dc=fritz,dc=box"
# ohne Passwortabfrage
ldapdelete -x -D "cn=ldapadm,dc=fritz,dc=box" -w "uid=meier,ou=Group,dc=fritz,dc=box"
LDAP Browser/Editor: Quelle: https://community.microfocus.com/t5/Identity-Manager-Tips/Jarek-Gawor-s-excellent-LDAP-Browser-Editor-v2-8-2/ta-p/1771772
== LDAP Logs nach /var/log/slapd schreiben ==
cd /etc
cp rsyslogd.conf rsyslogd.conf.
vi rsyslogd.conf
== Folgende Zeile an die /etc/rsyslogd.conf anhängen ==
# LOCAL4 Standardwert für syslog facility
local4.* /var/log/slapd.log
syslogd neu starten:
systemctl restart rsyslog
LDAP-Tools, Datenbank slapd darf nicht laufen:
slapcat -l -> Gesamtkopie der Datenbank als .ldif-file
Standard-Zugriffsberechtigungen bei LDAP:
access to by -> Standard: access to * by * read
Genutzte Befehle bei laufenden sdapd:
ldappasswd
ldapadd
ldapdelete
add.ldif Beispieldatei:
dn: uid=meier,ou=Group,dc=fritz,dc=box
changtype: modify
add: mail
mail: meinemail@gmail.com
== ldapsearch ==
Beispielsuche:
ldapsearch -x -LLL -uid=hans
das 1. L beschränkt die Ausgabe der Kommentar
das 2. L verhindert die Ausgabe der LDAP-Version
-> mit der Option -b kann man die Base für die Baumsuche angeben.
===== PAM-Authentifizierung ====
PAM: Module unter /lib/security (/lib64/security)
== Wichtige PAM Module ==
pam_unix nutzt die Dateien /etc/passwd und /etc/shadow,
pam_cracklib -> Sicherheit des neu gewählten Passworts prüfen
pam_limits -> Arbeitsspeicher und CPU-Zeit eines Benutzers limitieren
pam_listfile -> Listen nutzen, um den Zugriff zu verweigern oder zu erlauben
Wenn der Ordner /etc/pam.d/ exisiert wird die Datei /etc/pam.conf ignoriert
=== Centos 7 - PAM konfigurieren ===
Quelle: https://tylersguides.com/guides/configuring-openldap-authentication-centos-7/
Centos 7: Notwendige Module installieren:
yum install nss-pam-ldapd -y
Modul “nss-pam-ldapd” konfigurieren:
cd /etc
cp nslcd.conf nslcd.conf.DEFAULT
vi nslcd.conf -> die Einstellungen für den LDAP-Server
Folgende Einträge ändern/ergänzen inder /etc/nslcd.conf:
uri ldap://ldap.fritz.box
base dc=fritz,dc=box
base passwd ou=People,dc=fritz,dc=box
base shadow ou=People,dc=fritz,dc=box
base group ou=Group,dc=fritz,dc=box
LDAP-Dienst in den Autostart aufnehmen und starten:
systemctl enable nslcd
systemctl start nslcd
PAM für LDAP-Unterstützung konfigurieren (LOGIN)
authconfig --updateall --enableldap --enableldapaut
==== Debian 10: PAM für LDAP konfigurieren ====
Doku: [[https://wiki.debian.org/LDAP/PAM]]
Notwendige Pakete installieren:
apt install libnss-ldapd -y
==== Ldap authentication aktivieren ====
pam-auth-update --enable ldap --enable ldapauth
sufficient → [success=done new_authtok_reqd=done default=ignore]
==== Automatische Anlage des Homedirs für neue LDAP-User ====
Damit für einem neuen LDAP-User auch das Homedir automatngelegt wird, folgende Zeile in /etc/pam.d/login einfügen:
session required pam_mkhomedir.so skel=/etc/skel umask=0222
==== User-Login bei Desktop Umgebungen über LDAP ermöglichen ====
In die Datei /etc/pam.d/gdm folgende Zeile hinzufügen:
session required pam_mkhomedir.so skel=/etc/skel umask=0222
==== Windows-Anmeldung über LDAP-Server ====
Windows-PC LDAP-Anmeldung:
siehe [[http://www.pgina.org|Open-Source-Software]]
==== PAM Authentifizierung über SSSD ====
Konfigurationsdatei:
/etc/sssd.conf
Inhalt der sssd.conf:
[domain/fritz.box]
autofs_provider = ldap
cache_credentials = False
ldap_search_base = dc=fritz,dc=box
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
ldap_uri = ldap://ldap.fritz.box:389
ldap_id_use_start_tls = False
ldap_tls_cacertdir = /etc/openldap/cacerts
ldap_schema = rfc2307bis
ldap_auth_disable_tls_never_use_in_production = true
use_fully_qualified_names = True
[sssd]
config_file_version = 2
reconnection_retries = 3
sbus_timeout = 30
services = nss, pam
domains = fritz.box
[nss]
filter_groups = root
filter_users = root
reconnection_retries = 3
entry_cache_timeout = 300
entry_cache_nowait_percentage = 75
[pam]
reconnection_retries = 3
offline_credentials_expiration = 2
offline_failed_login_attempts = 3
offline_failed_login_delay = 5
[autofs]