Zentrale Benutzerverwaltung mit OpenLDAP und SSS (TLS): Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „= Zertifikat holen = ;Wir befinden uns auf dem LDAP-Server * apt update * wget https://web.samogo.de/certs/it2XX.int.tgz * tar -C /tmp -xvzf it2XX.int.tgz * mv…“)
 
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
= Zertifikat holen =
 
= Zertifikat holen =
 
;Wir befinden uns auf dem LDAP-Server
 
;Wir befinden uns auf dem LDAP-Server
* apt update
 
 
* wget https://web.samogo.de/certs/it2XX.int.tgz
 
* wget https://web.samogo.de/certs/it2XX.int.tgz
 
* tar -C /tmp -xvzf it2XX.int.tgz
 
* tar -C /tmp -xvzf it2XX.int.tgz
Zeile 9: Zeile 8:
 
= Installation =
 
= Installation =
 
* apt update
 
* apt update
* DEBIAN_FRONTEND=noninteractive apt install -y slapd ldap-utils ldapscripts
+
*apt install -y slapd ldap-utils ldapscripts
* dpkg-reconfigure slapd
+
= Wenn etwas nicht passt kann man so eine neue Grundkonfiguration vornehmen=
 +
'''Braucht man in der Regel nicht'''
 +
*dpkg-reconfigure slapd
 
