Rocky ldap: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
Zeile 1: Zeile 1:
= GNOME auf Rocky Linux =
+
= 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 Linux wird standardmäßig ohne grafische Oberfläche installiert. GNOME wird nachträglich über eine Paketgruppe installiert und als Standard-Ziel gesetzt. Die Oberfläche orientiert sich eng am RHEL-Standard schlicht, stabil und ohne viel Schnickschnack.
+
= 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
  
= Installation =
+
== 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))
  
;GNOME wird als Paketgruppe installiert – das zieht alle nötigen Abhängigkeiten automatisch mit
+
== Funktionstest ==
* dnf groupinstall -y "Server with GUI"
+
* openssl s_client -connect ldap.it2XX.int:636 -showcerts
  
;Grafische Oberfläche als Standard-Boot-Ziel setzen
+
= ldap.conf setzen =
* systemctl set-default graphical.target
+
;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>
  
;Neu starten – beim nächsten Boot startet GNOME automatisch
+
= Grundstruktur =
* reboot
+
== Erstellen ==
 +
* vi /root/struktur.ldif
 +
<pre>
 +
dn: ou=users,dc=it2XX,dc=int
 +
objectClass: organizationalUnit
 +
ou: users
  
= Erster Start =
+
dn: ou=groups,dc=it2XX,dc=int
 +
objectClass: organizationalUnit
 +
ou: groups
  
Beim ersten Start erscheint der GNOME-Einrichtungsassistent. Er führt durch:
+
dn: ou=hosts,dc=it2XX,dc=int
 +
objectClass: organizationalUnit
 +
ou: hosts
  
* Sprache und Region
+
dn: ou=sudo,dc=it2XX,dc=int
* Tastaturlayout
+
objectClass: organizationalUnit
* Datenschutzeinstellungen
+
ou: sudo
* Benutzerkonten verknüpfen (kann übersprungen werden)
+
</pre>
  
= Grundlegende Bedienung =
+
== Anlegen ==
 +
* ldapadd -xD cn=admin,dc=it2XX,dc=int -w 123Start$ -H ldap://localhost -f /root/struktur.ldif
  
== Activities ==
+
= Kontrolle =
;Der zentrale Einstiegspunkt in GNOME – oben links oder einfach die Super-Taste drücken
+
* ldapsearch -x -LLL
* Öffnet die Aktivitätenübersicht
 
* Zeigt alle offenen Fenster
 
* Enthält die Suche – Programme, Dateien, Einstellungen
 
* Zugriff auf alle installierten Anwendungen über das Gitter-Symbol
 
  
== Workspaces ==
+
= Sudo-Schema laden =
;GNOME arbeitet mit dynamischen Arbeitsflächen – neue entstehen automatisch wenn eine belegt ist
+
;Das Sudo-Schema ist nicht im Standard-slapd enthalten und wird manuell importiert
* Super + Bild↑ / Bild↓ – zwischen Arbeitsflächen wechseln
+
* wget https://xinux.de/downloads/script/sudo.ldif
* Super + Shift + Bild↑ / Bild↓ – Fenster auf andere Arbeitsfläche verschieben
+
* ldapadd -Y EXTERNAL -H ldapi:/// -f sudo.ldif
  
== Wichtige Tastenkürzel ==
+
= 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
  
{| class="wikitable"
+
dn: cn=admin_role,ou=sudo,dc=it2XX,dc=int
! Tastenkürzel !! Funktion
+
objectClass: sudoRole
|-
+
cn: admin_role
| Super || Aktivitätenübersicht öffnen
+
sudoUser: %sudo
|-
+
sudoHost: ALL
| Super + A || Alle Anwendungen anzeigen
+
sudoCommand: ALL
|-
+
sudoRunAsUser: ALL
| Super + L || Bildschirm sperren
+
sudoRunAsGroup: ALL
|-
+
</pre>
| Alt + F2 || Befehl ausführen (GNOME Shell Prompt)
+
* ldapadd -xD cn=admin,dc=it2XX,dc=int -w 123Start$ -H ldap://localhost -f /root/sudo_rule.ldif
|-
 
| Ctrl + Alt + T || Terminal öffnen (falls installiert)
 
|-
 
| Alt + Tab || Zwischen Fenstern wechseln
 
|-
 
| Super + Tab || Zwischen Anwendungen wechseln
 
|}
 
  
= Einstellungen =
+
= Benutzer und Gruppen =
  
== Energie ==
+
== Konfiguration ldapscripts ==
;Im Laborbetrieb stört automatisches Sperren und Bildschirmabschalten beides lässt sich deaktivieren
+
;ldapscripts vereinfacht die Benutzerverwaltung statt langer LDIF-Dateien reichen einfache Befehle
* Einstellungen → Energie → Bildschirm ausschalten: Nie
+
* vi /etc/ldapscripts/ldapscripts.conf
* Einstellungen → Datenschutz → Bildschirmsperre: Aus
+
<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>
  
== Sprache und Region ==
+
* echo -n "123Start$" > /etc/ldapscripts/ldapscripts.passwd
* Einstellungen → Region & Sprache
+
* chmod 600 /etc/ldapscripts/ldapscripts.passwd
;Tastaturlayout wechseln: Super + Leertaste
 
  
== Zugänglichkeit ==
+
== Gruppen ==
;Für größere Schrift oder höheren Kontrast im Unterricht nützlich
+
* ldapaddgroup it
* Einstellungen → Eingabehilfen
+
* ldapaddgroup sudo
  
