Ubuntu 20.04 - LDAP Client Authentifizierung einrichten

Aus Twilight-Networks Wiki
Wechseln zu:Navigation, Suche

Vorwort

Diese Dokumentation beschreibt den Installationsvorgang und Einrichtung der LDAP-Authentifizierung unter Ubuntu.

Bitte vergewissern Sie sich, dass Ihr System über die nötigen Voraussetzungen verfügt, wie in der Infobox beschrieben. Weiterhin sind Grundkenntnisse im Umgang mit Linux erforderlich, da die Vorgehensweise, wie sie hier beschrieben ist, in manchen Teilen abweichen kann. Kein System ist wie das Andere. Die Dokumentation wurde sorgfältig von mir geprüft. Dennoch kann ich keinerlei Haftung für Schäden an Ihrem System oder eine Gewährleistung übernehmen. Bitte verwenden Sie diese Dokumentation auf eigene Gefahr.


Ubuntu 20.04 - LDAP Client Authentifizierung einrichten
Stand: Stand 04/2021



Verwendete Software:


Voraussetzungen:

  • funktionierende Back-End LDAP-Server, z.B.:


Weitere, empfohlene Dokumentationen:












Was muss ich in der Konfiguration anpassen?

Einige Parameter müssen auf Ihre Umgebung angepasst werden. Im Verlauf dieser Dokumentation müssen Sie nur die Parameter anpassen, die in der nachfolgenden Tabelle aufgelistet sind. Sie können also ganz einfach durch die Funktion "Suchen und Ersetzen" (STRG + H), die Konfigurationsdateien auf Ihre Umgebung anpassen. Das Gleiche gilt für auszuführende Kommandos.

Folgende Parameter werden verwendet:

Wert Hinweis
Allgemein:
Back-End LDAP-Server ldap.example.com Ersetzen Sie diesen Wert durch den FQDN Ihres Back-End LDAP-Server.
LDAP:
RootBindDN CN=Admin,CN=Users,DC=example,DC=com Ersetzen Sie diesen Wert durch die BindDN Ihres Back-End LDAP-Server.
BindDN CN=ReadOnly,CN=Users,DC=example,DC=com Ersetzen Sie diesen Wert durch die BindDN Ihres Back-End LDAP-Server.
BindPW SicheresPasswortVerwenden! Ersetzen Sie diesen Wert durch das Bind-Passwort Ihres Back-End LDAP-Server.
Base DC=example,DC=com Ersetzen Sie diesen Wert durch die Base Ihres Back-End LDAP-Server.



Konfigurations-Dateien werden immer nach dem gleichen Muster erstellt. Unter jeder Datei, die eine Anpassung erfordert, finden Sie die nötigen Hinweise.
Dateien, die zwar Parameter aber keine eigentliche Konfiguration enthalten, werden nach dem vorgegebenen Syntax erstellt.

Beispiel:
Im folgenden Beispiel ist die Datei /home/beispiel.conf zu erstellen und der Parameter domain anzupassen.

Erstellen Sie eine neue Datei /home/beispiel.conf mit folgendem Inhalt:

# nano /home/beispiel.conf
beispiel.conf
url		= www.twlnet.com
content	= Dokumentationen

domain	= example.com
owner	= root
Anzupassende Parameter:
# beispiel.conf
[...]
domain	= example.com
[...]



Im folgenden Beispiel ist die Datei /home/beispiel.map mit einer Liste Ihrer E-Mail-Adressen zu erstellen.

Erstellen Sie eine neue Datei /home/beispiel.map nach folgendem Syntax:

# nano /home/beispiel.map
beispiel.map
benutzer1@example.com
benutzer2@example.com
benutzer3@example.com











Server vorbereiten

Root-Rechte einräumen

Während der gesamten Dokumentation werden Root-Rechte benötigt. Um auf das Voranstellen von sudo zu verzichten, verschaffen Sie sich für die gesamte Sitzung erhöhte Rechte mit:

# sudo -i


Update durchführen

