Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
LDAP (Lighweight Directory Access Protokoll)
Verwendete Ports:
Port 389 ungesichert Port 636 TLS-Verbindungen
Konfiguration eines openldap-servers unter Centos 7
Notwendige Pakete installieren:
yum install openldap-servers
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:
/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 # <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).
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}<verschlüsseltes Passwort> -> 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: <generiertes Passwort>
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 <Passwort> -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:
LDAP Benutzerkonto Hans hinzufügen:
cd /etc/openldap/ldif
vi 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
user_aos.ldif hinzufügen:
ldapadd -x -W -D "cn=ldapadm,dc=fritz,dc=box" -f user_hans.ldif
Passwort für Benutzer hans setzen:
ldappasswd -s <PASSWORT> -W -D "cn=ldapadm,dc=fritz,dc=box" -x "uid=hans,ou=People,dc=fritz,dc=box"
Ein LDAP Benutzerkonto meier hinzufügen:
cd /etc/openldap/ldif
Datei angelegen: vi user_meier.ldif
Inhalt der 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 der Domain fritz.box hinzufügen:
ldapadd -x -W -D "cn=ldapadm,dc=fritz,dc=box" -f user_meier.ldif
Ein Passwort für Benutzer meier setzen:
ldappasswd -s <PASSWORT> -W -D "cn=ldapadm,dc=fritz,dc=box" -x "uid=meier,ou=Group,dc=fritz,dc=box"
LDAP Eintrag überprüfen:
ldapsearch -x cn=hans -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
cd /etc/openldap/ldif vi loglevel.ldif
Inhalt der loglevel.ldif Datei:
dn: cn=config changetype: modify add: olcLogLevel olcLogLevel: <LOGLEVEL> # 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
loglefel.ldif Datei 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: ldap-client Paket installieren:
apt install ldapscripts
LDAP-Server Einträge anpassen
ldap.conf anpassen:
cd /etc/ldap cp ldap.conf ldap.conf.<YYYYMMDD> vi ldap.conf → 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 <Passwort>
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
user_meier.ldif erstellen:
cd /etc/ldap && mkdir ldif && cd ldif vi user_meier.ldif
Inhalt der neu angelegten Datei 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 <Passwort> "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 Log nach /var/log/slapd schreiben:
cd /etc cp rsyslogd.conf rsyslogd.conf.<YYYYMMDD> 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 <Dateiname> -> Gesamtkopie der Datenbank als .ldif-file
Standard-Zugriff bei LDAP:
access to <was> by <wer> <Zugriffsart> -> 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: meikel_h@gmx.net
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 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.
/etc/pam.d/
Centos 7 - PAM konfigurieren
Quelle: https://tylersguides.com/guides/configuring-openldap-authentication-centos-7/
Notwendige Module nachinstallieren:
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 einschalten:
pam-auth-update --enable ldap --enable ldapauth sufficient → [success=done new_authtok_reqd=done default=ignore]
Damit für einem neuen User auch das Homedir angelegt wird, folgende Zeile in /etc/pam.d/login einfügen:
session required pam_mkhomedir.so skel=/etc/skel umask=0222
Bei Desktop Umgebungen auch in der /etc/pam.d/gdm:
session required pam_mkhomedir.so skel=/etc/skel umask=0222
Für Windows-PC siehe http://pgina.org/
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]