= GNOME Extensions =
+
== Benutzer ==
 +
* ldapadduser thomas it
 +
* ldapadduser tina it
  
Extensions erweitern die GNOME Shell um zusätzliche Funktionen. Sie werden über den Browser oder die GNOME Extensions App installiert.
+
== Passwort ==
 +
* ldapsetpasswd thomas
 +
* ldapsetpasswd tina
  
== Extensions App installieren ==
+
== Gruppe zuweisen ==
* dnf install -y gnome-extensions-app gnome-shell-extension-manager
+
* ldapaddusertogroup thomas sudo
 +
* ldapaddusertogroup tina sudo
  
== Nützliche Extensions im Überblick ==
+
== 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
  
=== Dash to Panel ===
+
= Firewall =
;Verwandelt das GNOME Dock in eine klassische Taskleiste – erleichtert den Einstieg für Windows-gewohnte Teilnehmer
+
;LDAP und LDAPS auf dem Server freigeben
* Anwendungen, offene Fenster und Systemindikatoren in einer Leiste
+
* firewall-cmd --permanent --zone=public --add-service=ldap
* Gut konfigurierbar: Position, Größe, Verhalten
+
* firewall-cmd --permanent --zone=public --add-service=ldaps
 +
* firewall-cmd --reload
  
=== AppIndicator and KStatusNotifierItem ===
+
= SSSD Anbindung =
;Zeigt System-Tray-Icons in der oberen Leiste – z.B. für VPN, Netzwerk, Updates
 
* Besonders nützlich wenn Dienste im Hintergrund laufen
 
  
=== Vitals ===
+
== Installation ==
;Zeigt CPU, RAM, Temperatur und Netzwerkauslastung direkt in der oberen Leiste
+
;Auf Rocky heißt das Paket sssd-ldap statt libpam-sss – authselect übernimmt die PAM-Integration
* Praktisch zur Systemüberwachung im Laborbetrieb
+
* dnf install -y sssd sssd-ldap oddjob oddjob-mkhomedir
  
=== Auto Move Windows ===
+
== Konfiguration ==
;Weist bestimmten Anwendungen automatisch eine Arbeitsfläche zu
+
* vi /etc/sssd/sssd.conf
* Nützlich wenn man Terminal, Browser und Editor sauber trennen will
+
<pre>
 +
[sssd]
 +
config_file_version = 2
 +
services = nss, pam, sudo
 +
domains = it2XX.int
  
== Extensions installieren ==
+
[domain/it2XX.int]
;Über den Browser – Firefox muss dafür installiert sein
+
id_provider = ldap
* Firefox öffnen → https://extensions.gnome.org
+
auth_provider = ldap
* Browser-Integration installieren wenn gefragt
+
chpass_provider = ldap
* Extension suchen → Schalter umlegen → Installieren bestätigen
+
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
  
;Über die Kommandozeile mit gnome-extensions-app
+
[nss]
* gnome-extensions list
+
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
* gnome-extensions enable <extension-uuid>
 
* gnome-extensions disable <extension-uuid>
 
  
= Nützliche Anwendungen nachinstallieren =
+
[pam]
 +
offline_credentials_expiration = 2
 +
</pre>
  
;Terminal
+
* chmod 600 /etc/sssd/sssd.conf
* dnf install -y gnome-terminal
 
  
;Texteditor
+
== PAM-Integration ==
* dnf install -y gedit
+
;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
  
;Dateimanager (meist schon dabei)
+
== NSS ==
* dnf install -y nautilus
+
;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
  
;Firefox
+
= Tests =
* dnf install -y firefox
+
;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
  
= Troubleshooting =
+
= Client-Anbindung =
  
== GNOME startet nicht ==
+
== Installation ==
;Auf die Kommandozeile wechseln
+
* dnf install -y sssd sssd-ldap oddjob oddjob-mkhomedir
* Ctrl + Alt + F2 – TTY öffnen
 
* journalctl -b | grep gnome – Fehler im Journal suchen
 
* systemctl status gdm – Display Manager prüfen
 
  
== Bildschirm bleibt schwarz nach Login ==
+
{| class="wikitable"
;Oft ein Treiberproblem – Wayland deaktivieren und X11 erzwingen
+
! Paket !! Funktion
* vi /etc/gdm/custom.conf
+
|-
 +
| 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]
WaylandEnable=false
+
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>
* systemctl restart gdm
 
  
== Extension funktioniert nicht ==
+
* chmod 600 /etc/sssd/sssd.conf
;GNOME Shell neu starten ohne Abmelden – nur unter X11 möglich
+
* authselect select sssd with-mkhomedir --force
* Alt + F2 → r → Enter
+
* systemctl enable --now oddjobd
 +
* systemctl restart sssd
  
= Wayland vs. X11 =
+
== Tests ==
 +
* getent passwd thomas
 +
* id tina
 +
* sudo -l -U thomas
  
Rocky Linux startet GNOME standardmäßig unter Wayland. Für den Laboralltag ist das meist kein Problem – einige ältere Tools und Remote-Desktop-Lösungen wie xrdp laufen aber nur unter X11 zuverlässig.
+
== 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
  
;Beim Login umschalten: Zahnrad-Symbol unten rechts auf dem Anmeldebildschirm → GNOME auf Xorg auswählen
+
;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

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

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