Bringen Sie den Server auf den aktuellen Patchstand:

# apt update && apt upgrade


Software herunterladen und installieren

Installieren Sie die benötigte Software:

# apt install ldap-auth-client ldap-auth-config libnss-ldap libpam-ldap

Der Konfigurationsdialog von ldap-auth-config kann ignoriert werden.
Eingaben aus dem Konfigurationsdialog werden nicht berücksichtigt, da die Konfiguration im Verlauf dieser Dokumentation manuell erstellt wird.

Ldap-auth-config ignore.png



LDAP Client-Authentifizierung einrichten

Konfiguration erstellen

Die Datei /etc/ldap.conf ist die zentrale Konfigurations-Datei und in zwei Abschnitte unterteilt.

Sie beinhaltet sowohl die Konfiguration von PAM (pam_ldap) als auch die von Name Service Switch (nss_ldap). PAM ist dabei für die Authentifizierung von Benutzern zuständig, während Name Service Switch die lokalen Datenquellen passwd, group, etc. um LDAP ergänzt.

Es würde den Umfang dieser Dokumentation sprengen, wenn ich auf die gesamte Konfiguration der ldap.conf eingehen würde. Alle Konfigurations-Parameter finden Sie in den Ubuntu-Manpages für pam_ldap und nss_ldap.

In unserem Setup erstellen wir eine Konfiguration für die Kommunikation mit einem Samba4-Domain-Controller (Microsoft Active-Directory):

