RHCSA-Serie: Einrichten einer LDAP-basierten Authentifizierung in RHEL 7 – Teil 14

Wir werden diesen Artikel beginnen, indem wir einige LDAP-Grundlagen skizzieren (was es ist, wo es verwendet wird und warum) und zeigen, wie man einen LDAP-Server einrichtet und einen Client konfiguriert, um sich dagegen zu authentifizieren, indem man Red Hat Enterprise Linux 7-Systeme verwendet.

RHCSA Series: Setup LDAP Server and Client Authentication – Part 14

Wie wir sehen werden, gibt es mehrere andere mögliche Anwendungsszenarien, aber in diesem Leitfaden werden wir uns ausschließlich auf die LDAP-basierte Authentifizierung konzentrieren. Bitte beachten Sie außerdem, dass wir aufgrund der Weite des Themas hier nur die Grundlagen behandeln werden, aber Sie können sich zur ausführlicheren Details auf die in der Zusammenfassung angegebene Dokumentation beziehen.

Aus demselben Grund werden Sie feststellen, dass ich mich entschieden habe, einige Verweise auf die Handbuchseiten von LDAP-Tools der Kürze halber auszulassen, aber die entsprechenden Erklärungen sind nur einen Fingertipp entfernt (man ldapadd zum Beispiel).

Das gesagt, lasst uns beginnen.

Unsere Testumgebung

Unsere Testumgebung besteht aus zwei RHEL 7-Rechnern:

Server: 192.168.0.18. FQDN: rhel7.mydomain.com
Client: 192.168.0.20. FQDN: ldapclient.mydomain.com

Wenn Sie möchten, können Sie den in Teil 12: Automatisieren von RHEL 7-Installationen mit Kickstart installierten Rechner als Client verwenden.

Was ist LDAP?

LDAP steht für Lightweight Directory Access Protocol und besteht aus einem Satz von Protokollen, die es einem Client ermöglichen, über ein Netzwerk zentral gespeicherte Informationen abzurufen (wie ein Verzeichnis von Anmelde-Shells, absolute Pfade zu Home-Verzeichnissen und andere typische Systembenutzerinformationen, zum Beispiel), die von verschiedenen Orten aus zugänglich sein sollten oder einer großen Anzahl von Endbenutzern zur Verfügung stehen sollten (ein weiteres Beispiel wäre ein Verzeichnis von Privatadressen und Telefonnummern aller Mitarbeiter in einem Unternehmen).

Die zentrale Speicherung solcher (und weiterer) Informationen erleichtert deren Wartung und den Zugriff für alle, die die Berechtigung zur Nutzung erhalten haben.

Das folgende Diagramm bietet eine vereinfachte Darstellung von LDAP und wird weiter unten detailliert beschrieben:

LDAP Diagram

Erklärung des obigen Diagramms im Detail.

  1. Ein Eintrag in einem LDAP-Verzeichnis repräsentiert eine einzelne Informationseinheit und wird eindeutig durch das sogenannte Distinguished Name identifiziert.
  2. Ein Attribut ist eine mit einem Eintrag verbundene Information (zum Beispiel Adressen, verfügbare Kontakttelefonnummern und E-Mail-Adressen).
  3. Jedem Attribut wird ein oder mehrere Werte zugewiesen, die aus einer durch Leerzeichen getrennten Liste bestehen. Ein Wert, der pro Eintrag eindeutig ist, wird als Relative Distinguished Name bezeichnet.

Das gesagt sei, lassen Sie uns mit den Server- und Client-Installationen fortfahren.

Installation und Konfiguration eines LDAP-Servers und Clients

In RHEL 7 wird LDAP von OpenLDAP implementiert. Verwenden Sie die folgenden Befehle, um den Server und den Client zu installieren:

# yum update && yum install openldap openldap-clients openldap-servers
# yum update && yum install openldap openldap-clients nss-pam-ldapd

Nach Abschluss der Installation gibt es einige Dinge, auf die wir achten. Die folgenden Schritte sollten nur auf dem Server durchgeführt werden, es sei denn, es wird ausdrücklich anders angegeben:

1. Stellen Sie sicher, dass SELinux nicht im Weg steht, indem Sie die folgenden Booleans dauerhaft aktivieren, sowohl auf dem Server als auch auf dem Client:

# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

Wo allow_ypbind für die LDAP-basierte Authentifizierung erforderlich ist und authlogin_nsswitch_use_ldap von einigen Anwendungen benötigt werden kann.

2. Aktivieren und starten Sie den Dienst:

# systemctl enable slapd.service
# systemctl start slapd.service

Beachten Sie, dass Sie den Dienst auch mit systemctl deaktivieren, neu starten oder stoppen können:

# systemctl disable slapd.service
# systemctl restart slapd.service
# systemctl stop slapd.service

3. Da der Dienst slapd als Benutzer ldap ausgeführt wird (was Sie mit ps -e -o pid,uname,comm | grep slapd überprüfen können), sollte dieser Benutzer das Verzeichnis /var/lib/ldap besitzen, damit der Server Einträge ändern kann, die von administrativen Tools erstellt wurden, die nur als root ausgeführt werden können (dazu gleich mehr).

Bevor Sie den Besitz dieses Verzeichnisses rekursiv ändern, kopieren Sie die Beispieldatenbankkonfigurationsdatei für slapd hinein:

# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
# chown -R ldap:ldap /var/lib/ldap

4. Legen Sie einen OpenLDAP-Administrationsbenutzer an und weisen Sie ein Passwort zu:

# slappasswd

wie im nächsten Bild gezeigt:

Set LDAP Admin Password

und erstellen Sie eine LDIF-Datei (ldaprootpasswd.ldif) mit folgendem Inhalt:

dn: olcDatabase={0}config,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

wo:

  1. PASSWORD der gehashte String ist, der zuvor erhalten wurde.
  2. cn=config gibt globale Konfigurationsoptionen an.
  3. olcDatabase gibt einen spezifischen Datenbankinstanznamen an und befindet sich typischerweise innerhalb von /etc/openldap/slapd.d/cn=config.

Unter Bezugnahme auf den zuvor bereitgestellten theoretischen Hintergrund fügt die Datei ldaprootpasswd.ldif einen Eintrag in das LDAP-Verzeichnis ein. In diesem Eintrag stellt jede Zeile ein Attribut: Wert-Paar dar (wobei dn, changetype, add und olcRootPW die Attribute sind und die Zeichen rechts von jedem Doppelpunkt ihre entsprechenden Werte sind).

Sie sollten dies im weiteren Verlauf im Hinterkopf behalten, und beachten Sie bitte, dass wir dieselben Common Names (cn=) im Rest dieses Artikels verwenden, wobei jeder Schritt vom vorherigen abhängt.

5. Fügen Sie nun den entsprechenden LDAP-Eintrag hinzu, indem Sie die URI angeben, die auf den LDAP-Server verweist, wobei nur die Protokoll/Host/Port-Felder erlaubt sind.

# ldapadd -H ldapi:/// -f ldaprootpasswd.ldif 

Die Ausgabe sollte ähnlich sein wie:

LDAP Configuration

und importieren Sie einige grundlegende LDAP-Definitionen aus dem Verzeichnis /etc/openldap/schema:

# for def in cosine.ldif nis.ldif inetorgperson.ldif; do ldapadd -H ldapi:/// -f /etc/openldap/schema/$def; done
LDAP Definitions

6. Lassen Sie LDAP Ihre Domäne in seiner Datenbank verwenden.

Erstellen Sie eine weitere LDIF-Datei, die wir ldapdomain.ldif nennen werden, mit folgendem Inhalt, wobei Sie Ihre Domäne (im Domain Component dc=) und das Passwort entsprechend ersetzen:

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=Manager,dc=mydomain,dc=com" read by * none

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcSuffix
olcSuffix: dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
replace: olcRootDN
olcRootDN: cn=Manager,dc=mydomain,dc=com

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcRootPW
olcRootPW: {SSHA}PASSWORD

dn: olcDatabase={2}hdb,cn=config
changetype: modify
add: olcAccess
olcAccess: {0}to attrs=userPassword,shadowLastChange by
  dn="cn=Manager,dc=mydomain,dc=com" write by anonymous auth by self write by * none
