Active Directory-Authentifizierung
Voraussetzungen¶
- Grundverständnis von Active Directory
- Grundverständnis von LDAP
Einleitung¶
Microsofts Active Directory (AD) ist in den meisten Unternehmen das de facto Authentifizierungssystem für Windows-Systeme und für externe LDAP-angeschlossene Dienste. Es erlaubt Ihnen, Benutzer und Gruppen zu konfigurieren, sowie Zugriffskontrolle, Berechtigungen, Auto-Mount und mehr.
Während Linux mit einem AD-Cluster verbunden wird, können nicht alle der genannten Funktionen unterstützt werden, es kann jedoch Benutzer, Gruppen und Zugriffskontrolle verwalten. Es ist sogar möglich SSH-Schlüssel unter Verwendung von AD zu verteilen (durch einige Konfigurationseinstellungen auf der Linux-Seite und durch einige fortgeschrittene Optionen auf der AD-Seite).
Diese Anleitung deckt jedoch nur die Konfiguration der Authentifizierung gegen Active Directory ab und enthält keine zusätzliche Konfiguration auf der Windowsseite.
AD mit Hilfe von SSSD finden und verbinden¶
Hinweis
In dieser Anleitung wird der Domainname ad.company.local
verwendet, um
die Active Directory Domain zu simulieren. Um dieser Anleitung zu folgen, ersetzen Sie sie durch den aktuellen Domain-Namen, den Ihre AD-Domain verwendet.
Der erste Schritt auf dem Weg zu einem Linux-System in AD ist es, den AD-Cluster zu finden, um sicherzustellen, dass die Netzwerkkonfiguration auf beiden Seiten korrekt ist.
Zubereitung¶
- Stellen Sie sicher, dass die folgenden Ports für Ihren Linux-Host auf Ihrem Domain Controller offen sind:
Dienst | Port(s) | Beschreibung |
---|---|---|
DNS | 53 (TCP+UDP) | |
Kerberos | 88, 464 (TCP+UDP) | Verwendet von kadmin für die Einstellung & die Aktualisierung von Passwörtern |
LDAP | 389 (TCP+UDP) | |
LDAP-GC | 3268 (TCP) | LDAP Global Catalog - ermöglicht die Quell-Benutzer-IDs von AD zu übernehmen |
- Stellen Sie sicher, dass Sie Ihren AD Domänencontroller als DNS-Server auf Ihrem Rocky Linux Host konfiguriert haben:
Mit dem NetworkManager:
# where your primary NetworkManager connection is 'System eth0' and your AD
# server is accessible on the IP address 10.0.0.2.
[root@host ~]$ nmcli con mod 'System eth0' ipv4.dns 10.0.0.2
- Stellen Sie sicher, dass die Zeit auf beiden Seiten (AD Host und Linux System) synchronisiert ist (siehe chronyd)
Um die Zeit auf Rocky Linux zu überprüfen:
[user@host ~]$ date
Wed 22 Sep 17:11:35 BST 2021
- Installieren bitte Sie die benötigten Pakete für die AD-Verbindung auf der Linux-Seite:
[user@host ~]$ sudo dnf install realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation
Discovery¶
Jetzt sollten Sie in der Lage sein, Ihre AD-Server erfolgreich von Ihrem (Rocky) Linux-Host zu finden.
[user@host ~]$ realm discover ad.company.local
ad.company.local
type: kerberos
realm-name: AD.COMPANY.LOCAL
domain-name: ad.company.local
configured: no
server-software: active-directory
client-software: sssd
required-package: oddjob
required-package: oddjob-mkhomedir
required-package: sssd
required-package: adcli
required-package: samba-common
Die relevanten SRV-Einträge, die in Ihrem Active Directory-DNS-Dienst gespeichert sind, ermöglichen die Erkennung.
Verbindung¶
Sobald Sie Ihre Active Directory Installation vom Linux-Host gefunden haben, sollten Sie in der Lage sein mit realmd
der Domain beizutreten, welche die Konfiguration von sssd
unter Verwendung von adcli
und anderen solchen Tools orchestriert.
[user@host ~]$ sudo realm join ad.company.local
Wenn sich dieser Prozess über die Verschlüsselung mit folgender Meldung beschwert KDC has no support for this encrption type
, versuchen Sie, die globalen Verschlüsselungsrichtlinien zu aktualisieren, um ältere Verschlüsselungsalgorithmen zu zulassen:
[user@host ~]$ sudo update-crypto-policies --set DEFAULT:AD-SUPPORT
Wenn dieser Prozess erfolgreich ist, sollten Sie jetzt in der Lage sein, passwd
Informationen für einen Active Directory Benutzer zu bekommen.
[user@host ~]$ sudo getent passwd administrator@ad.company.local
administrator@ad.company.local:*:1450400500:1450400513:Administrator:/home/administrator@ad.company.local:/bin/bash
Hinweis
getent
liest Einträge von Name Service Switch Bibliotheken (NSS). Es bedeutet, dass es im Gegensatz zu passwd
oder dig
zum Beispiel verschiedene Datenbanken abgefragen werden inklusive /etc/hosts
für getent hosts
oder von sssd
im getent passwd
Fall.
realm
bietet einige interessante Optionen, die Sie verwenden können:
Option | Beschreibung |
---|---|
--computer-ou='OU=LINUX,OU=SERVERS,dc=ad,dc=company.local' | Das OU, wo das Server-Konto gespeichert werden soll |
--os-name='rocky' | Gibt den OS-Namen an, der im AD gespeichert ist |
--os-version='8' | Gibt die OS-Version an, die im AD gespeichert ist |
-U admin_username | Admin-Konto |
Authentifizierungs-Versuch¶
Jetzt sollten Ihre Benutzer in der Lage sein, sich bei Ihrem Linux-Host gegen Active Directory zu authentifizieren.
Unter Windows 10 (welches eine eigene Kopie von OpenSSH bereitstellen sollte):
C:\Users\John.Doe> ssh -l john.doe@ad.company.local linux.host
Password for john.doe@ad.company.local:
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Wed Sep 15 17:37:03 2021 from 10.0.10.241
[john.doe@ad.company.local@host ~]$
Wenn dies gelingt, haben Sie Linux erfolgreich für die Verwendung von Active Directory als Authentifizierungsquelle konfiguriert.
Einstellung der Standard-Domain¶
Bei einer vollständig standardmäßigen Einrichtung müssen Sie sich mit Ihrem AD-Konto anmelden, indem Sie die Domäne in Ihrem Benutzernamen angeben (z. B. john.doe@ad.company.local
). Wenn dies nicht das gewünschte Verhalten ist und Sie stattdessen den Domänennamen bei der Authentifizierung weglassen möchten, können Sie SSSD so konfigurieren, dass standardmäßig eine bestimmte Domäne verwendet wird.
Dies ist ein relativ unkomplizierter Vorgang, der eine Konfigurationsoptimierung in Ihrer SSSD-Konfigurationsdatei erfordert.
[user@host ~]$ sudo vi /etc/sssd/sssd.conf
[sssd]
...
default_domain_suffix = ad.company.local
Durch Hinzufügen des default_domain_suffix
weisen Sie SSSD an, (wenn keine andere Domäne angegeben ist) daraus zu folgern, dass der Benutzer versucht, sich als Benutzer aus der Domäne ad.company.local
zu authentifizieren. Dadurch können Sie sich beispielsweise als john.doe
statt als john.doe@ad.company.local
authentifizieren.
Damit diese Konfigurationsänderung wirksam wird, müssen Sie die Einheit sssd.service
mit systemctl
neu starten.
[user@host ~]$ sudo systemctl restart sssd
Wenn Sie nicht möchten, dass Ihre Home-Verzeichnisse mit dem Domänennamen als Suffix versehen werden, können Sie diese Optionen auf die gleiche Weise in Ihre Konfigurationsdatei /etc/sssd/sssd.conf
einfügen:
[domain/ad.company.local]
use_fully_qualified_names = False
override_homedir = /home/%u
Vergessen Sie nicht, den Dienst sssd
neu zu starten.
Auf bestimmte Benutzer beschränken¶
Es gibt verschiedene Methoden, den Zugriff auf den Server auf eine begrenzte Anzahl von Benutzern zu beschränken, aber diese ist, wie der Name schon sagt, sicherlich die einfachste:
Fügen Sie diese Optionen in Ihre Konfigurationsdatei /etc/sssd/sssd.conf
ein und starten Sie den Dienst neu:
access_provider = simple
simple_allow_groups = group1, group2
simple_allow_users = user1, user2
Jetzt können nur Benutzer aus group1
und group2
oder user1
und user2
über sssd eine Verbindung zum Server herstellen!
Interagieren Sie mit dem AD über adcli
¶
adcli
ist eine CLI zum Ausführen von Aktionen in einer Active Directory-Domäne.
- Falls noch nicht geschehen, installieren Sie das erforderliche Paket:
[user@host ~]$ sudo dnf install adcli
- Testen Sie, ob Sie bereits einer Active Directory-Domäne beigetreten sind:
[user@host ~]$ sudo adcli testjoin
Successfully validated join to domain ad.company.local
- Erhalten Sie weitere Informationen zur Domäne:
[user@host ~]$ adcli info ad.company.local
[domain]
domain-name = ad.company.local
domain-short = AD
domain-forest = ad.company.local
domain-controller = dc1.ad.company.local
domain-controller-site = site1
domain-controller-flags = gc ldap ds kdc timeserv closest writable full-secret ads-web
domain-controller-usable = yes
domain-controllers = dc1.ad.company.local dc2.ad.company.local
[computer]
computer-site = site1
adcli
ist mehr als nur ein Anzeige-Tool. Sie können damit mit Ihrer Domäne interagieren: Benutzer oder Gruppen verwalten, Passwörter ändern usw.
Beispiel: Verwenden Sie adcli
, um Informationen über einen Computer abzurufen:
Hinweis
Dieses Mal geben Sie dank der Option -U
einen Administrator-Benutzernamen an
[user@host ~]$ adcli show-computer pctest -U admin_username
Password for admin_username@AD:
sAMAccountName:
pctest$
userPrincipalName:
- not set -
msDS-KeyVersionNumber:
9
msDS-supportedEncryptionTypes:
24
dNSHostName:
pctest.ad.company.local
servicePrincipalName:
RestrictedKrbHost/pctest.ad.company.local
RestrictedKrbHost/pctest
host/pctest.ad.company.local
host/pctest
operatingSystem:
Rocky
operatingSystemVersion:
8
operatingSystemServicePack:
- not set -
pwdLastSet:
133189248188488832
userAccountControl:
69632
description:
- not set -
Beispiel: Verwenden Sie adcli
, um das Passwort des Benutzers zu ändern:
[user@host ~]$ adcli passwd-user user_test -U admin_username
Password for admin_username@AD:
Password for user_test:
[user@host ~]$
Problembehandlung¶
Manchmal wird der Netzwerkdienst nach SSSD gestartet, was zu Problemen bei der Authentifizierung führt.
Bis Sie den Dienst neu starten, können AD-Benutzer keine Verbindung herstellen.
In diesem Fall müssen Sie die Servicedatei von systemd überschreiben, um das Problem zu beheben.
Kopieren Sie diesen Inhalt in /etc/systemd/system/sssd.service
:
[Unit]
Description=System Security Services Daemon
# SSSD must be running before we permit user sessions
Before=systemd-user-sessions.service nss-user-lookup.target
Wants=nss-user-lookup.target
After=network-online.target
[Service]
Environment=DEBUG_LOGGER=--logger=files
EnvironmentFile=-/etc/sysconfig/sssd
ExecStart=/usr/sbin/sssd -i ${DEBUG_LOGGER}
Type=notify
NotifyAccess=main
PIDFile=/var/run/sssd.pid
[Install]
WantedBy=multi-user.target
Beim nächsten Reboot wird der Dienst entsprechend seinen Anforderungen gestartet und alles wird gut gehen.
Verlassen des Active Directory¶
Manchmal ist es notwendig, die Active Directory zu verlassen.
Sie können erneut mit realm
fortfahren und dann die nicht mehr benötigten Pakete entfernen:
[user@host ~]$ sudo realm leave ad.company.local
[user@host ~]$ sudo dnf remove realmd oddjob oddjob-mkhomedir sssd adcli krb5-workstation
Author: Hayden Young
Contributors: Steven Spencer, Sambhav Saggi, Antoine Le Morvan, Krista Burdine, Ganna Zhyrnova, Neel Chauhan