Abschnitt pam_ldap

  • uri ldap://ldap.example.com
    Die Adresse des LDAP-Back-End-Servers (ldap://...)


  • base DC=example,DC=com
    Der Punkt, wo im Verzeichnisbaum abwärts die Suche nach Objekten gestartet werden soll.


  • rootbinddn CN=Admin,CN=Users,DC=example,DC=com
    Der Benutzer, der den Zugriff auf den LDAP-Back-End-Server durchführen soll. Damit Passwörter für Benutzer geändert werden können, muss dieser Benutzer über Schreibrechte im Verzeichnis verfügen. Aus Sicherheitsgründen wird das Password in der Datei ldap.secret im gleichen Verzeichnis gespeichert.


  • ldap_version 3
    Die verwendete LDAP-Version.


  • ssl start_tls
    SSL-Konfiguration. Mögliche Werte sind: on, off oder starttls


  • pam_filter &(objectClass=posixAccount)(memberOf=CN="Domain Admins",CN=Users,DC=example,DC=com)
    Attributwert-Filter, der mit der Benutzereingabe übereinstimmen muss. In unserem Beispiel muss der Benutzer das Attribut posixAccount und die Gruppenzugehörigkeit Domain Admins enthalten, um sich anmelden zu können.


  • pam_login_attribute sAMAccountName
    Das Attribut, mit dem der Benutzeranmeldename überbeistimmen muss. Im Microsoft Active-Directory wird das Attribut sAMAccountName verwendet.


  • pam_password ad
    Das Protokoll, welches für einen Passwortwechsel verwendet werden soll.



Abschnitt nss_ldap

  • binddn CN=ReadOnly,CN=Users,DC=example,DC=com
    Der Benutzer, der den Zugriff auf den LDAP-Back-End-Server durchführen soll. Da für nss_ldap keine Schreibrechte erforderlich sind, sollte diese Benutzer auch nur über Leserechte im Verzeichnis verfügen.
    Wichtig! Auch wenn der gleiche Benutzer wie im Abschnitt pam_ldap verwendet wird, muss er unbedingt auch hier angegeben werden, da der Zugriff durchnss_ldap ansonsten anonym durchgeführt wird.


  • bindpw SicheresPasswortVerwenden!
    Da der Benutzer nicht über erhöhte Rechte im Verzeichnis verfügt, kann das Passwort in der Datei konfiguriert werden.


  • nss_base_group DC=example,DC=com?sub
    Der Punkt, wo im Verzeichnisbaum abwärts die Suche nach Gruppen gestartet werden soll. Der Zusatz ...?sub gibt an, dass in diesem Objekt und überall darunter (sub) gesucht werden soll.


  • nss_map_attribute uid sAMAccountName
    Ändert die Zuordnung von uid zu sAMAccountName. Im Microsoft Active-Directory wird das Attribut sAMAccountName verwendet.


  • nss_map_objectclass posixGroup group
    Ändert die Zuordung der Objekt-Klasse posixGroup zu group, da im Microsoft Active-Directory posixGroup nicht bekannt ist.


  • nss_map_attribute uniqueMember member
    Ändert die Zuordung von uniqueMember zu member, da im Microsoft Active-Directory uniqueMember nicht bekannt ist.


  • nss_map_attribute homeDirectory unixHomeDirectory
    Ändert die Zuordung von homeDirectory zu unixHomeDirectory, da im Microsoft Active-Directory unter homeDirectory normalerweise ein UNC-Pfad angegeben wird.





Benennen Sie zunächst die /etc/ldap.conf um, damit Sie eine Sicherheitskopie der Original-Datei haben:

# mv /etc/ldap.conf /etc/ldap.conf.bak


Erstellen Sie eine neue Datei ldap.conf mit folgendem Inhalt:

# nano /etc/ldap.conf
ldap.conf
# pam_ldap
uri 					ldap://ldap.example.com
base 					DC=example,DC=com
rootbinddn 				CN=Admin,CN=Users,DC=example,DC=com

ldap_version 			3
ssl 					start_tls

pam_filter 				&(objectClass=posixAccount)(memberOf=CN="Domain Admins",CN=Users,DC=example,DC=com)
pam_login_attribute 	sAMAccountName
pam_password 			ad


# nss_ldap
binddn 					CN=ReadOnly,CN=Users,DC=example,DC=com
bindpw					SicheresPasswortVerwenden!

nss_base_group			DC=example,DC=com?sub
nss_map_attribute 		uid sAMAccountName
nss_map_objectclass 	posixGroup group
nss_map_attribute		uniqueMember member
nss_map_attribute		homeDirectory unixHomeDirectory
Anzupassende Parameter:
# ldap.conf
[...]
# pam_ldap
uri 					ldap://ldap.example.com
base 					DC=example,DC=com
rootbinddn 				CN=Admin,CN=Users,DC=example,DC=com
[...]
# nss_ldap
binddn 					CN=ReadOnly,CN=Users,DC=example,DC=com
bindpw					SicheresPasswortVerwenden!
[...]
nss_base_group			DC=example,DC=com?sub
[...]



Passwort-Datei für pam_ldap erstellen

Erstellen Sie die Passwort-Datei für pam_ldap und passen Sie die Zugriffsrechte an:
(Ersetzen Sie SicheresPasswortVerwenden! durch Ihr LDAP-Back-End Passwort)

# echo 'SicheresPasswortVerwenden!' > /etc/ldap.secret
# chmod 600 /etc/ldap.secret



Name Service Switch für nss_ldap einrichten

Editieren Sie Datei /etc/nsswitch.conf und fügen Sie die Parameter ldap hinzu:

# nano /etc/nsswitch.conf
Anzupassende Parameter:
# nsswitch.conf
[...]
passwd:         files ldap systemd 
group:          files ldap systemd 
shadow:         files ldap
[...]



Group-Mapping (pam_group) einrichten

Über das Modul pam_group werden Benutzern lokale Unix-Gruppen (z.B. sudo) zugewiesen.

Die Konfiguration findet in der Datei /etc/security/group.conf statt.

Auch hier gehe ich nur auf die für unser Setup relevanten Parameter ein. Alle Konfigurations-Parameter finden Sie in der Ubuntu-Manpage für pam_group.

Der Syntax für die Gruppen-Zuweisung ist folgender:

services;ttys;users;time;groups

  • services
    PAM-Service(s) für den die Regel gelten soll.
  • ttys
    Terminal(s) für das die Regel gelten soll.
  • users
    Benutzer oder Gruppe(n) für welche die Regel gelten soll.
  • time
    Der Zeitraum, innerhalb dessen die Regel gelten soll.
  • groups
    Gruppen, die entsprechend der Kriterien zugewiesen werden sollen.



In unserem Setup ergeben sich folgende Gruppenzuweisungen:

Alle Benutzer, unabhängig ihrer Gruppenzugehörigkeit, erhalten die lokalen Unix-Gruppen audio, cdrom, plugdev und video:

*;*;*;Al0000-2400;audio cdrom plugdev video

  • *
    Alle PAM-Services
  • *
    Alle Terminals
  • *
    Alle Benutzer oder Gruppen
  • Al0000-2400
    An allen Tagen der Woche (Al) in der Zeit von 00:00-24:00 Uhr (0000-2400)
  • audio cdrom plugdev video
    Erhalten diese lokalen Unix-Gruppen.



Alle Mitglieder der Gruppe Domain Admins erhalten die lokalen Unix-Gruppen sudo, adm, dip und lpadmin:

*;*;%Domain Admins;Al0000-2400;sudo adm dip lpadmin

  • *
    Alle PAM-Services
  • *
    Alle Terminals
  • %Domain Admins
    Nur Mitglieder der Gruppe Domain Admins
  • Al0000-2400
    An allen Tagen der Woche (Al) in der Zeit von 00:00-24:00 Uhr (0000-2400)
  • audio cdrom plugdev video
    Erhalten diese lokalen Unix-Gruppen.





Benennen Sie zunächst die /etc/security/group.conf um, damit Sie eine Sicherheitskopie der Original-Datei haben:

# mv /etc/security/group.conf /etc/security/group.conf.bak


Erstellen Sie eine neue Datei group.conf nach folgendem Syntax:

# nano /etc/security/group.conf
group.conf
*;*;*;Al0000-2400;audio cdrom plugdev video
*;*;%Domain Admins;Al0000-2400;sudo adm dip lpadmin



PAM-Konfigurationen erstellen

pam_group

Erstellen Sie eine neue Datei ldap_groups mit folgendem Inhalt:

# nano /usr/share/pam-configs/ldap_groups
ldap_groups
Name: Add local Groups from /etc/security/group.conf
Default: yes
Priority: 900
Auth-Type: Primary
Auth:
        required                        pam_group.so



pam_mkhomedir

Editieren Sie die Datei /usr/share/pam-configs/mkhomedir und ändernd Sie fügen Sie folgendes hinzu:

# nano /usr/share/pam-configs/mkhomedir
Anzupassende Parameter:
# mkhomedir
[...]
	optional	pam_mkhomedir.so skel=/etc/skel umask=077
[...]


Alternativ können Sie auch folgende Sed-Anweisung verwenden:

# sed -i 's/pam\_mkhomedir\.so/pam\_mkhomedir\.so\ skel\=\/etc\/skel\ umask\=077/g' /usr/share/pam-configs/mkhomedir



PAM-Konfigurationen anwenden

Aktivieren Sie PAM-Konfigurationen mit folgendem Kommando:

# pam-auth-update

Wählen Sie im Fenster PAM-Konfiguration folgende Parameter aus und bestätigen Sie mit der Enter-Taste:

Pam-auth-update ldap 01.png




Abschluss und Test

Melden Sie sich mit einem LDAP-Account an und prüfen Sie mit id die Gruppenzugehörigkeit:

$ id

Die Ausgabe sollte für Domain Admins in etwa so aussehen:

uid=65546(testuser) gid=2513(Domain Users) Gruppen=2513(Domain Users),4(adm),24(cdrom),27(sudo),29(audio),30(dip),44(video),46(plugdev),2512(Domain Admins)


Alternativ kann die Gruppenzugehörigkeit auch mit groups geprüft werden:

$ groups

Die Ausgabe sollte für Domain Admins in etwa so aussehen:

Domain Users adm cdrom sudo audio dip video plugdev Domain Admins