olcAccess: {1}to dn.base="" by * read
olcAccess: {2}to * by dn="cn=Manager,dc=mydomain,dc=com" write by * read

# ldapmodify -H ldapi:/// -f ldapdomain.ldif
LDAP Domain Configuration

7. Jetzt ist es an der Zeit, einige Einträge in unserem LDAP-Verzeichnis hinzuzufügen. Attribute und Werte sind durch einen Doppelpunkt (:) in der folgenden Datei getrennt, die wir baseldapdomain.ldif nennen werden:

dn: dc=mydomain,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: mydomain com
dc: mydomain

dn: cn=Manager,dc=mydomain,dc=com
objectClass: organizationalRole
cn: Manager
description: Directory Manager

dn: ou=People,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: People

dn: ou=Group,dc=mydomain,dc=com
objectClass: organizationalUnit
ou: Group

Fügen Sie die Einträge dem LDAP-Verzeichnis hinzu:

# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f baseldapdomain.ldif
Add LDAP Domain Attributes and Values

8. Erstellen Sie einen LDAP-Benutzer namens ldapuser (adduser ldapuser), erstellen Sie dann die Definitionen für eine LDAP-Gruppe in ldapgroup.ldif.

# adduser ldapuser
# vi ldapgroup.ldif

Fügen Sie folgenden Inhalt hinzu.

dn: cn=Manager,ou=Group,dc=mydomain,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 1004

wo gidNumber die GID in /etc/group für ldapuser ist) und laden Sie es:

# ldapadd -x -W -D "cn=Manager,dc=mydomain,dc=com" -f ldapgroup.ldif

9. Fügen Sie eine LDIF-Datei mit den Definitionen für den Benutzer ldapuser hinzu (ldapuser.ldif):

dn: uid=ldapuser,ou=People,dc=mydomain,dc=com
objectClass: top
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
cn: ldapuser
uid: ldapuser
uidNumber: 1004
gidNumber: 1004
homeDirectory: /home/ldapuser
userPassword: {SSHA}fiN0YqzbDuDI0Fpqq9UudWmjZQY28S3M
loginShell: /bin/bash
gecos: ldapuser
shadowLastChange: 0
shadowMax: 0
shadowWarning: 0

und laden Sie es:

# ldapadd -x -D cn=Manager,dc=mydomain,dc=com -W -f ldapuser.ldif
LDAP User Configuration

Ebenso können Sie den Benutzereintrag, den Sie gerade erstellt haben, löschen:

# ldapdelete -x -W -D cn=Manager,dc=mydomain,dc=com "uid=ldapuser,ou=People,dc=mydomain,dc=com"

10. Erlauben Sie die Kommunikation durch die Firewall:

# firewall-cmd --add-service=ldap

11. Zuletzt, aber nicht zuletzt, ermöglichen Sie dem Client, sich über LDAP zu authentifizieren.

Um uns in diesem letzten Schritt zu helfen, werden wir das Dienstprogramm authconfig verwenden (eine Schnittstelle zur Konfiguration von Systemauthentifizierungsressourcen).

Mit dem folgenden Befehl wird das Home-Verzeichnis für den angeforderten Benutzer erstellt, falls es nach erfolgreicher Authentifizierung gegen den LDAP-Server nicht existiert:

# authconfig --enableldap --enableldapauth --ldapserver=rhel7.mydomain.com --ldapbasedn="dc=mydomain,dc=com" --enablemkhomedir --update
LDAP Client Configuration

Zusammenfassung

In diesem Artikel haben wir erklärt, wie man eine grundlegende Authentifizierung gegen einen LDAP-Server einrichtet. Um das im vorliegenden Leitfaden beschriebene Setup weiter zu konfigurieren, verweisen Sie bitte auf Kapitel 13 – LDAP-Konfiguration im RHEL 7 Systemadministrator-Handbuch und achten Sie besonders auf die Sicherheitseinstellungen unter Verwendung von TLS.

Fühlen Sie sich frei, etwaige Fragen über das Kommentarformular unten zu stellen.

Source:
https://www.tecmint.com/setup-ldap-server-and-configure-client-authentication/