LDAP oder Lightweight Directory Access Protocol ermöglicht es jedem, Organisationen, Personen und andere Ressourcen wie Dateien und Geräte in einem Netzwerk (öffentlich/privat) zu lokalisieren und eine Verbindung zu ihnen herzustellen. LDAP folgt dem X.500-Standard, einem Standard für Verzeichnisdienste in einem Netzwerk, das normalerweise das übliche Client/Server-Paradigma verwendet. LDAP ist leichter, da es in seiner ursprünglichen Version keine Sicherheitsfunktionen enthielt. Die primäre Verwendung von Verzeichnisdiensten besteht darin, Benutzer- und Objektdaten in einem zentralen System zu speichern und diese Daten anderen Anwendungen hauptsächlich zur Authentifizierung oder als Adressbuch zur Verfügung zu stellen, und dies können wir mit einem OpenLDAP-Server bewerkstelligen. In diesem Artikel wird beschrieben, wie Sie einen OpenLDAP-Server einrichten und eine Client-Workstation mit dem Lightweight-Verzeichniszugriffsprotokoll in Ubuntu 16.04 authentifizieren
In diesem Tutorial wird beschrieben, wie Sie den OpenLDAP-Server einrichten und die Client-Workstation mit dem Lightweight-Verzeichniszugriffsprotokoll in Ubuntu 16.04 authentifizieren.
Verwendung von LDAP
→LDAP hält Benutzer und andere Netzwerkobjekte in einer zentralen Datenbank.
→LDAP speichert Informationen wie Klartextinformationen, Bilder, Binärdaten, Public-Key-Zertifikate in der zentralen Datenbank.
→LDAP bietet Authentifizierungs- und Autorisierungsdienste wie das Login-Management.
→LDAP kann auch DNS-Einträge in seiner Datenbank speichern.
→LDAP kann wie ein Verzeichnisdienst für Gelbe Seiten für jede Organisation verwendet werden.
LDAP-Terminologie
LDAP-Terminologien sind Teile der X.500-Verzeichnisspezifikation, die Knoten in einem LDAP-Verzeichnis definiert.
CN CommonName
L localityName
ST stateOrProvinceName
O Organisationsname
Name der Organisationseinheit der Organisationseinheit
C Ländername
STRASSE StraßeAdresse
DC-Domänenkomponente
UID-Benutzer-ID
DN Distinguished Name
Der letzte DN (Distinguished Name) ist eine Reihe von durch Kommas getrennten Schlüssel/Wert-Paaren, die verwendet werden, um Einträge in der Verzeichnishierarchie eindeutig zu identifizieren. Der DN ist eigentlich der vollständig qualifizierte Name des Eintrags. zB Die Zeichenfolge “CN=India,OU=Distribution Groups, DC=gp, DC=gl, DC=linoxide, DC=com” ist ein Pfad aus einer hierarchischen Struktur namens Verzeichnisinformationsbaum und sollte von rechts (Wurzel) nach links (Blatt) gelesen werden.
In diesem Artikel richten wir den OpenLDAP-Server in Ubuntu 16 ein und konfigurieren einen OpenLDAP-Client, der Anmeldeinformationen vom Server abruft und die Benutzer authentifiziert.
IP Adresse | |
OpenLDAP-Server | 10.0.0.196 |
OpenLDAP-Client | 10.0.0.33 |
OpenLDAP-Server installieren
Installieren Sie OpenLDAP und seine Dienstprogramme mit apt-get und aktivieren Sie es während des Starts. Während der Installation wird nach der Angabe gefragt admin Passwort.
# sudo apt-get update
# apt-get install slapd ldap-utils
# systemctl enable slapd
Überprüfen Sie mit netstat, ob slapd auf dem Port Nr. 389 läuft
# netstat -pltn
Ubuntu 16 wird standardmäßig mit Firewall-UFW ausgeliefert. Wenn UFW aktiviert ist, öffnen Sie den Port Nr. 389 mit den folgenden Befehlen.
# sudo ufw allow 389/tcp
# sudo ufw reload
Das OpenLDAP-Paket wurde installiert und jetzt werden wir alle Standardeinstellungen neu konfigurieren, die mit Ubuntu geliefert werden. Führen Sie den folgenden Befehl aus, um das Paketkonfigurationstool aufzurufen.
# sudo dpkg-reconfigure slapd
Das Paketkonfigurationstool stellt eine Reihe von Fragen zur Neukonfiguration von OpenLDAP
→OpenLDAP-Serverkonfiguration auslassen?
→DNS-Domainname: linoxide.com
→Name der Organisation: Linoxid
→Enter Passwort und bestätigen Sie es: Passwort
→Zu verwendendes Datenbank-Backend: HDB
→Möchten Sie, dass die Datenbank entfernt wird, wenn slapd gelöscht wird?
→Alte Datenbank verschieben?
→ LDAPv2-Protokoll zulassen?
OpenLDAP neu starten
# systemctl restart slapd
Sie können die ändern admin Passwort für OpenLDAP zu einem späteren Zeitpunkt mit dem folgenden Befehl.
# ldappassword
Zu diesem Zeitpunkt haben wir den OpenLDAP-Server installiert und neu konfiguriert. So finden Sie den Eintrag für admin in der OpenLDAP-Datenbank verwenden wir den Befehl ldapsearch. ldapsearch fragt nach admin Passwort, das wir bei der Neukonfiguration von OpenLDAP bereitgestellt haben.
# ldapsearch -x -W -D cn=admin,dc=linoxide,dc=com -b dc=linoxide,dc=com -LLL
Enter LDAP Password:
dn: dc=linoxide,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: linoxide
dc: linoxide
dn: cn=admin,dc=linoxide,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword:: e1NTSEF9MkdIK2p1enlxQ3hFNmtMSE56TUE5NzZzOFQxVGdxSUE=
Organisationseinheit (OU) hinzufügen
Um OU hinzuzufügen, erstellen wir eine LDIF-Datei (LDAP Data Interchange Format), das Standardtextformat zum Austausch von Informationen vom LDAP-Server. Fügen Sie eine Organisationseinheit mit dem Namen “Gruppen” hinzu.
# vi ou_group.ldif
dn: ou=groups,dc=linoxide,dc=com
changetype: add
objectClass: organizationalUnit
objectClass: top
ou: groups
Wir verwenden ldapadd, um die obige Organisationseinheit hinzuzufügen.
# ldapadd -W -D "cn=admin,dc=linoxide,dc=com" -f ou_group.ldif
Organisationseinheit (OU) ändern
Um eine Organisationseinheit zu ändern, erstellen Sie eine ldif-Datei mit dem folgenden Inhalt. In diesem example, fügen wir der bestehenden OU einen Eintrag für die Postleitzahl hinzu.
# vi modify_ou.ldif
dn: ou=groups,dc=linoxide,dc=com
changetype: modify
add: postalCode
postalCode: 788109
-
Verwenden Sie ldapmodify, um die OU zu ändern
# ldapmodify -x -W -D "cn=admin,dc=linoxide,dc=com" -f modify_ou.ldif
Enter LDAP Password:
modifying entry "ou=groups,dc=linoxide,dc=com"
Organisationseinheit (OU) löschen
Um eine Organisationseinheit zu löschen, verwenden Sie ldapdelete und geben Sie den Distinguished Name für die OU an
# ldapdelete -W -D "cn=admin,dc=linoxide,dc=com" "ou=groups,dc=linoxide,dc=com"
Enter LDAP Password:
Gruppen hinzufügen
Um eine Posix-Gruppe hinzuzufügen, erstellen wir eine LDIF-Datei dafür.
# vi irc_users.ldif
dn: cn=ircusers,ou=groups,dc=linoxide,dc=com
objectClass: posixGroup
objectClass: top
cn: ircusers
gidNumber: 4000
Verwenden Sie den Befehl ldapadd wie zuvor, um die Gruppe hinzuzufügen
# ldapadd -x -W -D "cn=admin,dc=linoxide,dc=com" -f irc_users.ldif
Enter LDAP Password:
adding new entry "cn=ircusers,ou=groups,dc=linoxide,dc=com"
Gruppen ändern
Definieren Sie die ldif-Datei zum Ändern von Gruppen, wir fügen ‘Beschreibung’ für die vorhandene ircusers-Gruppe hinzu.
# vi modify_irc_users.ldif
dn: cn=ircusers,ou=groups,dc=linoxide,dc=com
changetype: modify
add: description
description: Groups under OU
Verwenden Sie ldapmodify, um die Gruppe zu ändern
# ldapmodify -x -W -D "cn=admin,dc=linoxide,dc=com" -f modify_irc_users.ldif
Enter LDAP Password:
modifying entry "cn=ircusers,ou=groups,dc=linoxide,dc=com"
Gruppen löschen
Um eine Gruppe zu löschen, verwenden Sie ldapdelete und geben Sie den eindeutigen Namen für die Gruppe an.
# ldapdelete -W -D "cn=admin,dc=linoxide,dc=com" "cn=ircusers,ou=groups,dc=linoxide,dc=com"
Enter LDAP Password:
Benutzer hinzufügen
Generieren Sie zunächst das SSHA-Passwort für den Benutzer mit slappasswd
# slappasswd -h {SSHA} -s mypass
{SSHA}d9NeiNx4RLSEtXNuMxq7+jWK/5yxwCWT
Als nächstes erstellen Sie eine ldif-Datei für einen Benutzer
# vi mike_user.ldif
dn: uid=mike,ou=groups,dc=linoxide,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: mike
sn: smith
givenName: mike
cn: mike
uidNumber: 4000
gidNumber: 4000
userPassword: {SSHA}d9NeiNx4RLSEtXNuMxq7+jWK/5yxwCWT
loginShell: /bin/bash
homeDirectory: /home/mike
Stellen Sie sicher, dass Sie die richtige Gruppen-ID-Nummer (gidNumber) angeben, die in unserem Fall 4000 beträgt. Fügen Sie den obigen Benutzer mit dem Befehl ldapadd hinzu.
# ldapadd -x -W -D "cn=admin,dc=linoxide,dc=com" -f mike_user.ldif
Enter LDAP Password:
adding new entry "uid=mike,ou=users,dc=linoxide,dc=com"
Benutzer löschen
Um einen Benutzer zu löschen, verwenden Sie den Befehl ldapdelete
# ldapdelete -W -D "cn=admin,dc=linoxide,dc=com" "uid=mike,ou=groups,dc=linoxide,dc=com"
Überprüfen Sie mit dem folgenden Befehl, ob der Eintrag gelöscht wurde.
# ldapsearch -x -b "dc=linoxide,dc=com"
Benutzer ändern
Um einen Benutzer zu ändern, erstellen Sie eine ldif-Datei und verwenden Sie dann ldapmodify, um dies zu erreichen.
# vi modify_mike.ldif
dn: uid=mike,ou=groups,dc=linoxide,dc=com
changetype: modify
replace: smith
sn: smt
-
add: title
title: Grand Poobah
-
add: jpegPhoto
jpegPhoto: /tmp/smith.png
Führen Sie nun den Befehl ldapmodify aus
# ldapmodify -x -W -D "cn=admin,dc=linoxide,dc=com" -f modify_mike.ldif
Enter LDAP Password:
modifying entry "uid=mike,ou=users,dc=linoxide,dc=com"
OpenLDAP-Datenbank durchsuchen
Auf dem Server selbst können Sie nun überprüfen, ob Sie die Datenbank lesen können. Der folgende Befehl wird das gesamte Verzeichnis ausgeben.
# ldapsearch -x -LLL -H ldap:/// -b dc=linoxide,dc=com
dn: dc=linoxide,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: linoxide
dc: linoxide
dn: cn=admin,dc=linoxide,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
dn: ou=groups,dc=linoxide,dc=com
objectClass: organizationalUnit
objectClass: top
ou: groups
dn: ou=users,dc=linoxide,dc=com
objectClass: organizationalUnit
objectClass: top
ou: users
dn: cn=dbagrp,ou=groups,dc=linoxide,dc=com
objectClass: top
objectClass: posixGroup
gidNumber: 678
cn: dbagrp
dn: cn=ircusers,ou=groups,dc=linoxide,dc=com
objectClass: posixGroup
objectClass: top
cn: ircusers
gidNumber: 4000
dn: uid=mike,ou=users,dc=linoxide,dc=com
objectClass: inetOrgPerson
objectClass: posixAccount
objectClass: shadowAccount
uid: mike
sn: smith
givenName: mike
cn: mike
uidNumber: 4000
gidNumber: 4000
loginShell: /bin/bash
homeDirectory: /home/mike
Verwenden von phpMyAdmin
Wir haben OU, Gruppen und Benutzer über die Befehlszeile erstellt/bearbeitet/durchsucht. Sie können jedoch dasselbe mit einer Weboberfläche namens phpldapadmin tun. Der phpldapadmin wird standardmäßig zusammen mit Ubuntu ausgeliefert. Verwenden Sie apt-get, um es zu installieren.
# sudo apt-get install phpldapadmin
Bearbeiten Sie die Konfigurationsdatei für phpldapadmin, um die zuvor erstellte Verzeichnisstruktur widerzuspiegeln.
# vi /etc/phpldapadmin/config.php
$servers->setValue('server','name','My LDAP Server');
$servers->setValue('server','host','LDAP-SERVER-IP');
$servers->setValue('server','base',array('dc=linoxide,dc=com'));
$servers->setValue('login','auth_type','session');
$servers->setValue('login','bind_id','cn=admin,dc=linoxide,dc=com');
Sie können jetzt über https://LDAP-SERVER-IP/phpldapadmin auf phpldapadmin zugreifen. Melden Sie sich mit dem Benutzer als Standardverzeichnisstruktur und dem Kennwort als ‘Kennwort’ an. Um den phpldapadmin-Speicherort mit einem Passwort zu schützen, erstellen Sie einen Benutzer mit Apache utils htpasswd.
# sudo htpasswd -c /etc/apache2/htpasswd ldapadminuser
New password:
Re-type new password:
Adding password for user ldapadminuser
Fügen Sie den folgenden Abschnitt in der Hauptkonfigurationsdatei von Apache /etc/apache2/apache2.conf . an
# vi /etc/apache2/apache2.conf
<Location /phpldapadmin>
AuthType Basic
AuthName "Restricted Files"
AuthUserFile /etc/apache2/htpasswd
Require valid-user
</Location>
Neustart Apache
# systemctl restart apache2
Aktualisieren Sie die phpldapadmin-Seite, Sie sehen die Passwortabfrage, die Sie mit htpasswd utils konfiguriert haben.
OpenLDAP-Client installieren
Wir werden einige Pakete auf dem Client-Rechner installieren, damit die Authentifizierung mit einem OpenLDAP-Server korrekt funktioniert.
# apt-get install ldap-auth-client nscd
Ihnen wird eine Reihe von Fragen gestellt, die denen während der Serverkonfiguration ähneln.
→ Uniform Resource Identifier des LDAP-Servers: ldap://10.0.0.196
→ Distinguished Name der Suchbasis: dc=linoxide,dc=com
→LDAP-Version: 3
→Lokale Root-Datenbank erstellen admin:
→Erfordert die LDAP-Datenbank eine Anmeldung?
→LDAP-Konto für root: cn=admin,dc=Linoxid,dc=com
→Passwort des LDAP-Root-Kontos: Passwort
Sie können die Konfiguration jederzeit ändern, indem Sie den folgenden Befehl im Terminal ausführen.
# sudo dpkg-reconfigure ldap-auth-config
OpenLDAP-Client konfigurieren
Wir müssen die Datei /etc/nsswitch.conf bearbeiten, um die Authentifizierungsdateien über das Vorhandensein eines OpenLDAP-Servers zu informieren. Bearbeiten Sie die Datei /etc/nsswitch.conf und ändern Sie die Zeilen, die mit passwd, group, shadow beginnen, so, dass sie wie folgt aussehen.
# vi /etc/nsswitch.conf
passwd: ldap compat
group: ldap compat
shadow: ldap compat
Bearbeiten Sie /etc/pam.d/common-session und die folgende Zeile am Ende der Datei.
# vi /etc/pam.d/common-session
....................
....................
session required pam_mkhomedir.so skel=/etc/skel umask=0022
Richten Sie nss mit auth-client-config mit ldap ein
# auth-client-config -t nss -p lac_ldap
# cd /usr/share/pam-configs/
# vi mkhomedir
Name: Create home directory on login for Linoxide
Default: yes
Priority: 0
Session-Type: Additional
Session-Interactive-Only: yes
Session:
required pam_mkhomedir.so umask=0022 skel=/etc/skel
Die letzte Zeile der obigen Datei erstellt ein Home-Verzeichnis auf dem Client-Rechner, wenn sich ein LDAP-Benutzer anmeldet und kein Home-Verzeichnis hat. Aktualisieren Sie nun die Pam-Authentifizierung.
# pam-auth-update
Aktivieren Sie die Zeile “Home-Verzeichnis beim Anmelden erstellen……” und wählen Sie “Ok”. nscd neu starten.
# /etc/init.d/nscd restart
[ ok ] Restarting nscd (via systemctl): nscd.service.
Listen Sie den Eintrag der Passwortdatei mit getent auf. Die Liste enthält den LDAP-Benutzer ‘mike’, den wir zuvor auf dem Server erstellt haben.
# getent passwd
mike:x:4000:4000:mike:/home/mike:/bin/bash
Wenn Sie SSH nicht früher installiert haben, installieren Sie es mit SSH.
# apt-get install ssh
Stellen Sie sicher, dass Sie in /etc/ssh/sshd_config Folgendes auf yes gesetzt haben
PermitRootLogin yes
UsePAM yes
Verbinden Sie sich mit dem LDAP-Server über SSH
# ssh [email protected]
Eine andere Möglichkeit, die Hülle von Mike zu erhalten, ist die Verwendung von sudo auf dem Client-Rechner.
# su - mike
mike@ip-10-0-0-33:~$
Bei der Konfiguration des OpenLDAP-Servers haben wir den LDAP-Administrator mit dem Distinguished Name “cn= .” erstelltadmin,dc=linoxid,dc=com” Dieser Wert admin abgestimmt mit dem admin Gruppe, die standardmäßig in Ubuntu vorhanden ist. Die von uns erstellten LDAP-Benutzer für die admin Gruppe hat Zugriff auf die sudo Befehl, da es einen Eintrag dafür in der Datei /etc/sudoers wie unten gibt-
%admin ALL=(ALL) ALL
So widerrufen Sie den Zugriff auf sudo für die admin group, kommentieren Sie die obige Zeile, indem Sie eine Raute an den Anfang der Zeile setzen. Sie können auch gewähren sudo Zugriff auf einen bestimmten Benutzer durch Hinzufügen von %user ALL=(ALL) ALL zur Datei /etc/sudoers.
Fazit
Die Vorteile der Verwendung des OpenLDAP-Servers bestehen darin, dass Informationen einer gesamten Organisation in einem zentralen Repository abgelegt werden können. LDAP kann als zentrales Verzeichnis verwendet werden, auf das von überall im Netzwerk aus zugegriffen werden kann, anstatt Benutzer jeder Gruppe separat zu verwalten. Auch LDAP unterstützt Secure Sockets Layer (SSL) und Transport Layer Security (TLS), sodass die sensiblen Daten vor neugierigen Blicken geschützt werden können. Durchsuche OpenLDAP-Dokumentation um mehr über die OpenLDAP-Verwaltung zu erfahren.