Rocky ldap: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 1: | Zeile 1: | ||
| − | = | + | = Zertifikat holen = |
| + | ;Wir befinden uns auf dem LDAP-Server in der DMZ | ||
| + | * wget -nv -O /tmp/it2XX.int.tgz https://web.samogo.de/certs/it2XX.int.tgz | ||
| + | * tar -C /tmp -xvzf /tmp/it2XX.int.tgz | ||
| + | * mv /tmp/fullchain.pem /etc/ssl/own.crt | ||
| + | * mv /tmp/privkey.pem /etc/ssl/own.key | ||
| − | Rocky | + | = Installation = |
| + | ;Auf Rocky heißt das Paket openldap-servers – ldap-utils gibt es nicht, der Client heißt openldap-clients | ||
| + | * dnf install -y openldap-servers openldap-clients ldapscripts | ||
| + | |||
| + | = Grundkonfiguration = | ||
| + | ;Anders als auf Debian gibt es keinen interaktiven Dialog – slapd wird direkt über cn=config konfiguriert | ||
| + | ;Nach der Installation läuft slapd sofort, die Datenbank liegt unter /var/lib/ldap/ | ||
| + | |||
| + | == Dienst starten == | ||
| + | * systemctl enable --now slapd | ||
| + | |||
| + | == Port checken == | ||
| + | * ss -4lntp | grep slapd | ||
| + | LISTEN 0 2048 0.0.0.0:389 0.0.0.0:* users:(("slapd",pid=1365,fd=7)) | ||
| + | |||
| + | == Admin-Passwort setzen == | ||
| + | ;Das Passwort wird als SSHA-Hash erzeugt und dann per LDIF in cn=config eingetragen | ||
| + | * slappasswd | ||
| + | {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | ||
| + | |||
| + | * vi /tmp/passwd.ldif | ||
| + | <pre> | ||
| + | dn: olcDatabase={2}mdb,cn=config | ||
| + | changetype: modify | ||
| + | replace: olcSuffix | ||
| + | olcSuffix: dc=it2XX,dc=int | ||
| + | - | ||
| + | replace: olcRootDN | ||
| + | olcRootDN: cn=admin,dc=it2XX,dc=int | ||
| + | - | ||
| + | replace: olcRootPW | ||
| + | olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | ||
| + | </pre> | ||
| + | * ldapmodify -Y EXTERNAL -H ldapi:/// -f /tmp/passwd.ldif | ||
| + | |||
| + | = TLS konfigurieren = | ||
| + | |||
| + | == Rechte setzen == | ||
| + | ;Der User ldap muss Zertifikat und Schlüssel lesen können – auf Rocky heißt der User ldap, nicht openldap | ||
| + | * chown ldap:ldap /etc/ssl/own.crt /etc/ssl/own.key | ||
| + | * chmod 640 /etc/ssl/own.crt /etc/ssl/own.key | ||
| + | |||
| + | == SELinux: Zertifikat freigeben == | ||
| + | ;SELinux verhindert standardmäßig dass slapd auf Dateien außerhalb seiner eigenen Verzeichnisse zugreift | ||
| + | * setsebool -P ldap_can_access_certs 1 | ||
| + | * restorecon -Rv /etc/ssl/own.crt /etc/ssl/own.key | ||
| + | |||
| + | == TLS in cn=config eintragen == | ||
| + | * vi /tmp/tls.ldif | ||
| + | <pre> | ||
| + | dn: cn=config | ||
| + | changetype: modify | ||
| + | replace: olcTLSCACertificateFile | ||
| + | olcTLSCACertificateFile: /etc/pki/tls/certs/ca-bundle.crt | ||
| + | - | ||
| + | replace: olcTLSCertificateFile | ||
| + | olcTLSCertificateFile: /etc/ssl/own.crt | ||
| + | - | ||
| + | replace: olcTLSCertificateKeyFile | ||
| + | olcTLSCertificateKeyFile: /etc/ssl/own.key | ||
| + | </pre> | ||
| + | * ldapmodify -Y EXTERNAL -H ldapi:/// -f /tmp/tls.ldif | ||
| + | |||
| + | == LDAPS aktivieren == | ||
| + | ;Auf Rocky wird der slapd-Dienst über eine sysconfig-Datei gesteuert | ||
| + | * vi /etc/sysconfig/slapd | ||
| + | <pre> | ||
| + | SLAPD_URLS="ldap:/// ldaps:/// ldapi:///" | ||
| + | </pre> | ||
| + | * systemctl restart slapd | ||
| − | = | + | == Ports prüfen == |
| + | * ss -4lntp | grep slapd | ||
| + | LISTEN 0 2048 0.0.0.0:389 0.0.0.0:* users:(("slapd",pid=788,fd=7)) | ||
| + | LISTEN 0 2048 0.0.0.0:636 0.0.0.0:* users:(("slapd",pid=788,fd=10)) | ||
| − | + | == Funktionstest == | |
| − | * | + | * openssl s_client -connect ldap.it2XX.int:636 -showcerts |
| − | ; | + | = ldap.conf setzen = |
| − | * | + | ;Die systemweite LDAP-Client-Konfiguration – gilt für alle ldap*-Befehle |
| + | * vi /etc/openldap/ldap.conf | ||
| + | <pre> | ||
| + | BASE dc=it2XX,dc=int | ||
| + | URI ldaps://ldap.it2XX.int | ||
| + | TLS_CACERT /etc/pki/tls/certs/ca-bundle.crt | ||
| + | </pre> | ||
| − | + | = Grundstruktur = | |
| − | * | + | == Erstellen == |
| + | * vi /root/struktur.ldif | ||
| + | <pre> | ||
| + | dn: ou=users,dc=it2XX,dc=int | ||
| + | objectClass: organizationalUnit | ||
| + | ou: users | ||
| − | = | + | dn: ou=groups,dc=it2XX,dc=int |
| + | objectClass: organizationalUnit | ||
| + | ou: groups | ||
| − | + | dn: ou=hosts,dc=it2XX,dc=int | |
| + | objectClass: organizationalUnit | ||
| + | ou: hosts | ||
| − | + | dn: ou=sudo,dc=it2XX,dc=int | |
| − | + | objectClass: organizationalUnit | |
| − | + | ou: sudo | |
| − | + | </pre> | |
| − | = | + | == Anlegen == |
| + | * ldapadd -xD cn=admin,dc=it2XX,dc=int -w 123Start$ -H ldap://localhost -f /root/struktur.ldif | ||
| − | = | + | = Kontrolle = |
| − | + | * ldapsearch -x -LLL | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | = | + | = Sudo-Schema laden = |
| − | ; | + | ;Das Sudo-Schema ist nicht im Standard-slapd enthalten und wird manuell importiert |
| − | * | + | * wget https://xinux.de/downloads/script/sudo.ldif |
| − | * | + | * ldapadd -Y EXTERNAL -H ldapi:/// -f sudo.ldif |
| − | == | + | = Sudo-Regeln anlegen = |
| + | * vi /root/sudo_rule.ldif | ||
| + | <pre> | ||
| + | dn: cn=defaults,ou=sudo,dc=it2XX,dc=int | ||
| + | objectClass: sudoRole | ||
| + | cn: defaults | ||
| + | sudoOption: env_keep+=SSH_AUTH_SOCK | ||
| − | + | dn: cn=admin_role,ou=sudo,dc=it2XX,dc=int | |
| − | + | objectClass: sudoRole | |
| − | + | cn: admin_role | |
| − | + | sudoUser: %sudo | |
| − | + | sudoHost: ALL | |
| − | + | sudoCommand: ALL | |
| − | + | sudoRunAsUser: ALL | |
| − | + | sudoRunAsGroup: ALL | |
| − | + | </pre> | |
| − | + | * ldapadd -xD cn=admin,dc=it2XX,dc=int -w 123Start$ -H ldap://localhost -f /root/sudo_rule.ldif | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | = | + | = Benutzer und Gruppen = |
| − | == | + | == Konfiguration ldapscripts == |
| − | ; | + | ;ldapscripts vereinfacht die Benutzerverwaltung – statt langer LDIF-Dateien reichen einfache Befehle |
| − | * | + | * vi /etc/ldapscripts/ldapscripts.conf |
| − | + | <pre> | |
| + | SERVER="ldap://localhost" | ||
| + | SUFFIX="dc=it2XX,dc=int" | ||
| + | GSUFFIX="ou=groups" | ||
| + | USUFFIX="ou=users" | ||
| + | MSUFFIX="ou=hosts" | ||
| + | BINDDN="cn=admin,dc=it2XX,dc=int" | ||
| + | USHELL="/bin/bash" | ||
| + | UHOMES="/home/%u" | ||
| + | CREATEHOMES="yes" | ||
| + | HOMESKEL="/etc/skel" | ||
| + | BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd" | ||
| + | GIDSTART="10000" # Group ID | ||
| + | UIDSTART="10000" # User ID | ||
| + | MIDSTART="20000" # Machine ID | ||
| + | GCLASS="posixGroup" | ||
| + | PASSWORDGEN="pwgen" | ||
| + | RECORDPASSWORDS="no" | ||
| + | PASSWORDFILE="/var/log/ldapscripts_passwd.log" | ||
| + | LOGTOFILE="yes" | ||
| + | LOGFILE="/var/log/ldapscripts.log" | ||
| + | LOGTOSYSLOG="no" | ||
| + | SYSLOGFACILITY="local4" | ||
| + | SYSLOGLEVEL="info" | ||
| + | LDAPSEARCHBIN="/usr/bin/ldapsearch" | ||
| + | LDAPADDBIN="/usr/bin/ldapadd" | ||
| + | LDAPDELETEBIN="/usr/bin/ldapdelete" | ||
| + | LDAPMODIFYBIN="/usr/bin/ldapmodify" | ||
| + | LDAPMODRDNBIN="/usr/bin/ldapmodrdn" | ||
| + | LDAPPASSWDBIN="/usr/bin/ldappasswd" | ||
| + | LDAPSEARCHOPTS="-o ldif-wrap=no" | ||
| + | GETENTPWCMD="" | ||
| + | GETENTGRCMD="" | ||
| + | GTEMPLATE="" | ||
| + | UTEMPLATE="" | ||
| + | MTEMPLATE="" | ||
| + | </pre> | ||
| − | + | * echo -n "123Start$" > /etc/ldapscripts/ldapscripts.passwd | |
| − | * | + | * chmod 600 /etc/ldapscripts/ldapscripts.passwd |
| − | |||
| − | == | + | == Gruppen == |
| − | + | * ldapaddgroup it | |
| − | * | + | * ldapaddgroup sudo |
| − | = | + | == Benutzer == |
| + | * ldapadduser thomas it | ||
| + | * ldapadduser tina it | ||
| − | + | == Passwort == | |
| + | * ldapsetpasswd thomas | ||
| + | * ldapsetpasswd tina | ||
| − | == | + | == Gruppe zuweisen == |
| − | * | + | * ldapaddusertogroup thomas sudo |
| + | * ldapaddusertogroup tina sudo | ||
| − | == | + | == Check == |
| + | * ldapsearch -xLLL cn=sudo | ||
| + | dn: cn=sudo,ou=groups,dc=it2XX,dc=int | ||
| + | objectClass: posixGroup | ||
| + | cn: sudo | ||
| + | gidNumber: 10001 | ||
| + | description: Group account | ||
| + | memberUid: thomas | ||
| + | memberUid: tina | ||
| − | = | + | = Firewall = |
| − | ; | + | ;LDAP und LDAPS auf dem Server freigeben |
| − | * | + | * firewall-cmd --permanent --zone=public --add-service=ldap |
| − | * | + | * firewall-cmd --permanent --zone=public --add-service=ldaps |
| + | * firewall-cmd --reload | ||
| − | == | + | = SSSD Anbindung = |
| − | |||
| − | |||
| − | == | + | == Installation == |
| − | ; | + | ;Auf Rocky heißt das Paket sssd-ldap statt libpam-sss – authselect übernimmt die PAM-Integration |
| − | * | + | * dnf install -y sssd sssd-ldap oddjob oddjob-mkhomedir |
| − | === | + | == Konfiguration == |
| − | + | * vi /etc/sssd/sssd.conf | |
| − | + | <pre> | |
| + | [sssd] | ||
| + | config_file_version = 2 | ||
| + | services = nss, pam, sudo | ||
| + | domains = it2XX.int | ||
| − | == | + | [domain/it2XX.int] |
| − | + | id_provider = ldap | |
| − | + | auth_provider = ldap | |
| − | + | chpass_provider = ldap | |
| − | + | access_provider = permit | |
| + | sudo_provider = ldap | ||
| + | ldap_uri = ldaps://ldap.it2XX.int | ||
| + | ldap_search_base = dc=it2XX,dc=int | ||
| + | ldap_sudo_search_base = ou=sudo,dc=it2XX,dc=int | ||
| + | ldap_tls_cacert = /etc/pki/tls/certs/ca-bundle.crt | ||
| + | ldap_tls_reqcert = hard | ||
| + | cache_credentials = True | ||
| − | + | [nss] | |
| − | + | filter_users = root,daemon,bin,sys,sync,games,man,lp,mail,news,uucp,proxy,nobody,systemd-network,systemd-resolve,dbus,polkitd,unbound,tss,sssd,chrony,sshd,rngd | |
| − | |||
| − | |||
| − | = | + | [pam] |
| + | offline_credentials_expiration = 2 | ||
| + | </pre> | ||
| − | + | * chmod 600 /etc/sssd/sssd.conf | |
| − | * | ||
| − | ; | + | == PAM-Integration == |
| − | * | + | ;Auf Rocky übernimmt authselect die PAM-Konfiguration – kein pam-auth-update wie auf Debian |
| + | ;sssd und mkhomedir werden als Profile aktiviert | ||
| + | * authselect select sssd with-mkhomedir --force | ||
| + | * systemctl enable --now oddjobd | ||
| + | * systemctl restart sssd | ||
| − | ; | + | == NSS == |
| − | * | + | ;Nur Kontrolle – authselect hat nsswitch.conf bereits angepasst |
| + | * cat /etc/nsswitch.conf | ||
| + | passwd: sss files systemd | ||
| + | group: sss files systemd | ||
| + | shadow: files sss | ||
| + | hosts: files dns | ||
| + | sudoers: files sss | ||
| − | ; | + | = Tests = |
| − | * | + | ;Funktioniert nsswitch? |
| + | * getent passwd thomas | ||
| + | thomas:*:10000:10000:thomas:/home/thomas:/bin/bash | ||
| + | * getent passwd tina | ||
| + | tina:*:10001:10000:tina:/home/tina:/bin/bash | ||
| + | * getent group it | ||
| + | it:*:10000: | ||
| + | ;Kann ich mit su - einen Identitätswechsel vornehmen? | ||
| + | * su - thomas | ||
| + | thomas@ldap:~$ exit | ||
| + | * su - tina | ||
| + | tina@ldap:~$ exit | ||
| − | = | + | = Client-Anbindung = |
| − | == | + | == Installation == |
| − | + | * dnf install -y sssd sssd-ldap oddjob oddjob-mkhomedir | |
| − | * | ||
| − | |||
| − | |||
| − | == | + | {| class="wikitable" |
| − | + | ! Paket !! Funktion | |
| − | * vi /etc/ | + | |- |
| + | | sssd || Hauptdienst zur zentralen Identitätsverwaltung | ||
| + | |- | ||
| + | | sssd-ldap || LDAP-Provider für SSSD | ||
| + | |- | ||
| + | | oddjob || D-Bus-Dienst der Hilfsskripte ausführt | ||
| + | |- | ||
| + | | oddjob-mkhomedir || Erstellt beim ersten Login automatisch das Home-Verzeichnis | ||
| + | |} | ||
| + | |||
| + | == SSSD Konfiguration == | ||
| + | * vi /etc/sssd/sssd.conf | ||
<pre> | <pre> | ||
| − | [daemon] | + | [sssd] |
| − | + | config_file_version = 2 | |
| + | services = nss, pam, sudo | ||
| + | domains = it2XX.int | ||
| + | |||
| + | [domain/it2XX.int] | ||
| + | id_provider = ldap | ||
| + | auth_provider = ldap | ||
| + | chpass_provider = ldap | ||
| + | access_provider = permit | ||
| + | sudo_provider = ldap | ||
| + | ldap_uri = ldaps://ldap.it2XX.int | ||
| + | ldap_search_base = dc=it2XX,dc=int | ||
| + | ldap_sudo_search_base = ou=sudo,dc=it2XX,dc=int | ||
| + | ldap_default_bind_dn = cn=admin,dc=it2XX,dc=int | ||
| + | ldap_default_authtok = 123Start$ | ||
| + | ldap_tls_cacert = /etc/pki/tls/certs/ca-bundle.crt | ||
| + | ldap_tls_reqcert = hard | ||
| + | cache_credentials = True | ||
| + | |||
| + | [nss] | ||
| + | filter_users = root,daemon,bin,sys,sync,games,man,lp,mail,news,uucp,proxy,nobody,systemd-network,systemd-resolve,dbus,polkitd,unbound,tss,sssd,chrony,sshd,rngd | ||
| + | |||
| + | [pam] | ||
| + | offline_credentials_expiration = 2 | ||
</pre> | </pre> | ||
| − | |||
| − | + | * chmod 600 /etc/sssd/sssd.conf | |
| − | + | * authselect select sssd with-mkhomedir --force | |
| − | * | + | * systemctl enable --now oddjobd |
| + | * systemctl restart sssd | ||
| − | = | + | == Tests == |
| + | * getent passwd thomas | ||
| + | * id tina | ||
| + | * sudo -l -U thomas | ||
| − | + | == Netzwerkverkehr prüfen == | |
| + | ;Verschlüsselte Kommunikation über Port 636 verifizieren | ||
| + | * tcpdump -i any -nn port 636 | ||
| + | 14:29:33.586737 IP 10.88.213.100.52646 > 10.88.213.31.636: Flags [P.], seq 1:759, ack 3951, win 501, length 758 | ||
| + | 14:29:33.586816 IP 10.88.213.31.636 > 10.88.213.100.52646: Flags [P.], seq 4795:4831, ack 759, win 504, length 36 | ||
| − | ; | + | ;Port 636: Die Pakete gehen gezielt an den LDAPS-Port |
| + | ;Flags [P.]: Austausch verschlüsselter Anwendungsdaten nach dem TLS-Handshake | ||
| + | ;Keine Klartextdaten: Im Gegensatz zu Port 389 sind keine Benutzernamen oder Passwörter im Dump lesbar | ||
Aktuelle Version vom 20. Mai 2026, 06:18 Uhr
Zertifikat holen
- Wir befinden uns auf dem LDAP-Server in der DMZ
- wget -nv -O /tmp/it2XX.int.tgz https://web.samogo.de/certs/it2XX.int.tgz
- tar -C /tmp -xvzf /tmp/it2XX.int.tgz
- mv /tmp/fullchain.pem /etc/ssl/own.crt
- mv /tmp/privkey.pem /etc/ssl/own.key
Installation
- Auf Rocky heißt das Paket openldap-servers – ldap-utils gibt es nicht, der Client heißt openldap-clients
- dnf install -y openldap-servers openldap-clients ldapscripts
Grundkonfiguration
- Anders als auf Debian gibt es keinen interaktiven Dialog – slapd wird direkt über cn=config konfiguriert
- Nach der Installation läuft slapd sofort, die Datenbank liegt unter /var/lib/ldap/
Dienst starten
- systemctl enable --now slapd
Port checken
- ss -4lntp | grep slapd
LISTEN 0 2048 0.0.0.0:389 0.0.0.0:* users:(("slapd",pid=1365,fd=7))
Admin-Passwort setzen
- Das Passwort wird als SSHA-Hash erzeugt und dann per LDIF in cn=config eingetragen
- slappasswd
{SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- vi /tmp/passwd.ldif
dn: olcDatabase={2}mdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=it2XX,dc=int
-
replace: olcRootDN
olcRootDN: cn=admin,dc=it2XX,dc=int
-
replace: olcRootPW
olcRootPW: {SSHA}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
- ldapmodify -Y EXTERNAL -H ldapi:/// -f /tmp/passwd.ldif
TLS konfigurieren
Rechte setzen
- Der User ldap muss Zertifikat und Schlüssel lesen können – auf Rocky heißt der User ldap, nicht openldap
- chown ldap:ldap /etc/ssl/own.crt /etc/ssl/own.key
- chmod 640 /etc/ssl/own.crt /etc/ssl/own.key
SELinux: Zertifikat freigeben
- SELinux verhindert standardmäßig dass slapd auf Dateien außerhalb seiner eigenen Verzeichnisse zugreift
- setsebool -P ldap_can_access_certs 1
- restorecon -Rv /etc/ssl/own.crt /etc/ssl/own.key
TLS in cn=config eintragen
- vi /tmp/tls.ldif
dn: cn=config changetype: modify replace: olcTLSCACertificateFile olcTLSCACertificateFile: /etc/pki/tls/certs/ca-bundle.crt - replace: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/own.crt - replace: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/own.key
- ldapmodify -Y EXTERNAL -H ldapi:/// -f /tmp/tls.ldif
LDAPS aktivieren
- Auf Rocky wird der slapd-Dienst über eine sysconfig-Datei gesteuert
- vi /etc/sysconfig/slapd
SLAPD_URLS="ldap:/// ldaps:/// ldapi:///"
- systemctl restart slapd
Ports prüfen
- ss -4lntp | grep slapd
LISTEN 0 2048 0.0.0.0:389 0.0.0.0:* users:(("slapd",pid=788,fd=7))
LISTEN 0 2048 0.0.0.0:636 0.0.0.0:* users:(("slapd",pid=788,fd=10))
Funktionstest
- openssl s_client -connect ldap.it2XX.int:636 -showcerts
ldap.conf setzen
- Die systemweite LDAP-Client-Konfiguration – gilt für alle ldap*-Befehle
- vi /etc/openldap/ldap.conf
BASE dc=it2XX,dc=int URI ldaps://ldap.it2XX.int TLS_CACERT /etc/pki/tls/certs/ca-bundle.crt
Grundstruktur
Erstellen
- vi /root/struktur.ldif
dn: ou=users,dc=it2XX,dc=int objectClass: organizationalUnit ou: users dn: ou=groups,dc=it2XX,dc=int objectClass: organizationalUnit ou: groups dn: ou=hosts,dc=it2XX,dc=int objectClass: organizationalUnit ou: hosts dn: ou=sudo,dc=it2XX,dc=int objectClass: organizationalUnit ou: sudo
Anlegen
- ldapadd -xD cn=admin,dc=it2XX,dc=int -w 123Start$ -H ldap://localhost -f /root/struktur.ldif
Kontrolle
- ldapsearch -x -LLL
Sudo-Schema laden
- Das Sudo-Schema ist nicht im Standard-slapd enthalten und wird manuell importiert
- wget https://xinux.de/downloads/script/sudo.ldif
- ldapadd -Y EXTERNAL -H ldapi:/// -f sudo.ldif
Sudo-Regeln anlegen
- vi /root/sudo_rule.ldif
dn: cn=defaults,ou=sudo,dc=it2XX,dc=int objectClass: sudoRole cn: defaults sudoOption: env_keep+=SSH_AUTH_SOCK dn: cn=admin_role,ou=sudo,dc=it2XX,dc=int objectClass: sudoRole cn: admin_role sudoUser: %sudo sudoHost: ALL sudoCommand: ALL sudoRunAsUser: ALL sudoRunAsGroup: ALL
- ldapadd -xD cn=admin,dc=it2XX,dc=int -w 123Start$ -H ldap://localhost -f /root/sudo_rule.ldif
Benutzer und Gruppen
Konfiguration ldapscripts
- ldapscripts vereinfacht die Benutzerverwaltung – statt langer LDIF-Dateien reichen einfache Befehle
- vi /etc/ldapscripts/ldapscripts.conf
SERVER="ldap://localhost" SUFFIX="dc=it2XX,dc=int" GSUFFIX="ou=groups" USUFFIX="ou=users" MSUFFIX="ou=hosts" BINDDN="cn=admin,dc=it2XX,dc=int" USHELL="/bin/bash" UHOMES="/home/%u" CREATEHOMES="yes" HOMESKEL="/etc/skel" BINDPWDFILE="/etc/ldapscripts/ldapscripts.passwd" GIDSTART="10000" # Group ID UIDSTART="10000" # User ID MIDSTART="20000" # Machine ID GCLASS="posixGroup" PASSWORDGEN="pwgen" RECORDPASSWORDS="no" PASSWORDFILE="/var/log/ldapscripts_passwd.log" LOGTOFILE="yes" LOGFILE="/var/log/ldapscripts.log" LOGTOSYSLOG="no" SYSLOGFACILITY="local4" SYSLOGLEVEL="info" LDAPSEARCHBIN="/usr/bin/ldapsearch" LDAPADDBIN="/usr/bin/ldapadd" LDAPDELETEBIN="/usr/bin/ldapdelete" LDAPMODIFYBIN="/usr/bin/ldapmodify" LDAPMODRDNBIN="/usr/bin/ldapmodrdn" LDAPPASSWDBIN="/usr/bin/ldappasswd" LDAPSEARCHOPTS="-o ldif-wrap=no" GETENTPWCMD="" GETENTGRCMD="" GTEMPLATE="" UTEMPLATE="" MTEMPLATE=""
- echo -n "123Start$" > /etc/ldapscripts/ldapscripts.passwd
- chmod 600 /etc/ldapscripts/ldapscripts.passwd
Gruppen
- ldapaddgroup it
- ldapaddgroup sudo
Benutzer
- ldapadduser thomas it
- ldapadduser tina it
Passwort
- ldapsetpasswd thomas
- ldapsetpasswd tina
Gruppe zuweisen
- ldapaddusertogroup thomas sudo
- ldapaddusertogroup tina sudo
Check
- ldapsearch -xLLL cn=sudo
dn: cn=sudo,ou=groups,dc=it2XX,dc=int objectClass: posixGroup cn: sudo gidNumber: 10001 description: Group account memberUid: thomas memberUid: tina
Firewall
- LDAP und LDAPS auf dem Server freigeben
- firewall-cmd --permanent --zone=public --add-service=ldap
- firewall-cmd --permanent --zone=public --add-service=ldaps
- firewall-cmd --reload
SSSD Anbindung
Installation
- Auf Rocky heißt das Paket sssd-ldap statt libpam-sss – authselect übernimmt die PAM-Integration
- dnf install -y sssd sssd-ldap oddjob oddjob-mkhomedir
Konfiguration
- vi /etc/sssd/sssd.conf
[sssd] config_file_version = 2 services = nss, pam, sudo domains = it2XX.int [domain/it2XX.int] id_provider = ldap auth_provider = ldap chpass_provider = ldap access_provider = permit sudo_provider = ldap ldap_uri = ldaps://ldap.it2XX.int ldap_search_base = dc=it2XX,dc=int ldap_sudo_search_base = ou=sudo,dc=it2XX,dc=int ldap_tls_cacert = /etc/pki/tls/certs/ca-bundle.crt ldap_tls_reqcert = hard cache_credentials = True [nss] filter_users = root,daemon,bin,sys,sync,games,man,lp,mail,news,uucp,proxy,nobody,systemd-network,systemd-resolve,dbus,polkitd,unbound,tss,sssd,chrony,sshd,rngd [pam] offline_credentials_expiration = 2
- chmod 600 /etc/sssd/sssd.conf
PAM-Integration
- Auf Rocky übernimmt authselect die PAM-Konfiguration – kein pam-auth-update wie auf Debian
- sssd und mkhomedir werden als Profile aktiviert
- authselect select sssd with-mkhomedir --force
- systemctl enable --now oddjobd
- systemctl restart sssd
NSS
- Nur Kontrolle – authselect hat nsswitch.conf bereits angepasst
- cat /etc/nsswitch.conf
passwd: sss files systemd group: sss files systemd shadow: files sss hosts: files dns sudoers: files sss
Tests
- Funktioniert nsswitch?
- getent passwd thomas
thomas:*:10000:10000:thomas:/home/thomas:/bin/bash
- getent passwd tina
tina:*:10001:10000:tina:/home/tina:/bin/bash
- getent group it
it:*:10000:
- Kann ich mit su - einen Identitätswechsel vornehmen?
- su - thomas
thomas@ldap:~$ exit
- su - tina
tina@ldap:~$ exit
Client-Anbindung
Installation
- dnf install -y sssd sssd-ldap oddjob oddjob-mkhomedir
| Paket | Funktion |
|---|---|
| sssd | Hauptdienst zur zentralen Identitätsverwaltung |
| sssd-ldap | LDAP-Provider für SSSD |
| oddjob | D-Bus-Dienst der Hilfsskripte ausführt |
| oddjob-mkhomedir | Erstellt beim ersten Login automatisch das Home-Verzeichnis |
SSSD Konfiguration
- vi /etc/sssd/sssd.conf
[sssd] config_file_version = 2 services = nss, pam, sudo domains = it2XX.int [domain/it2XX.int] id_provider = ldap auth_provider = ldap chpass_provider = ldap access_provider = permit sudo_provider = ldap ldap_uri = ldaps://ldap.it2XX.int ldap_search_base = dc=it2XX,dc=int ldap_sudo_search_base = ou=sudo,dc=it2XX,dc=int ldap_default_bind_dn = cn=admin,dc=it2XX,dc=int ldap_default_authtok = 123Start$ ldap_tls_cacert = /etc/pki/tls/certs/ca-bundle.crt ldap_tls_reqcert = hard cache_credentials = True [nss] filter_users = root,daemon,bin,sys,sync,games,man,lp,mail,news,uucp,proxy,nobody,systemd-network,systemd-resolve,dbus,polkitd,unbound,tss,sssd,chrony,sshd,rngd [pam] offline_credentials_expiration = 2
- chmod 600 /etc/sssd/sssd.conf
- authselect select sssd with-mkhomedir --force
- systemctl enable --now oddjobd
- systemctl restart sssd
Tests
- getent passwd thomas
- id tina
- sudo -l -U thomas
Netzwerkverkehr prüfen
- Verschlüsselte Kommunikation über Port 636 verifizieren
- tcpdump -i any -nn port 636
14:29:33.586737 IP 10.88.213.100.52646 > 10.88.213.31.636: Flags [P.], seq 1:759, ack 3951, win 501, length 758 14:29:33.586816 IP 10.88.213.31.636 > 10.88.213.100.52646: Flags [P.], seq 4795:4831, ack 759, win 504, length 36
- Port 636
- Die Pakete gehen gezielt an den LDAPS-Port
- Flags [P.]
- Austausch verschlüsselter Anwendungsdaten nach dem TLS-Handshake
- Keine Klartextdaten
- Im Gegensatz zu Port 389 sind keine Benutzernamen oder Passwörter im Dump lesbar