Rocky ldap: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| 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 | |||
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