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


Wir beginnen diesen Artikel mit einigen LDAP-Grundlagen (was es ist, wo es verwendet wird und warum) und zeigen, wie ein LDAP-Server eingerichtet und ein Client so konfiguriert wird, dass er sich mit Red Hat Enterprise Linux 7-Systemen dagegen authentifiziert.

Wie wir sehen werden, gibt es mehrere andere mögliche Anwendungsszenarien, aber in diesem Handbuch konzentrieren wir uns ausschließlich auf die LDAP-basierte Authentifizierung. Beachten Sie außerdem, dass wir aufgrund der Größe des Themas hier nur die Grundlagen behandeln werden. Weitere Informationen finden Sie in der Dokumentation in der Zusammenfassung.

Aus dem gleichen Grund werden Sie feststellen, dass ich mich der Kürze halber entschlossen habe, einige Verweise auf Manpages von LDAP-Tools wegzulassen, aber die entsprechenden Erklärungen sind in unmittelbarer Nähe (z. B. man ldapadd).

Das heißt, fangen wir an.

Unsere Testumgebung besteht aus zwei RHEL 7-Boxen:

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 die in Teil 12: Automatisieren von RHEL 7-Installationen installierte Maschine mit Kickstart als Client verwenden.

LDAP steht für Lightweight Directory Access Protocol und besteht aus einer Reihe von Protokollen, mit denen ein Client über ein Netzwerk auf zentral gespeicherte Informationen zugreifen kann (z. B. ein Verzeichnis mit Anmeldeshells, absolute Pfade zu Basisverzeichnissen und andere typische Systembenutzerinformationen). Zum Beispiel), die von verschiedenen Orten aus zugänglich sein oder einer großen Anzahl von Endbenutzern zugänglich sein sollten (ein anderes Beispiel wäre ein Verzeichnis mit Privatadressen und Telefonnummern aller Mitarbeiter in einem Unternehmen).

Wenn Sie solche (und mehr) Informationen zentral aufbewahren, können sie von jedem, dem die Berechtigung zur Verwendung erteilt wurde, einfacher verwaltet und abgerufen werden.

Das folgende Diagramm bietet ein vereinfachtes LDAP-Diagramm und wird im Folgenden ausführlicher beschrieben:

Erläuterung des obigen Diagramms im Detail.

  1. An entry in a LDAP directory represents a single unit or information and is uniquely identified by what is called a Distinguished Name.
  2. An attribute is a piece of information associated with an entry (for example, addresses, available contact phone numbers, and email addresses).
  3. Each attribute is assigned one or more values consisting in a space-separated list. A value that is unique per entry is called a Relative Distinguished Name.

Lassen Sie uns mit den Server- und Client-Installationen fortfahren.

Installieren und Konfigurieren eines LDAP-Servers und -Clients

In RHEL 7 wird LDAP von OpenLDAP implementiert. Verwenden Sie zum Installieren des Servers und des Clients die folgenden Befehle:

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

Sobald die Installation abgeschlossen ist, sehen wir uns einige Dinge an. Die folgenden Schritte sollten nur auf dem Server ausgeführt werden, sofern nicht ausdrücklich anders angegeben:

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

# setsebool -P allow_ypbind=0 authlogin_nsswitch_use_ldap=0

Wenn allow_ypbind für die LDAP-basierte Authentifizierung erforderlich ist und authlogin_nsswitch_use_ldap von einigen Anwendungen möglicherweise benötigt wird.

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 beenden können:

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

3. Da der slapd-Dienst als ldap-Benutzer 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 dies kann Sie können Einträge ändern, die von Verwaltungstools erstellt wurden, die nur als Root ausgeführt werden können (mehr dazu in einer Minute).

Kopieren Sie die Beispieldatenbank-Konfigurationsdatei für slapd in das Verzeichnis, bevor Sie den Besitz dieses Verzeichnisses rekursiv ändern:

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

4. Richten Sie einen OpenLDAP-Administrator ein und weisen Sie ein Kennwort zu:

# slappasswd

wie im nächsten Bild gezeigt:

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 is the hashed string obtained earlier.
  2. cn=config indicates global config options.
  3. olcDatabase indicates a specific database instance name and can be typically found inside /etc/openldap/slapd.d/cn=config.

Unter Bezugnahme auf den zuvor bereitgestellten theoretischen Hintergrund fügt die Datei ldaprootpasswd.ldif einen Eintrag zum LDAP-Verzeichnis hinzu. In diesem Eintrag repräsentiert jede Zeile ein Attribut: Wert-Paar (wobei dn, changetype, add und olcRootPW die Attribute sind und die Zeichenfolgen rechts von jedem Doppelpunkt die entsprechenden Werte sind).

Beachten Sie dies möglicherweise, wenn Sie fortfahren. Beachten Sie, dass wir im weiteren Verlauf dieses Artikels dieselben allgemeinen Namen (cn u003d) verwenden, wobei jeder Schritt vom vorherigen abhängt .

5. Fügen Sie nun den entsprechenden LDAP-Eintrag hinzu, indem Sie den URI angeben, der sich auf den LDAP-Server bezieht, auf dem nur die Felder Protokoll/Host/Port zulässig sind.

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

Die Ausgabe sollte ähnlich sein wie:

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

6. Lassen Sie LDAP Ihre Domain in der Datenbank verwenden.

Erstellen Sie eine weitere LDIF-Datei, die wir ldapdomain.ldif nennen, mit den folgenden Inhalten, und ersetzen Sie Ihre Domain (in der Domain-Komponente dc u003d) und das entsprechende Kennwort:

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

Laden Sie es dann wie folgt:

# ldapmodify -H ldapi:/// -f ldapdomain.ldif

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

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 zum LDAP-Verzeichnis hinzu:

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

8. Erstellen Sie einen LDAP-Benutzer mit dem Namen ldapuser (adduser ldapuser) und 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

Dabei ist gidNumber die GID in/etc/group für ldapuser. Laden Sie sie:

# 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 ( ldapuser.ldif ) hinzu:

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 lade es:

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

Ebenso können Sie den soeben erstellten Benutzereintrag löschen:

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

10. Ermöglichen Sie die Kommunikation über die Firewall:

# firewall-cmd --add-service=ldap

11. Aktivieren Sie zu guter Letzt den Client für die Authentifizierung mithilfe von LDAP.

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

Mit dem folgenden Befehl wird das Ausgangsverzeichnis für den angeforderten Benutzer erstellt, wenn es nach erfolgreicher Authentifizierung beim LDAP-Server nicht vorhanden ist:

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

Zusammenfassung

In diesem Artikel haben wir erklärt, wie die Basisauthentifizierung für einen LDAP-Server eingerichtet wird. Weitere Informationen zum Konfigurieren des in diesem Handbuch beschriebenen Setups finden Sie in Kapitel 13 - LDAP-Konfiguration im RHEL 7-Systemadministratorhandbuch. Achten Sie dabei besonders auf die Sicherheitseinstellungen mit TLS.

Fühlen Sie sich frei, Fragen zu hinterlassen, indem Sie das Kommentarformular unten verwenden.