{| class="wikitable"
 
{| class="wikitable"
 
! Debconf Question !! Recommended Input
 
! Debconf Question !! Recommended Input
Zeile 172: Zeile 173:
 
  gidNumber: 10000
 
  gidNumber: 10000
 
  description: Group account
 
  description: Group account
memberUid: thomas
 
memberUid: tina
 
  
= SSSD Anbindung (Server, lokaler Login) =
+
= Client-Anbindung — Debian =
 +
;Diese Konfiguration kann auf einer separaten Client-Maschine oder testweise direkt auf dem LDAP-Server selbst durchgeführt werden
 +
 
 
== Installation ==
 
== Installation ==
 +
* apt update
 
* apt install -y sssd libnss-sss libpam-sss sssd-tools oddjob-mkhomedir
 
* apt install -y sssd libnss-sss libpam-sss sssd-tools oddjob-mkhomedir
== Konfiguration ==
+
 
 +
{| class="wikitable"
 +
! Paket !! Funktion
 +
|-
 +
| sssd || Hauptdienst zur zentralen Identitätsverwaltung
 +
|-
 +
| libnss-sss || NSS-Schnittstelle – liefert User- und Gruppen-IDs ans System
 +
|-
 +
| libpam-sss || PAM-Modul für die Authentifizierung beim Login
 +
|-
 +
| sssd-tools || Hilfswerkzeuge zur Fehlersuche (z. B. <code>sssctl</code>)
 +
|-
 +
| oddjob-mkhomedir || Erstellt beim ersten Login automatisch das Home-Verzeichnis
 +
|}
 +
 
 +
== SSSD Konfiguration ==
 
* vim /etc/sssd/sssd.conf
 
* vim /etc/sssd/sssd.conf
 
<pre>
 
<pre>
Zeile 193: Zeile 210:
 
ldap_uri = ldaps://ldap.it2XX.int
 
ldap_uri = ldaps://ldap.it2XX.int
 
ldap_search_base = dc=it2XX,dc=int
 
ldap_search_base = dc=it2XX,dc=int
 +
ldap_default_bind_dn = cn=admin,dc=it2XX,dc=int
 +
ldap_default_authtok = 123Start$
 
ldap_tls_cacert = /etc/ssl/certs/ca-certificates.crt
 
ldap_tls_cacert = /etc/ssl/certs/ca-certificates.crt
 
ldap_tls_reqcert = hard
 
ldap_tls_reqcert = hard
Zeile 237: Zeile 256:
 
  auth    required                    pam_permit.so
 
  auth    required                    pam_permit.so
  
= Tests (Server, lokal) =
+
== Tests ==
 
;Funktioniert nsswitch?
 
;Funktioniert nsswitch?
 
* getent passwd thomas
 
* getent passwd thomas
Zeile 247: Zeile 266:
 
;Kann ich mit su - einen Identitätswechsel vornehmen?
 
;Kann ich mit su - einen Identitätswechsel vornehmen?
 
* su - thomas
 
* su - thomas
  thomas@ldap:~$ exit
+
  thomas@client:~$ exit
 
* su - tina
 
* su - tina
  tina@ldap:~$ exit
+
  tina@client:~$ exit
 
 
= Client-Anbindung — Debian =
 
== Installation ==
 
* apt update
 
* apt install -y sssd libnss-sss libpam-sss sssd-tools oddjob-mkhomedir
 
 
 
{| class="wikitable"
 
! Paket !! Funktion
 
|-
 
| sssd || Hauptdienst zur zentralen Identitätsverwaltung
 
|-
 
| libnss-sss || NSS-Schnittstelle – liefert User- und Gruppen-IDs ans System
 
|-
 
| libpam-sss || PAM-Modul für die Authentifizierung beim Login
 
|-
 
| sssd-tools || Hilfswerkzeuge zur Fehlersuche (z. B. <code>sssctl</code>)
 
|-
 
| oddjob-mkhomedir || Erstellt beim ersten Login automatisch das Home-Verzeichnis
 
|}
 
 
 
== ldap.conf setzen ==
 
* vim /etc/ldap/ldap.conf
 
<pre>
 
BASE    dc=it2XX,dc=int
 
URI    ldaps://ldap.it2XX.int
 
TLS_CACERT /etc/ssl/certs/ca-certificates.crt
 
</pre>
 
 
 
== SSSD Konfiguration ==
 
* vim /etc/sssd/sssd.conf
 
<pre>
 
[sssd]
 
config_file_version = 2
 
services = nss, pam
 
domains = it2XX.int
 
 
 
[domain/it2XX.int]
 
id_provider = ldap
 
auth_provider = ldap
 
chpass_provider = ldap
 
access_provider = permit
 
ldap_uri = ldaps://ldap.it2XX.int
 
ldap_search_base = dc=it2XX,dc=int
 
ldap_default_bind_dn = cn=admin,dc=it2XX,dc=int
 
ldap_default_authtok = 123Start$
 
ldap_tls_cacert = /etc/ssl/certs/ca-certificates.crt
 
ldap_tls_reqcert = hard
 
cache_credentials = True
 
 
 
[nss]
 
filter_users = root,daemon,bin,sys,sync,games,man,lp,mail,news,uucp,proxy,www-data,backup,list,irc,gnats,nobody,systemd-network,systemd-resolve,messagebus,_apt,uuidd,nslcd
 
filter_groups = root,daemon,bin,sys,adm,tty,disk,lp,mail,news,uucp,man,proxy,kmem,dialout,fax,voice,cdrom,floppy,tape,sudo,audio,dip,www-data,backup,operator,list,irc,src,gnats,shadow,utmp,video,sasl,plugdev,staff,games,users,nogroup,systemd-journal,systemd-network,systemd-resolve,input,kvm,render,crontab,netdev,messagebus,_apt,uuidd,ssh,nslcd
 
 
 
[pam]
 
offline_credentials_expiration = 2
 
</pre>
 
 
 
* chmod 600 /etc/sssd/sssd.conf
 
* pam-auth-update --enable sss mkhomedir
 
* systemctl restart sssd
 
 
 
== Tests ==
 
* getent passwd thomas
 
* id tina
 
  
 
== Netzwerkverkehr prüfen ==
 
== Netzwerkverkehr prüfen ==
Zeile 325: Zeile 280:
 
;Keine Klartextdaten: Im Gegensatz zu Port 389 sind keine Benutzernamen oder Passwörter im Dump lesbar
 
;Keine Klartextdaten: Im Gegensatz zu Port 389 sind keine Benutzernamen oder Passwörter im Dump lesbar
  
= Client-Anbindung — Rocky Linux (Abweichungen zu Debian) =
+
= Client-Anbindung — Rocky Linux =
;Gleiches Vorgehen wie beim Debian-Client, nur folgende Punkte unterscheiden sich
+
;Diese Konfiguration kann auf einer separaten Client-Maschine oder testweise direkt auf dem LDAP-Server selbst durchgeführt werden
 +
 
 +
== Installation ==
 +
* dnf makecache
 +
* dnf install -y sssd sssd-ldap oddjob-mkhomedir authselect
  
 
{| class="wikitable"
 
{| class="wikitable"
! Bereich !! Debian !! Rocky Linux
+
! Paket !! Funktion
 
|-
 
|-
| Paketmanager || apt || dnf
+
| sssd || Hauptdienst zur zentralen Identitätsverwaltung
 
|-
 
|-
| Pakete || sssd libnss-sss libpam-sss sssd-tools oddjob-mkhomedir || sssd sssd-ldap oddjob-mkhomedir authselect
+
| sssd-ldap || LDAP-Backend-Provider für SSSD
 
|-
 
|-
| ldap.conf Pfad || /etc/ldap/ldap.conf || /etc/openldap/ldap.conf
+
| oddjob-mkhomedir || Erstellt beim ersten Login automatisch das Home-Verzeichnis
|-
 
| CA-Bundle Pfad || /etc/ssl/certs/ca-certificates.crt || /etc/pki/tls/certs/ca-bundle.crt
 
 
|-
 
|-
| PAM-Aktivierung || pam-auth-update --enable sss mkhomedir || authselect select sssd with-mkhomedir --force
+
| authselect || Verwaltet die PAM-/NSS-Profile zentral (Rocky-Pendant zu pam-auth-update)
 
|}
 
|}
 
== Installation ==
 
* dnf makecache
 
* dnf install -y sssd sssd-ldap oddjob-mkhomedir authselect
 
  
 
== ldap.conf setzen ==
 
== ldap.conf setzen ==
Zeile 378: Zeile 331:
 
offline_credentials_expiration = 2
 
offline_credentials_expiration = 2
 
</pre>
 
</pre>
;'''Hinweis:''' Die filter_users/filter_groups-Blöcke aus der Debian-Konfiguration sind hier bewusst weggelassen — Rocky hat eine andere Standard-Systemuser-Liste, ggf. mit `getent passwd` prüfen und bei Bedarf ergänzen
 
  
 
* chmod 600 /etc/sssd/sssd.conf
 
* chmod 600 /etc/sssd/sssd.conf
 
* authselect select sssd with-mkhomedir --force
 
* authselect select sssd with-mkhomedir --force
 
* systemctl restart sssd
 
* systemctl restart sssd
 +
 +
== NSS ==
 +
;Nur Kontrolle
 +
* cat /etc/nsswitch.conf
 +
passwd:        files sss
 +
group:          files sss
 +
shadow:        files sss
 +
 +
== PAM ==
 +
;Nur Kontrolle
 +
* authselect current
 +
Profile ID: sssd
 +
Enabled features:
 +
- with-mkhomedir
  
 
== Tests ==
 
== Tests ==
 +
;Funktioniert nsswitch?
 
* getent passwd thomas
 
* getent passwd thomas
 
* id tina
 
* id tina
 +
;Kann ich mit su - einen Identitätswechsel vornehmen?
 +
* su - thomas
 +
thomas@client:~$ exit
  
 
== Netzwerkverkehr prüfen ==
 
== Netzwerkverkehr prüfen ==
 +
;Verschlüsselte Kommunikation über Port 636 verifizieren
 
* tcpdump -i any -nn port 636
 
* tcpdump -i any -nn port 636
;Identisch zu Debian: Port 636, Flags [P.], keine Klartextdaten
+
;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 24. Juli 2026, 07:15 Uhr

Zertifikat holen

Wir befinden uns auf dem LDAP-Server

Installation

  • apt update
  • apt install -y slapd ldap-utils ldapscripts

Wenn etwas nicht passt kann man so eine neue Grundkonfiguration vornehmen

Braucht man in der Regel nicht

  • dpkg-reconfigure slapd
Debconf Question Recommended Input
Omit OpenLDAP server configuration? No
DNS domain name: it2XX.int
Organization name: it2XX.int
Administrator password: 123Start$
Database backend to use: MDB
Remove database when slapd is purged? No
Move old database? Yes

Port checken

  • ss -4lntp | grep slapd
LISTEN 0      2048         0.0.0.0:389       0.0.0.0:*    users:(("slapd",pid=1365,fd=7))

TLS konfigurieren

Rechte setzen

Der User openldap muss Zertifikat und Schlüssel lesen können
  • chown openldap:openldap /etc/ssl/own.crt /etc/ssl/own.key
  • chmod 640 /etc/ssl/own.crt /etc/ssl/own.key

TLS in cn=config eintragen

  • cat <<EOF > /tmp/tls.ldif
dn: cn=config
changetype: modify
replace: olcTLSCACertificateFile
olcTLSCACertificateFile: /etc/ssl/certs/ca-certificates.crt
-
replace: olcTLSCertificateFile
olcTLSCertificateFile: /etc/ssl/own.crt
-
replace: olcTLSCertificateKeyFile
olcTLSCertificateKeyFile: /etc/ssl/own.key
EOF
  • ldapmodify -Y EXTERNAL -H ldapi:/// -f /tmp/tls.ldif

LDAPS aktivieren

  • vim /etc/default/slapd
SLAPD_SERVICES="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

  • vim /etc/ldap/ldap.conf
BASE    dc=it2XX,dc=int
URI     ldaps://ldap.it2XX.int
TLS_CACERT /etc/ssl/certs/ca-certificates.crt

Erster Test

  • ldapsearch -xLLL
dn: dc=it213,dc=int
objectClass: top
objectClass: dcObject
objectClass: organization
o: it213.int
dc: it213

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

Anlegen

  • ldapadd -xD cn=admin,dc=it2XX,dc=int -w 123Start$ -f /root/struktur.ldif

Kontrolle

  • ldapsearch -x -LLL

Benutzer und Gruppen

Konfiguration ldapscripts

  • vim /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

Benutzer

  • ldapadduser thomas it
  • ldapadduser tina it

Passwort

  • ldapsetpasswd thomas
  • ldapsetpasswd tina

Check

  • ldapsearch -xLLL cn=it
dn: cn=it,ou=groups,dc=it2XX,dc=int
objectClass: posixGroup
cn: it
gidNumber: 10000
description: Group account

Client-Anbindung — Debian

Diese Konfiguration kann auf einer separaten Client-Maschine oder testweise direkt auf dem LDAP-Server selbst durchgeführt werden

Installation

  • apt update
  • apt install -y sssd libnss-sss libpam-sss sssd-tools oddjob-mkhomedir
Paket Funktion
sssd Hauptdienst zur zentralen Identitätsverwaltung
libnss-sss NSS-Schnittstelle – liefert User- und Gruppen-IDs ans System
libpam-sss PAM-Modul für die Authentifizierung beim Login
sssd-tools Hilfswerkzeuge zur Fehlersuche (z. B. sssctl)
oddjob-mkhomedir Erstellt beim ersten Login automatisch das Home-Verzeichnis

SSSD Konfiguration

  • vim /etc/sssd/sssd.conf
[sssd]
config_file_version = 2
services = nss, pam
domains = it2XX.int

[domain/it2XX.int]
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
access_provider = permit
ldap_uri = ldaps://ldap.it2XX.int
ldap_search_base = dc=it2XX,dc=int
ldap_default_bind_dn = cn=admin,dc=it2XX,dc=int
ldap_default_authtok = 123Start$
ldap_tls_cacert = /etc/ssl/certs/ca-certificates.crt
ldap_tls_reqcert = hard
cache_credentials = True

[nss]
filter_users = root,daemon,bin,sys,sync,games,man,lp,mail,news,uucp,proxy,www-data,backup,list,irc,gnats,nobody,systemd-network,systemd-resolve,messagebus,_apt,uuidd,nslcd
filter_groups = root,daemon,bin,sys,adm,tty,disk,lp,mail,news,uucp,man,proxy,kmem,dialout,fax,voice,cdrom,floppy,tape,sudo,audio,dip,www-data,backup,operator,list,irc,src,gnats,shadow,utmp,video,sasl,plugdev,staff,games,users,nogroup,systemd-journal,systemd-network,systemd-resolve,input,kvm,render,crontab,netdev,messagebus,_apt,uuidd,ssh,nslcd

[pam]
offline_credentials_expiration = 2
  • chmod 600 /etc/sssd/sssd.conf
  • pam-auth-update --enable sss mkhomedir
  • systemctl restart sssd

NSS

Nur Kontrolle
  • cat /etc/nsswitch.conf
passwd:         files systemd sss
group:          files systemd sss
shadow:         files systemd sss
gshadow:        files systemd
hosts:          files dns
networks:       files
protocols:      db files
services:       db files sss
ethers:         db files
rpc:            db files
netgroup:       nis sss
sudoers:        files
automount:      sss

PAM

Nur Kontrolle
  • grep "^[^#]" /etc/pam.d/common-auth
auth    [success=2 default=ignore]  pam_unix.so nullok
auth    [success=1 default=ignore]  pam_sss.so use_first_pass
auth    requisite                   pam_deny.so
auth    required                    pam_permit.so

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@client:~$ exit
  • su - tina
tina@client:~$ exit

Netzwerkverkehr prüfen

Verschlüsselte Kommunikation über Port 636 verifizieren
  • tcpdump -i any -nn port 636
14:29:33.586737 IP 172.26.213.99.52646 > 10.213.1.3.636: Flags [P.], seq 1:759, ack 3951, win 501, length 758
14:29:33.586816 IP 10.213.1.3.636 > 172.26.213.99.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

Client-Anbindung — Rocky Linux

Diese Konfiguration kann auf einer separaten Client-Maschine oder testweise direkt auf dem LDAP-Server selbst durchgeführt werden

Installation

  • dnf makecache
  • dnf install -y sssd sssd-ldap oddjob-mkhomedir authselect
Paket Funktion
sssd Hauptdienst zur zentralen Identitätsverwaltung
sssd-ldap LDAP-Backend-Provider für SSSD
oddjob-mkhomedir Erstellt beim ersten Login automatisch das Home-Verzeichnis
authselect Verwaltet die PAM-/NSS-Profile zentral (Rocky-Pendant zu pam-auth-update)

ldap.conf setzen

  • vim /etc/openldap/ldap.conf
BASE    dc=it2XX,dc=int
URI     ldaps://ldap.it2XX.int
TLS_CACERT /etc/pki/tls/certs/ca-bundle.crt

SSSD Konfiguration

  • vim /etc/sssd/sssd.conf
[sssd]
config_file_version = 2
services = nss, pam
domains = it2XX.int

[domain/it2XX.int]
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
access_provider = permit
ldap_uri = ldaps://ldap.it2XX.int
ldap_search_base = 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

[pam]
offline_credentials_expiration = 2
  • chmod 600 /etc/sssd/sssd.conf
  • authselect select sssd with-mkhomedir --force
  • systemctl restart sssd

NSS

Nur Kontrolle
  • cat /etc/nsswitch.conf
passwd:         files sss
group:          files sss
shadow:         files sss

PAM

Nur Kontrolle
  • authselect current
Profile ID: sssd
Enabled features:
- with-mkhomedir

Tests

Funktioniert nsswitch?
  • getent passwd thomas
  • id tina
Kann ich mit su - einen Identitätswechsel vornehmen?
  • su - thomas
thomas@client:~$ exit

Netzwerkverkehr prüfen

Verschlüsselte Kommunikation über Port 636 verifizieren
  • tcpdump -i any -nn port 636
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