Samba-AD-Server unter Ubuntu 20.04 installieren
Achtung!
Der Verfasser macht ausdrücklich darauf aufmerksam, dass der Betrieb eines Active Directory Domain Controllers einzig und alleine in der Verantwortung des Betreibers liegt!
Da ein Active Directory Server aufgrund einer Mehrzahl der verwendeten Dienste ein recht komplexer Server ist, richtet sich dieses HowTo ausdrücklich an fortgeschrittene Anwender. In jedem Fall sollte ein Active Directory Server zunächst immer erst in einer Testumgebung ausführlich getestet werden, bevor er mit produktiven und realen Benutzerdaten bestückt wird!
Zur Sicherheit eines Active Directory Server sei insbesondere auch auf das Grundschutz-Kompendium des BSI zum Active Directory (Stand: 2021) 🇩🇪 verwiesen.
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Hinweis:
Dieses Howto wurde von Newubunti erstellt. Bei Problemen mit der Anleitung melde dies bitte in der dazugehörigen Diskussion und wende dich gegebenenfalls zusätzlich an den/die Verfasser des Howtos.
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 22.04 Jammy Jellyfish
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
- Was ist ein Active Directory Domain Controller?
- Vorbereitungen
- Installation der benötigten Pakete
- Original Konfigurations-Dateien sichern
- Samba-Installation bereinigen
- Provisionierung des Samba Active Directories
- Kopieren der bei der Provisionierung erzeugten Kerberos-Konfiguration
- Samba-AD-Server als DNS-Server festlegen
- Starten und Aktivieren des Samba-AD-Servers
- Test der Betriebsbereitschaft
- Einrichtung einer DNS-Reverse-Lookup-Zone
- Konfiguration des NTP-Servers
- Test des NTP-Servers
- Neustart des Servers
- Nächste Schritte
- Links
Ab Samba Version 4.x kann man Samba in der Rolle eines Microsoft-kompatiblen "Active-Directory Domain-Controller" (kurz AD DC) laufen lassen. Dieses HowTo beschreibt die Grundinstallation von einem Samba-Server als DC für eine Windows Domäne unter Ubuntu 20.04 LTS Server.
Hinweis:
Das HowTo wurde inzwischen auch mit Ubuntu 22.04 erfolgreich getestet. Allerdings verwendet Ubuntu 22.04 Samba in der Version 4.15.x während Ubuntu 20.04 4.13.x verwendet. Soweit der Artikel Rückmeldungen von Befehlen ausweist, stammen diese von Ubuntu 20.04 und können unter Ubuntu 22.04 leicht abweichen.
Was ist ein Active Directory Domain Controller?¶
Mit dem Active Directory hat Microsoft eine Verwaltungsstruktur geschaffen, mit deren Hilfe eine tatsächliche Unternehmens- oder Organisationsstruktur in digitaler Form nachgebildet und administriert werden kann.
Der Active Directory Domain Controller bildet das Herzstück dieser Struktur, indem er dazu ein Verzeichnis führt, in dem alle relevanten Elemente wie Standorte, Server, Client-Rechner, Benutzer und Gruppen etc. zentral angelegt und verwaltet werden können.
Siehe für weiterführende Informationen z.B.:
Active Directory und Domäne einfach erklärt - auf dr-datenschutz.de 🇩🇪
Was ist ein Domänencontroller im Active Directory? - auf heise.de 🇩🇪
MS Technet Serie: "Active Directory Concepts" 🇬🇧
Samba versucht mit der eigenen Implementierung des Active Directory Domain Controllers, das Microsoft-Original so gut wie möglich nachzubilden, entspricht aber nicht zu 100% einem vollwertigen Micorsoft-Active-Directory-Server.
Vorbereitungen¶
Im folgenden wird eine Samba Active Directory Domain Controller auf Grundlage der folgenden exemplarischen Parameter installiert. Diese Parameter sind gegebenenfalls an das eigene System anzupassen:
Netzwerverbindung: enp1s0
Name der Domäne (Realm): heim.lan
NETBIOS-Name der Domäne (Domain): HEIM
Name des Servers (Hostname): adc01
IP-Adresse: 10.10.20.220
DNS-BACKEND: SAMBA_INTERNAL
Gateway (DNS forwarder IP address): 10.10.20.1 (ist auch gleichzeitig DNS-Server fürs Internet)
Samba-Domänen-Administrator: administrator
Weiter wird davon ausgegangen und auch empfohlen, dass der Active Directory Servers unter Verwendung von Ubuntu Server realisiert wird.
IPv6 in Grub deaktivieren¶
Da dieses HowTo den AD DC ausschließlich mit IPv4 einrichten wird und zudem davon ausgegangen wird, dass der AD-Server ausschließlich im LAN genutzt werden soll, deaktviert man noch IPv6. Dieser Schritt ist nicht zwingend notwendig, aber für diesen Fall zweckmäßig.
IPv6 kann man mittels GRUB-Kernel-Option oder unter der Verwendung von sysctl 🇬🇧 dauerhaft deaktivieren. Die Methoden sind in ihrer Wirkung nicht exakt identisch. Genaures erfährt man diesbezüglich unter Linux disable IPv6 properly 🇬🇧.
Im vorliegenden Fall wird Grub zur Deaktivierung verwendet, was dazu führt, dass das IPv6-Modul erst gar nicht geladen wird[1][2][3]:
sudo nano /etc/default/grub.d/disable-ipv6.cfg
GRUB_CMDLINE_LINUX_DEFAULT="${GRUB_CMDLINE_LINUX_DEFAULT} ipv6.disable=1"
Möchte man außerdem den Splash-Screen deaktivieren und beim Booten des Servers alle Systemmeldungen anzeigen lassen, so kann man ${GRUB_CMDLINE_LINUX_DEFAULT}
auch weglassen und den Eintrag dann einfach so anlegen:
GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1"
Damit die Änderungen bei einem Neustart auch wirksam werden, führt man noch
sudo update-grub
aus.
Hinweis:
Wenn man IPv6 deaktiviert, dann sollte man konsequenter Weise bei allen Diensten, die sich an Netzwerk-Verbindungen binden darauf achten, dass dies nur für IPv4 geschieht. Andernfalls kann es beim Start der entsprechenden Dienste zu Fehlermeldungen kommen.
Vergabe einer statischen IP-Adresse¶
Bei einem Server ist die feste statische Vergabe einer IP-Adresse stets empfehlenswert. Bei einem Samba-AD-Server gilt dies noch mehr, weil hier eine nachträgliche Änderung der IP-Adresse nicht so einfach und zudem risikoreich ist.
Unter Ubuntu 20.04 Server erfolgt die Konfiguration einer statische IP-Adresse standardmäßig mittels Netplan. Dazu wird eine neue .yaml Datei mit dem folgenden Inhalt erstellt, die dann die auf dem Ubuntu Server schon original vorhandene .yaml überschreibt.[4] Auf diese Weise kann man bei Bedarf jederzeit wieder zu der original Konfiguration zurückkehren:
sudo nano /etc/netplan/99-enp1s0-static-10.10.20.220.yaml
network: version: 2 renderer: networkd ethernets: enp1s0: addresses: - 10.10.20.220/24 dhcp4: no routes: - to: default via: 10.10.20.1 nameservers: search: [heim.lan] addresses: [10.10.20.1]
Stub Listener von systemd-resolved deaktivieren¶
Da der Samba-AD-Server einen eigenen DNS-Server einrichten wird, muss der dazu notwendige Netzwerk-Port 53
zunächst frei gemacht werden, weil dieser unter Ubuntu standardmäßig von systemd-resolved bzw. dessen sog. Stub Listener 🇬🇧 belegt wird[5]:
Zunächst legt man ein Verzeichnis für die Konfigurationsänderung an:
sudo mkdir /etc/systemd/resolved.conf.d/
Anschließend erstellt man eine neue Konfigurationsdatei, deren Name beliebig sein darf, aber mit der Erweiterung .conf enden muss:
sudo nano /etc/systemd/resolved.conf.d/disable-stub-listener.conf
Der Stub Listener wird mit folgendem Eintrag deaktiviert:
[Resolve] DNSStubListener=no
Nun muss noch der symbolische Link auf den Stub Listener entfernt
sudo rm /etc/resolv.conf
und dafür ein neuer auf /run/systemd/resolve/resolv.conf gesetzt werden:
sudo ln -sf /run/systemd/resolve/resolv.conf /etc/resolv.conf
Nun teilt man die Konfigurationsänderung systemd[6] mit:
sudo systemctl daemon-reload
Abschließend kann man systemd-resolved neu starten:
sudo systemctl restart systemd-resolved
Hostnamen festlegen¶
Schließlich legt man in der Datei /etc/hosts noch den Namen und den FQDN fest:
sudo nano /etc/hosts
127.0.0.1 localhost 10.10.20.220 adc01.heim.lan adc01
Hinweis:
Weder der Hostname noch der FQDN dürfen nach 127.0.0.1 oder zu sonst einer anderen IP-Adresse auflösen, als zu der IP-Adresse der LAN-Netzwerkschnittstelle des AD DC!
System neu starten¶
Damit sind die Vorbereitungengen soweit abgeschlossen. Damit alle Änderungen übernommen werden startet man den Rechner noch neu:
sudo reboot
Hostnamen, IP und belegte Ports überprüfen¶
hostname && hostname -f && hostname -d
Korrekte Rückmeldung:
adc01 adc01.heim.lan heim.lan
Prüfen der IP-Adresse:
ip a
Die Rückmeldung sollte der folgenden sehr ähnlich sein. Auf jeden Fall müssen die IP- und die Broadcast-Adresse so aussehen, wie hier angegeben. Außerdem dürfen keine inet6
Zeilen aufgelistet sein:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever 2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 12:34:56:78:ab:cd brd ff:ff:ff:ff:ff:ff inet 10.10.20.220/24 brd 10.10.20.255 scope global dynamic enp1s0 valid_lft 2610sec preferred_lft 2610sec
Dann vergewissert man sich noch, dass die DNS-Server-Angaben aus der Netplan-Konfiguration auch in der /etc/resolv.conf ankommen:
cat /etc/resolv.conf
Korrekte Rückmeldung:
# This file is managed by man:systemd-resolved(8). Do not edit. # # This is a dynamic resolv.conf file for connecting local clients directly to # all known uplink DNS servers. This file lists all configured search domains. # # Third party programs must not access this file directly, but only through the # symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way, # replace this symlink by a static file or a different symlink. # # See man:systemd-resolved.service(8) for details about the supported modes of # operation for /etc/resolv.conf. nameserver 10.10.20.1 search heim.lan
Schließlich überprüft man noch, dass der Port 53 nun nicht mehr belegt ist:
sudo ss -tulpen '( dport = :53 or sport = :53 )'
Es sollte nun kein auf Port 53 lauschender Dienst mehr zurückgegeben werden:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
Installation der benötigten Pakete¶
Samba benötigt unter Ubuntu 20.04 die Pakete acl, attr, samba, samba-dsdb-modules, samba-vfs-modules, winbind, krb5-config und krb5-user bzw. alternativ dazu heimdal-clients. Dafür ist es ausreichend die folgenden Pakete mittels der Paketverwaltung zu installieren[7]:
samba
heimdal-clients
smbclient
winbind
ntp
ldb-tools
Befehl zum Installieren der Pakete:
sudo apt-get install samba heimdal-clients smbclient winbind ntp ldb-tools
Oder mit apturl installieren, Link: apt://samba,heimdal-clients,smbclient,winbind,ntp,ldb-tools
Während der Installation wird man bezüglich der Kerberos-Authentisierung gefragt. Dort kann man alle etwaigen Fragen einfach mit der Taste ⏎ bestätigen. Diese Kerberos-Konfiguration wird im späteren Verlauf durch die Kerberos-Konfiguration, die während der Porvisionierung des Samba-AD-Servers erstellt wird, ersetzt werden.
Original Konfigurations-Dateien sichern¶
Es ist zwar nicht zwingend notwendig aber es empfiehlt sich die original bei der Installation abgelegten Konfigurationsdateien zu sichern. Zum einen enthalten diese oft hilfreiche Kommentierungen und zum andern lässt sich so auch stets nachvollziehen, welche Konfigurationsdateien man bearbeitet hat:
sudo mv /etc/samba/smb.conf{,.bu.orig} sudo mv /etc/krb5.conf{,.bu.orig} sudo mv /etc/ntp.conf{,.bu.orig}
Samba-Installation bereinigen¶
Während der Installation der Samba-Pakete wird der Server als "Standalone Server" eingerichtet und dann auch gestartet. Da der Server aber letztlich die Rolle eines Active Directory Servers einnehmen wird, muss die Standardkonfiguration erst noch bereinigt werden.
Samba-Datei-Server-Dienste deaktivieren¶
Mit den folgenden drei Befehlszeilen werden die bei der Installation gestarteten Samba-Dienste gestoppt, deren automatischer Start bei einem Neustart des Servers wird deaktiviert und die entsprechenden Dienste werden auch noch maskiert, so dass sie nicht versehentlich einfach gestartet werden können:
sudo systemctl stop smbd nmbd winbind sudo systemctl disable smbd nmbd winbind sudo systemctl mask smbd nmbd winbind
Etwaige Datenbank-Dateien entfernen¶
Anschließend löscht man alle Samba-Datenbank-Dateien, um etwaige Konflikte beim Provisionieren des Samba Active Directory Servers erst gar nicht aufkommen zu lassen:
sudo rm -f /run/samba/*.tdb sudo rm -f /var/lib/samba/*.tdb sudo rm -f /var/cache/samba/*.tdb sudo rm -f /var/lib/samba/private/*.tdb
Provisionierung des Samba Active Directories¶
sudo samba-tool domain provision --use-rfc2307 --interactive --option="interfaces=127.0.0.1 10.10.20.220" --option="bind interfaces only=yes"
Parameter "-use-rfc2307" für NIS-Servcie (yellowpages) inkl. Schemaerweiterung im AD. Wird nicht zwingend benötigt, aber später eventl. hilfreich für Linux-Clients. siehe auch: https://wiki.samba.org/index.php/Using_RFC2307_on_a_Samba_DC#Administer_Unix_Attributes_in_Active_Directory
option="interfaces=127.0.0.1 10.10.20.220" --option="bind interfaces only=yes"
sorgt dafür, dass der Samba-AD-Server entgegen dem Standard ausschließlich an explizit unterinterfaces=
genannten Netzwerkschnittstellen und damit auf den IPv4-Adressen127.0.0.1
für die Loopbackschnittstelle und10.10.20.220
für die LAN-Schnittstelle lauscht.
Folgende Parameter werden dann im interaktiven Dialog abgefragt. Solche Parameter die dabei in []
stehen werden standardmäßig verwendet, wenn man nichts anderes angibt und können einfach mit
⏎ bestätigt werden:
REALM: Der REALM ist der vollständige Domänenname, er wird auch auch als DNS-Domainname verwendet. Wie im Internet sind die einzelen Wörter durch einen Punkt getrennt. In unserem Beispiel lautet der REALM "heim.lan". Der Realm gibt zudem die Kerberos-Domäne an über die dann der Key Distribution Center erreicht werden kann. Zur Namensgebung siehe auch Active Directory Naming FAQ 🇬🇧
Domain: Ist quasi die Kurzform des Domänennamens ohne Punkte und wird für NetBIOS benötigt. Deswegen wird der Parameter auch NETBIOS-Name genannt. Dies ist sinnvollerweise der erste Teil des kompletten REALMs. In unserem Beispiel lautet der NETBIOS-Name "heim".
Server Role: Samba kann in ganz unterschiedlichen Modi laufen. In unserem Beispiel ist "dc" anzugeben.
DNS backend: Samba4 beinhaltet einen eigenen DNS-Server. Als weiterer unterstützter DNS-Backend-Server kann außerdem auch Bind dienen. Im vorliegenden Fall wählt man "SAMBA_INTERNAL".
DNS forwarder: Im späteren Betrieb sollten alle Clients der Domäne den/die Samba Server als DNS-Server verwenden. Sollen aber auch DNS-Namen außerhalb der Domäne aufgelöst werden (z.B. Internet DNS-Namen), so muss dem DNS-Server im Samba-Server gesagt werden, welchen anderen DNS-Server er verwenden soll, um diese Namen aufzulösen. Das ist der DNS-Forwarder. In unserem Beispiel wird der heimische Router = 10.10.20.1 angegeben.
Administrator passwort: Dies ist der mächtigste Account in der Windows-Domäne. Damit kann man später die Domäne verwalten. HINWEIS: Das Passwort muss der Passwort-Policy entsprechen, 3 aus 4 Komponenten (Kleinschrift, Großschrift, Ziffern, Sonderzeichen) Siehe: Passwords must meet complexity requirements 🇬🇧. Das Passwort sollte aus Sicherheitsgründen außerdem von dem Verwalter-Konto des Ubuntu-Servers abweichen.
Der Provisionierungsverlauf sollte sich dann wiefolgt darstellen:
Realm [HEIM.LAN]: Domain [HEIM]: Server Role (dc, member, standalone) [dc]: DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: DNS forwarder IP address (write 'none' to disable forwarding) [10.10.20.1]: Administrator password: Retype password: INFO 2022-03-02 17:04:19,124 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2122: Looking up IPv4 addresses INFO 2022-03-02 17:04:19,125 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2139: Looking up IPv6 addresses WARNING 2022-03-02 17:04:19,125 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2146: No IPv6 address will be assigned INFO 2022-03-02 17:04:19,404 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2290: Setting up share.ldb INFO 2022-03-02 17:04:19,748 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2294: Setting up secrets.ldb INFO 2022-03-02 17:04:19,982 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2299: Setting up the registry INFO 2022-03-02 17:04:21,013 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2302: Setting up the privileges database INFO 2022-03-02 17:04:21,507 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2305: Setting up idmap db INFO 2022-03-02 17:04:21,852 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2312: Setting up SAM db INFO 2022-03-02 17:04:21,915 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #897: Setting up sam.ldb partitions and settings INFO 2022-03-02 17:04:21,916 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #909: Setting up sam.ldb rootDSE INFO 2022-03-02 17:04:21,978 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1322: Pre-loading the Samba 4 and AD schema Unable to determine the DomainSID, can not enforce uniqueness constraint on local domainSIDs INFO 2022-03-02 17:04:22,194 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1400: Adding DomainDN: DC=heim,DC=lan INFO 2022-03-02 17:04:22,320 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1432: Adding configuration container INFO 2022-03-02 17:04:22,397 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1447: Setting up sam.ldb schema INFO 2022-03-02 17:04:24,769 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1465: Setting up sam.ldb configuration data INFO 2022-03-02 17:04:24,907 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1506: Setting up display specifiers INFO 2022-03-02 17:04:26,545 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1514: Modifying display specifiers and extended rights INFO 2022-03-02 17:04:26,581 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1521: Adding users container INFO 2022-03-02 17:04:26,583 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1527: Modifying users container INFO 2022-03-02 17:04:26,583 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1530: Adding computers container INFO 2022-03-02 17:04:26,585 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1536: Modifying computers container INFO 2022-03-02 17:04:26,585 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1540: Setting up sam.ldb data INFO 2022-03-02 17:04:26,723 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1570: Setting up well known security principals INFO 2022-03-02 17:04:26,769 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1584: Setting up sam.ldb users and groups INFO 2022-03-02 17:04:27,031 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #1592: Setting up self join Repacking database from v1 to v2 format (first record CN=FRS-Partner-Auth-Level,CN=Schema,CN=Configuration,DC=heim,DC=lan) Repack: re-packed 10000 records so far Repacking database from v1 to v2 format (first record CN=queryPolicy-Display,CN=410,CN=DisplaySpecifiers,CN=Configuration,DC=heim,DC=lan) Repacking database from v1 to v2 format (first record CN=PSPs,CN=System,DC=heim,DC=lan) INFO 2022-03-02 17:04:29,800 pid:4050 /usr/lib/python3/dist-packages/samba/provision/sambadns.py #1143: Adding DNS accounts INFO 2022-03-02 17:04:30,093 pid:4050 /usr/lib/python3/dist-packages/samba/provision/sambadns.py #1177: Creating CN=MicrosoftDNS,CN=System,DC=heim,DC=lan INFO 2022-03-02 17:04:30,115 pid:4050 /usr/lib/python3/dist-packages/samba/provision/sambadns.py #1190: Creating DomainDnsZones and ForestDnsZones partitions INFO 2022-03-02 17:04:30,308 pid:4050 /usr/lib/python3/dist-packages/samba/provision/sambadns.py #1195: Populating DomainDnsZones and ForestDnsZones partitions Repacking database from v1 to v2 format (first record DC=@,DC=heim.lan,CN=MicrosoftDNS,DC=DomainDnsZones,DC=heim,DC=lan) Repacking database from v1 to v2 format (first record DC=_kerberos._tcp.dc,DC=_msdcs.heim.lan,CN=MicrosoftDNS,DC=ForestDnsZones,DC=heim,DC=lan) INFO 2022-03-02 17:04:31,141 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2026: Setting up sam.ldb rootDSE marking as synchronized INFO 2022-03-02 17:04:31,190 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2031: Fixing provision GUIDs INFO 2022-03-02 17:04:32,385 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2364: A Kerberos configuration suitable for Samba AD has been generated at /var/lib/samba/private/krb5.conf INFO 2022-03-02 17:04:32,385 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2366: Merge the contents of this file with your system krb5.conf or replace it with this one. Do not create a symlink! INFO 2022-03-02 17:04:32,587 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #2096: Setting up fake yp server settings INFO 2022-03-02 17:04:32,773 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #489: Once the above files are installed, your Samba AD server will be ready to use INFO 2022-03-02 17:04:32,774 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #494: Server Role: active directory domain controller INFO 2022-03-02 17:04:32,774 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #495: Hostname: adc01 INFO 2022-03-02 17:04:32,774 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #496: NetBIOS Domain: HEIM INFO 2022-03-02 17:04:32,774 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #497: DNS Domain: heim.lan INFO 2022-03-02 17:04:32,774 pid:4050 /usr/lib/python3/dist-packages/samba/provision/__init__.py #498: DOMAIN SID: S-1-5-21-3633882164-3665405940-809670751
Hinweis:
Die Provisionierung eines Domain Controllers darf immer nur ein mal pro Domäne erfolgen. Möchte man zwecks Sicherung der Verfügbarkeit weitere Domain Controller einrichten, so sind diese der bestehende Domäne hinzuzufügen aber nicht selbst zu provisionieren! Siehe dazu: Joining a Samba DC to an Existing Active Directory 🇬🇧 im Samba-Wiki
Während der Provisionierung wird die Datei /etc/samba/smb.conf generiert. Deren Inhalt lässt man sich am besten mit dem folgenden Kommando anzeigen, da dieses auch immer gleich die syntaktische Korrektheit überprüft:
samba-tool testparm
Das Kommando sollte zu folgender Rückmeldung führen:
INFO 2022-03-30 18:46:37,517 pid:1241 /usr/lib/python3/dist-packages/samba/netcmd/testparm.py #96: Loaded smb config files from /etc/samba/smb.conf INFO 2022-03-30 18:46:37,517 pid:1241 /usr/lib/python3/dist-packages/samba/netcmd/testparm.py #97: Loaded services file OK. Press enter to see a dump of your service definitions # Global parameters [global] bind interfaces only = Yes dns forwarder = 10.10.20.1 interfaces = 127.0.0.1 10.10.20.220 netbios name = ADC01 realm = HEIM.LAN server role = active directory domain controller workgroup = HEIM idmap_ldb:use rfc2307 = yes [sysvol] path = /var/lib/samba/sysvol read only = No [netlogon] path = /var/lib/samba/sysvol/heim.lan/scripts read only = No
Kopieren der bei der Provisionierung erzeugten Kerberos-Konfiguration¶
Während der Provisionierung erzeugt Samba außerdem eine valide Kerberos-Konfiguration innerhalb von /var/lib/samba/private/:
cat /var/lib/samba/private/krb5.conf
Ausgabe:
[libdefaults] default_realm = HEIM.LAN dns_lookup_realm = false dns_lookup_kdc = true [realms] HEIM.LAN = { default_domain = heim.lan } [domain_realm] adc01 = HEIM.LAN
Die Datei muss nun noch nach /etc/ kopiert werden:
sudo cp /var/lib/samba/private/krb5.conf /etc/
Hinweis:
Die /etc/krb5.conf sollte auf allen Rechnern und Servern der Domäne den gleichen Inhalt haben!
Samba-AD-Server als DNS-Server festlegen¶
Außerdem legt man nun wiederum mittels Netplan den Samba-Server als DNS-Server fest:
sudo nano /etc/netplan/99-enp1s0-static-10.10.20.220.yaml
network: version: 2 renderer: networkd ethernets: enp1s0: addresses: - 10.10.20.220/24 dhcp4: no routes: - to: default via: 10.10.20.1 nameservers: search: [heim.lan] addresses: [10.10.20.220]
Anschließend kann man die Konfiguration unmittelbar anwenden,
sudo netplan apply
und solgleich überprüfen:
cat /etc/resolv.conf
Korrekte Rückmeldung:
# This file is managed by man:systemd-resolved(8). Do not edit. # # This is a dynamic resolv.conf file for connecting local clients directly to # all known uplink DNS servers. This file lists all configured search domains. # # Third party programs must not access this file directly, but only through the # symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a different way, # replace this symlink by a static file or a different symlink. # # See man:systemd-resolved.service(8) for details about the supported modes of # operation for /etc/resolv.conf. nameserver 10.10.20.220 search heim.lan
Starten und Aktivieren des Samba-AD-Servers¶
Nun muss schließlich noch die samba-ad-dc.service-Einheit demaskiert und für den automatischen Start beim Systemstart aktiviert werden:
sudo systemctl unmask samba-ad-dc sudo systemctl enable samba-ad-dc
Außerdem bedarf es aufgrund eines Bugs seit eines zwischenzeitlichen systemd-Sicherheitsupdates noch einer Anpassung an der samba-ad-dc.service-Einheit. Siehe dazu https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=993347;msg=5 in Verbindung mit https://www.spinics.net/lists/samba/msg171143.html.
Zwecks Anpassung erzeugt man mittels systemctl edit
eine /etc/systemd/system/samba-ad-dc.service.d/override.conf,
sudo systemctl edit samba-ad-dc.service
mit folgendem Inhalt:
[Service] NotifyAccess=all
Nun führt man noch ein
sudo systemctl daemon-reload
aus. Anschließend lässt sich der Samba-AD-Server dann erstmalig starten:
sudo systemctl start samba-ad-dc.service
Nun lässt sich der Status des Samba AD DC erstmalig abfragen:
sudo systemctl status samba-ad-dc.service
Korrekte Rückmeldung:
● samba-ad-dc.service - Samba AD Daemon Loaded: loaded (/lib/systemd/system/samba-ad-dc.service; enabled; vendor preset: enabled) Drop-In: /etc/systemd/system/samba-ad-dc.service.d └─override.conf Active: active (running) since Wed 2022-03-02 17:07:25 UTC; 10s ago Docs: man:samba(8) man:samba(7) man:smb.conf(5) Main PID: 4383 (samba) Status: "smbd: ready to serve connections..." Tasks: 60 (limit: 4612) Memory: 173.5M CGroup: /system.slice/samba-ad-dc.service ├─4383 samba: root process ├─4398 samba: tfork waiter process(4399) ├─4399 samba: task[s3fs] pre-fork master ├─4400 samba: tfork waiter process(4401) ├─4401 samba: task[rpc] pre-fork master ├─4402 samba: tfork waiter process(4403) ├─4403 /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground ├─4404 samba: tfork waiter process(4406) ├─4405 samba: tfork waiter process(4408) ├─4406 samba: task[rpc] pre-forked worker(0) ├─4407 samba: tfork waiter process(4412) ├─4408 samba: task[nbt] pre-fork master ├─4409 samba: tfork waiter process(4410) ├─4410 samba: task[wrepl] pre-fork master ├─4411 samba: tfork waiter process(4414) ├─4412 samba: task[rpc] pre-forked worker(1) ├─4413 samba: tfork waiter process(4416) ├─4414 samba: task[ldap] pre-fork master ├─4415 samba: tfork waiter process(4418) ├─4416 samba: task[rpc] pre-forked worker(2) ├─4417 samba: tfork waiter process(4419) ├─4418 samba: task[cldap] pre-fork master ├─4419 samba: task[rpc] pre-forked worker(3) ├─4420 samba: tfork waiter process(4421) ├─4421 samba: task[kdc] pre-fork master ├─4422 samba: tfork waiter process(4426) ├─4423 samba: tfork waiter process(4424) ├─4424 samba: task[kdc] pre-forked worker(0) ├─4425 samba: tfork waiter process(4428) ├─4426 samba: task[drepl] pre-fork master ├─4427 samba: tfork waiter process(4430) ├─4428 samba: task[kdc] pre-forked worker(1) ├─4429 samba: tfork waiter process(4432) ├─4430 samba: task[winbindd] pre-fork master ├─4431 samba: tfork waiter process(4434) ├─4432 samba: task[kdc] pre-forked worker(2) ├─4433 samba: tfork waiter process(4437) ├─4434 samba: task[ntp_signd] pre-fork master ├─4435 samba: tfork waiter process(4440) ├─4436 samba: tfork waiter process(4438) ├─4437 samba: task[kdc] pre-forked worker(3) ├─4438 samba: task[kcc] pre-fork master ├─4439 samba: tfork waiter process(4441) ├─4440 /usr/sbin/winbindd -D --option=server role check:inhibit=yes --foreground ├─4441 samba: task[dnsupdate] pre-fork master ├─4442 samba: tfork waiter process(4443) ├─4443 samba: task[dns] pre-fork master ├─4450 /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground ├─4451 /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground ├─4453 winbindd: domain child [HEIM] ├─4454 winbindd: idmap child ├─4455 /usr/sbin/smbd -D --option=server role check:inhibit=yes --foreground ├─4458 samba: tfork waiter process(4459) ├─4459 samba: task[ldap] pre-forked worker(0) ├─4460 samba: tfork waiter process(4461) ├─4461 samba: task[ldap] pre-forked worker(1) ├─4462 samba: tfork waiter process(4463) ├─4463 samba: task[ldap] pre-forked worker(2) ├─4464 samba: tfork waiter process(4465) └─4465 samba: task[ldap] pre-forked worker(3) Mär 02 17:07:25 adc01 samba[4383]: [2022/03/02 17:07:25.250674, 0] ../../lib/util/become_daemon.c:135(daemon_ready) Mär 02 17:07:25 adc01 samba[4383]: daemon_ready: daemon 'samba' finished starting up and ready to serve connections Mär 02 17:07:25 adc01 winbindd[4440]: [2022/03/02 17:07:25.629569, 0] ../../source3/winbindd/winbindd_cache.c:3203(initialize_winbindd_cache) Mär 02 17:07:25 adc01 winbindd[4440]: initialize_winbindd_cache: clearing cache and re-creating with version number 2 Mär 02 17:07:25 adc01 winbindd[4440]: [2022/03/02 17:07:25.640788, 0] ../../lib/util/become_daemon.c:135(daemon_ready) Mär 02 17:07:25 adc01 winbindd[4440]: daemon_ready: daemon 'winbindd' finished starting up and ready to serve connections Mär 02 17:07:26 adc01 smbd[4403]: [2022/03/02 17:07:26.245723, 0] ../../lib/util/become_daemon.c:135(daemon_ready) Mär 02 17:07:26 adc01 smbd[4403]: daemon_ready: daemon 'smbd' finished starting up and ready to serve connections Mär 02 17:07:28 adc01 samba[4414]: [2022/03/02 17:07:28.247844, 0] ../../source4/lib/tls/tlscert.c:154(tls_cert_generate) Mär 02 17:07:28 adc01 samba[4414]: TLS self-signed keys generated OK
Test der Betriebsbereitschaft¶
Bevor man damit beginnt, den AD-Server weiter zu konfigurieren und Rechner der Domäne hinzuzufügen, sollte man unbedingt die korrekte Funktion aller Dienste des AD-Servers sicherstellen.
Prozesse auflisten¶
ps ax | grep samba
Korrekte Rückmeldung:
14445 ? Ss 0:00 samba: root process 14467 ? S 0:00 samba: tfork waiter process(14468) 14468 ? S 0:00 samba: task[s3fs] pre-fork master 14469 ? S 0:00 samba: tfork waiter process(14470) 14470 ? S 0:00 samba: task[rpc] pre-fork master 14471 ? S 0:00 samba: tfork waiter process(14473) 14472 ? S 0:00 samba: tfork waiter process(14474) 14474 ? S 0:00 samba: task[nbt] pre-fork master 14475 ? S 0:00 samba: tfork waiter process(14476) 14476 ? S 0:00 samba: task[wrepl] pre-fork master 14477 ? S 0:00 samba: tfork waiter process(14479) 14478 ? S 0:00 samba: tfork waiter process(14480) 14479 ? S 0:00 samba: task[rpc] pre-forked worker(0) 14480 ? S 0:00 samba: task[ldap] pre-fork master 14481 ? S 0:00 samba: tfork waiter process(14485) 14482 ? S 0:00 samba: tfork waiter process(14483) 14483 ? S 0:00 samba: task[cldap] pre-fork master 14484 ? S 0:00 samba: tfork waiter process(14487) 14485 ? S 0:00 samba: task[rpc] pre-forked worker(1) 14486 ? S 0:00 samba: tfork waiter process(14489) 14487 ? S 0:00 samba: task[kdc] pre-fork master 14488 ? S 0:00 samba: tfork waiter process(14491) 14489 ? S 0:00 samba: task[rpc] pre-forked worker(2) 14490 ? S 0:00 samba: tfork waiter process(14492) 14491 ? S 0:02 samba: task[drepl] pre-fork master 14492 ? S 0:00 samba: task[rpc] pre-forked worker(3) 14493 ? S 0:00 samba: tfork waiter process(14495) 14494 ? S 0:00 samba: tfork waiter process(14497) 14495 ? S 0:00 samba: task[winbindd] pre-fork master 14496 ? S 0:00 samba: tfork waiter process(14500) 14497 ? S 0:00 samba: task[kdc] pre-forked worker(0) 14498 ? S 0:00 samba: tfork waiter process(14499) 14499 ? S 0:00 samba: task[kdc] pre-forked worker(1) 14500 ? S 0:00 samba: task[ntp_signd] pre-fork master 14501 ? S 0:00 samba: tfork waiter process(14506) 14502 ? S 0:00 samba: tfork waiter process(14504) 14503 ? S 0:00 samba: tfork waiter process(14508) 14504 ? S 0:00 samba: task[kcc] pre-fork master 14505 ? S 0:00 samba: tfork waiter process(14509) 14506 ? S 0:00 samba: task[kdc] pre-forked worker(2) 14507 ? S 0:00 samba: tfork waiter process(14512) 14509 ? S 0:00 samba: task[dnsupdate] pre-fork master 14510 ? S 0:00 samba: tfork waiter process(14511) 14511 ? S 0:00 samba: task[dns] pre-fork master 14512 ? S 0:00 samba: task[kdc] pre-forked worker(3) 14560 ? S 0:00 samba: tfork waiter process(14561) 14561 ? S 0:00 samba: task[ldap] pre-forked worker(0) 14562 ? S 0:00 samba: tfork waiter process(14563) 14563 ? S 0:00 samba: task[ldap] pre-forked worker(1) 14564 ? S 0:00 samba: tfork waiter process(14565) 14565 ? S 0:00 samba: task[ldap] pre-forked worker(2) 14566 ? S 0:00 samba: tfork waiter process(14567) 14567 ? S 0:00 samba: task[ldap] pre-forked worker(3) 29029 pts/0 R+ 0:00 grep --color=auto samba
AD-Server-Ports¶
sudo ss -tulpen
Korrekte Rückmeldung:
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process udp UNCONN 0 0 10.10.10.220:53 0.0.0.0:* users:(("dns[master]",pid=686,fd=50)) ino:24407 sk:1 <-> udp UNCONN 0 0 127.0.0.1:53 0.0.0.0:* users:(("dns[master]",pid=686,fd=48)) ino:24405 sk:2 <-> udp UNCONN 0 0 10.10.10.220:88 0.0.0.0:* users:(("kdc(3",pid=685,fd=40),("kdc(2",pid=681,fd=40),("kdc(1",pid=676,fd=40),("kdc(0",pid=671,fd=40),("kdc[master]",pid=663,fd=40)) ino:23949 sk:3 <-> udp UNCONN 0 0 127.0.0.1:88 0.0.0.0:* users:(("kdc(3",pid=685,fd=36),("kdc(2",pid=681,fd=36),("kdc(1",pid=676,fd=36),("kdc(0",pid=671,fd=36),("kdc[master]",pid=663,fd=36)) ino:23945 sk:4 <-> udp UNCONN 0 0 10.10.10.220:123 0.0.0.0:* users:(("ntpd",pid=521,fd=18)) ino:21725 sk:5 <-> udp UNCONN 0 0 127.0.0.1:123 0.0.0.0:* users:(("ntpd",pid=521,fd=17)) ino:21723 sk:6 <-> udp UNCONN 0 0 0.0.0.0:123 0.0.0.0:* users:(("ntpd",pid=521,fd=16)) ino:21719 sk:7 <-> udp UNCONN 0 0 10.10.10.220:137 0.0.0.0:* users:(("nbt[master]",pid=648,fd=31)) ino:23865 sk:8 <-> udp UNCONN 0 0 10.10.10.255:137 0.0.0.0:* users:(("nbt[master]",pid=648,fd=30)) ino:23864 sk:9 <-> udp UNCONN 0 0 127.0.0.1:137 0.0.0.0:* users:(("nbt[master]",pid=648,fd=26)) ino:23861 sk:a <-> udp UNCONN 0 0 127.255.255.255:137 0.0.0.0:* users:(("nbt[master]",pid=648,fd=22)) ino:23860 sk:b <-> udp UNCONN 0 0 10.10.10.220:138 0.0.0.0:* users:(("nbt[master]",pid=648,fd=33)) ino:23867 sk:c <-> udp UNCONN 0 0 10.10.10.255:138 0.0.0.0:* users:(("nbt[master]",pid=648,fd=32)) ino:23866 sk:d <-> udp UNCONN 0 0 127.0.0.1:138 0.0.0.0:* users:(("nbt[master]",pid=648,fd=29)) ino:23863 sk:e <-> udp UNCONN 0 0 127.255.255.255:138 0.0.0.0:* users:(("nbt[master]",pid=648,fd=28)) ino:23862 sk:f <-> udp UNCONN 0 0 10.10.10.220:389 0.0.0.0:* users:(("cldap[master]",pid=659,fd=32)) ino:23928 sk:10 <-> udp UNCONN 0 0 127.0.0.1:389 0.0.0.0:* users:(("cldap[master]",pid=659,fd=22)) ino:23927 sk:11 <-> udp UNCONN 0 0 10.10.10.220:464 0.0.0.0:* users:(("kdc(3",pid=685,fd=42),("kdc(2",pid=681,fd=42),("kdc(1",pid=676,fd=42),("kdc(0",pid=671,fd=42),("kdc[master]",pid=663,fd=42)) ino:23951 sk:12 <-> udp UNCONN 0 0 127.0.0.1:464 0.0.0.0:* users:(("kdc(3",pid=685,fd=38),("kdc(2",pid=681,fd=38),("kdc(1",pid=676,fd=38),("kdc(0",pid=671,fd=38),("kdc[master]",pid=663,fd=38)) ino:23947 sk:13 <-> tcp LISTEN 0 10 10.10.10.220:53 0.0.0.0:* users:(("dns[master]",pid=686,fd=49)) ino:24406 sk:14 <-> tcp LISTEN 0 10 127.0.0.1:53 0.0.0.0:* users:(("dns[master]",pid=686,fd=46)) ino:24404 sk:15 <-> tcp LISTEN 0 128 10.10.10.220:22 0.0.0.0:* users:(("sshd",pid=420,fd=3)) ino:19546 sk:16 <-> tcp LISTEN 0 10 10.10.10.220:88 0.0.0.0:* users:(("kdc(3",pid=685,fd=39),("kdc(2",pid=681,fd=39),("kdc(1",pid=676,fd=39),("kdc(0",pid=671,fd=39),("kdc[master]",pid=663,fd=39)) ino:23948 sk:17 <-> tcp LISTEN 0 10 127.0.0.1:88 0.0.0.0:* users:(("kdc(3",pid=685,fd=34),("kdc(2",pid=681,fd=34),("kdc(1",pid=676,fd=34),("kdc(0",pid=671,fd=34),("kdc[master]",pid=663,fd=34)) ino:23944 sk:18 <-> tcp LISTEN 0 10 10.10.10.220:636 0.0.0.0:* users:(("ldap(3",pid=707,fd=36),("ldap(2",pid=705,fd=36),("ldap(1",pid=703,fd=36),("ldap(0",pid=701,fd=36),("ldap[master]",pid=653,fd=36)) ino:25144 sk:19 <-> tcp LISTEN 0 10 127.0.0.1:636 0.0.0.0:* users:(("ldap(3",pid=707,fd=32),("ldap(2",pid=705,fd=32),("ldap(1",pid=703,fd=32),("ldap(0",pid=701,fd=32),("ldap[master]",pid=653,fd=32)) ino:25140 sk:1a <-> tcp LISTEN 0 50 127.0.0.1:445 0.0.0.0:* users:(("smbd",pid=646,fd=49)) ino:25095 sk:1b <-> tcp LISTEN 0 50 10.10.10.220:445 0.0.0.0:* users:(("smbd",pid=646,fd=47)) ino:25093 sk:1c <-> tcp LISTEN 0 10 10.10.10.220:49152 0.0.0.0:* users:(("rpc(3",pid=664,fd=26),("rpc(2",pid=661,fd=26),("rpc(1",pid=657,fd=26),("rpc(0",pid=655,fd=26),("rpc[master]",pid=645,fd=26)) ino:23488 sk:1d <-> tcp LISTEN 0 10 127.0.0.1:49152 0.0.0.0:* users:(("rpc(3",pid=664,fd=24),("rpc(2",pid=661,fd=24),("rpc(1",pid=657,fd=24),("rpc(0",pid=655,fd=24),("rpc[master]",pid=645,fd=24)) ino:23487 sk:1e <-> tcp LISTEN 0 10 10.10.10.220:49153 0.0.0.0:* users:(("rpc(0",pid=655,fd=15)) ino:24734 sk:1f <-> tcp LISTEN 0 10 127.0.0.1:49153 0.0.0.0:* users:(("rpc(0",pid=655,fd=14)) ino:24733 sk:20 <-> tcp LISTEN 0 10 10.10.10.220:49154 0.0.0.0:* users:(("rpc(0",pid=655,fd=31)) ino:24748 sk:21 <-> tcp LISTEN 0 10 127.0.0.1:49154 0.0.0.0:* users:(("rpc(0",pid=655,fd=30)) ino:24747 sk:22 <-> tcp LISTEN 0 10 10.10.10.220:3268 0.0.0.0:* users:(("ldap(3",pid=707,fd=37),("ldap(2",pid=705,fd=37),("ldap(1",pid=703,fd=37),("ldap(0",pid=701,fd=37),("ldap[master]",pid=653,fd=37)) ino:25145 sk:23 <-> tcp LISTEN 0 10 127.0.0.1:3268 0.0.0.0:* users:(("ldap(3",pid=707,fd=33),("ldap(2",pid=705,fd=33),("ldap(1",pid=703,fd=33),("ldap(0",pid=701,fd=33),("ldap[master]",pid=653,fd=33)) ino:25141 sk:24 <-> tcp LISTEN 0 10 10.10.10.220:3269 0.0.0.0:* users:(("ldap(3",pid=707,fd=38),("ldap(2",pid=705,fd=38),("ldap(1",pid=703,fd=38),("ldap(0",pid=701,fd=38),("ldap[master]",pid=653,fd=38)) ino:25146 sk:25 <-> tcp LISTEN 0 10 10.10.10.220:389 0.0.0.0:* users:(("ldap(3",pid=707,fd=35),("ldap(2",pid=705,fd=35),("ldap(1",pid=703,fd=35),("ldap(0",pid=701,fd=35),("ldap[master]",pid=653,fd=35)) ino:25143 sk:26 <-> tcp LISTEN 0 10 127.0.0.1:3269 0.0.0.0:* users:(("ldap(3",pid=707,fd=34),("ldap(2",pid=705,fd=34),("ldap(1",pid=703,fd=34),("ldap(0",pid=701,fd=34),("ldap[master]",pid=653,fd=34)) ino:25142 sk:27 <-> tcp LISTEN 0 10 127.0.0.1:389 0.0.0.0:* users:(("ldap(3",pid=707,fd=30),("ldap(2",pid=705,fd=30),("ldap(1",pid=703,fd=30),("ldap(0",pid=701,fd=30),("ldap[master]",pid=653,fd=30)) ino:25139 sk:28 <-> tcp LISTEN 0 10 10.10.10.220:135 0.0.0.0:* users:(("rpc(0",pid=655,fd=35)) ino:24759 sk:29 <-> tcp LISTEN 0 10 127.0.0.1:135 0.0.0.0:* users:(("rpc(0",pid=655,fd=34)) ino:24758 sk:2a <-> tcp LISTEN 0 50 127.0.0.1:139 0.0.0.0:* users:(("smbd",pid=646,fd=50)) ino:25096 sk:2b <-> tcp LISTEN 0 50 10.10.10.220:139 0.0.0.0:* users:(("smbd",pid=646,fd=48)) ino:25094 sk:2c <-> tcp LISTEN 0 10 10.10.10.220:464 0.0.0.0:* users:(("kdc(3",pid=685,fd=41),("kdc(2",pid=681,fd=41),("kdc(1",pid=676,fd=41),("kdc(0",pid=671,fd=41),("kdc[master]",pid=663,fd=41)) ino:23950 sk:2d <-> tcp LISTEN 0 10 127.0.0.1:464 0.0.0.0:* users:(("kdc(3",pid=685,fd=37),("kdc(2",pid=681,fd=37),("kdc(1",pid=676,fd=37),("kdc(0",pid=671,fd=37),("kdc[master]",pid=663,fd=37)) ino:23946 sk:2e <->
DNS-Tests¶
Das Funktionieren der Namens-Auflösung innerhalb einer Active Directory Domäne ist für deren Betrieb essentiell. Rechner, die der Domäne beitreten wollen oder die bereits Mitglied der Domäne sind kommunizieren mit den einzelnen Diensten des Active-Directory-Servers ausschließlich über den DNS-Namen der jeweiligen Dienste. Daher ist es zweckmäßig, die korrekte Namens-Auflösung der Acitve-Directory-Dienste vorab zu überprüfen:
Namensauflösung des Active-Directory-Servers:
host adc01
Korrekte Rückmeldung:
adc01.heim.lan has address 10.10.20.220
Namensauflösung des FQDN des Active-Directory-Servers:
host -t A adc01.heim.lan
Korrekte Rückmeldung:
adc01.heim.lan has address 10.10.20.220
Namensauflösung des LDAP-Dienstes:
host -t SRV _ldap._tcp.heim.lan
Korrekte Rückmeldung:
_ldap._tcp.heim.lan has SRV record 0 100 389 adc01.heim.lan.
Namensauflösung des Kerberos-Dienstes über UDP:
host -t SRV _kerberos._udp.heim.lan
Korrekte Rückmeldung:
_kerberos._udp.heim.lan has SRV record 0 100 88 adc01.heim.lan.
Namensauflösung des Kerberos-Dienstes über TCP:
host -t SRV _kerberos._tcp.heim.lan
Korrekte Rückmeldung:
_kerberos._tcp.heim.lan has SRV record 0 100 88 adc01.heim.lan.
Namensauflösung des Global-Catalog-Dienstes
host -t SRV _gc._tcp.heim.lan
Korrekte Rückmeldung:
_gc._tcp.heim.lan has SRV record 0 100 3268 adc01.heim.lan.
Verfügbarkeit der Samba-AD-Server Standardfreigaben¶
smbclient -L adc01 -Uadministrator
Korrekte Rückmeldung:
Sharename Type Comment --------- ---- ------- sysvol Disk netlogon Disk IPC$ IPC IPC Service (Samba 4.13.14-Ubuntu) SMB1 disabled -- no workgroup available
Die beiden Freigaben sysvol und netlogon sind die zwei wesentlichen Standardfreigaben auf einem Active Directory Server, denen wesentliche Verwaltungsfunktion zukommt. Sie sollten auf gar keinen Fall als normale Daten-Dateifreigaben genutzt werden!
Siehe zu sysvol und netlogon auch: Active Directory: SYSVOL and NETLOGON 🇬🇧
Hinweis:
Auf einem Active Directory Server sollten keine Daten-Freigaben eingerichtet werden. Es sollte statt dessen ein weiterer dezidierter Daten-Freigabe-Server (File-Server) eingerichtet und der Active Directory Domäne hinzugefügt werden.
Siehe auch: Using the Domain Controller as a File Server
Kerberos testen¶
Kerberos-Ticket für das Domänen-Administrator-Konto anfordern:
kinit administrator
administrator@HEIM.LAN's Password:
Informationen zum angeforderten Ticket anzeigen:
klist
Credentials cache: FILE:/tmp/krb5cc_1000 Principal: administrator@HEIM.LAN Issued Expires Principal Feb 24 22:44:56 2022 Feb 25 08:44:56 2022 krbtgt/HEIM.LAN@HEIM.LAN
Das Ticket für die Authentifizierung zur Nutzung des Befehls smbclient
nutzen:
smbclient -L adc01 -k
Sharename Type Comment --------- ---- ------- sysvol Disk netlogon Disk IPC$ IPC IPC Service (Samba 4.13.14-Ubuntu) SMB1 disabled -- no workgroup available
Test des LDAP-Servers¶
Schließlich testest man noch die Erreichbarkeit des LDAP-Servers:
ldbsearch -H ldap://adc01 "cn=administrator" -Uadministrator
Korrekte Rückmeldung:
Password for [HEIM\administrator]: # record 1 dn: CN=Administrator,CN=Users,DC=heim,DC=lan objectClass: top objectClass: person objectClass: organizationalPerson objectClass: user cn: Administrator description: Built-in account for administering the computer/domain instanceType: 4 whenCreated: 20211201175915.0Z uSNCreated: 3853 name: Administrator objectGUID: 5e10a051-8704-476a-8522-e6ff197a0902 userAccountControl: 512 badPwdCount: 0 codePage: 0 countryCode: 0 badPasswordTime: 0 lastLogoff: 0 primaryGroupID: 513 objectSid: S-1-5-21-681911137-2821365138-900175501-500 adminCount: 1 accountExpires: 9223372036854775807 sAMAccountName: Administrator sAMAccountType: 805306368 objectCategory: CN=Person,CN=Schema,CN=Configuration,DC=heim,DC=lan isCriticalSystemObject: TRUE memberOf: CN=Domain Admins,CN=Users,DC=heim,DC=lan memberOf: CN=Schema Admins,CN=Users,DC=heim,DC=lan memberOf: CN=Enterprise Admins,CN=Users,DC=heim,DC=lan memberOf: CN=Group Policy Creator Owners,CN=Users,DC=heim,DC=lan memberOf: CN=Administrators,CN=Builtin,DC=heim,DC=lan lastLogonTimestamp: 132902126740292890 pwdLastSet: 132902126888430960 whenChanged: 20220224214448.0Z uSNChanged: 4078 lastLogon: 132903607575747530 logonCount: 28 distinguishedName: CN=Administrator,CN=Users,DC=heim,DC=lan # Referral ref: ldap://heim.lan/CN=Configuration,DC=heim,DC=lan # Referral ref: ldap://heim.lan/DC=DomainDnsZones,DC=heim,DC=lan # Referral ref: ldap://heim.lan/DC=ForestDnsZones,DC=heim,DC=lan # returned 4 records # 1 entries # 3 referrals
Einrichtung einer DNS-Reverse-Lookup-Zone¶
DNS ist in erster Linie dazu da, um leicht merkbare Namen in weniger leicht merkbare IP-Adressen aufzulösen. Diese Art der Zuordnung wird auch als Vorwärtessuche (engl. "Forward Lookup") bezeichnet. Daneben kann DNS aber auch in umgekehrter (engl. "reverse") Reihenfolge IP-Adressen zu den aktuell zugehörigen Namen zuordnen.
Die Einträge für die Vorwärtssuche werden im Samba-DNS-Server in der "Forward Lookup-Zone" verwaltet. Diese Zone wird beim Provisionieren des Samba-AD-Server standardmäßig automatisch angelegt.
Die für die Rückwärtssuche benötigte sog. "Reverse-Lookup-Zone" muss man dagegen zunächst erst noch anlegen.
Der Name der Reverse-Lookup-Zone folgt dabei für ein /24-Subnetz dem folgenden Schema:
IP-Oktett3.IP-Oktett2.IP-Okttet1.in-addr.arpa
Im vorliegenden Fall also:
20.10.10.in-addr.arpa
Für weitere Details siehe Administering DNS on Linux/Unix with samba-tool 🇬🇧.
Mit dem folgenden Befehl erstellt man dann die Reverse-Lookup-Zone:
samba-tool dns zonecreate adc01 20.10.10.in-addr.arpa -Uadministrator
Korrekte Rückmeldung:
Password for [HEIM\administrator]: Zone 20.10.10.in-addr.arpa created successfully
Dann fügt man der Reverse-Zone ein PTR-Eintrag für den AD-Server hinzu:
samba-tool dns add adc01.heim.lan 20.10.10.in-addr.arpa 220 PTR adc01.heim.lan -Uadministrator
Korrekte Rückmeldung:
Password for [HEIM\administrator]: Record added successfully
Mit dem folgenden Befehl lässt sich die gerade erstellte Reverse-Lookup-Zone nebst dem gerade angelegten PTR-Eintrag für den AD-Server auflisten:
samba-tool dns query adc01 20.10.10.in-addr.arpa @ ALL -Uadministrator
Korrekte Rückmeldung:
Password for [HEIM\administrator]: Name=, Records=2, Children=0 SOA: serial=2, refresh=900, retry=600, expire=86400, minttl=3600, ns=adc01.heim.lan., email=hostmaster.heim.lan. (flags=600000f0, serial=2, ttl=3600) NS: adc01.heim.lan. (flags=600000f0, serial=1, ttl=3600) Name=220, Records=1, Children=0 PTR: adc01.heim.lan (flags=f0, serial=2, ttl=900)
Nun kann man die Rückwärtsauflösung testen:
host 10.10.20.220
Korrekte Rückmeldung:
220.20.10.10.in-addr.arpa domain name pointer adc01.heim.lan.
Hinweis:
Während beim späteren Hinzufügen eines Rechners oder eines Servers zum Active Directory DNS-Einträge für die Forward Lookup Zone in der Regel automatisch erstellt werden, müssen die Einträge für die Reverse Lookup Zone standardmäßig händisch angelegt werden.
Einen Ansatz zur Automatisierung diese Porzesses erhält man unter Configure DHCP to update DNS records 🇬🇧 im Samba-Wiki.
Konfiguration des NTP-Servers¶
Da es für die erfolgreiche Kerberos-Authentifizierung von Client-Rechnern und Benutzern am Active Directory Server auch wesentlich auf die korrekte Systemzeit ankommt, installiert und konfiguriert man auf dem AD-Server noch einen Zeitserver.
Im folgenden wird dazu ntpd verwendet.[8] Es könnte stattdessen aber auch chrony verwendet werden. Eine Übersicht, welcher Zeit-Server-Dienst, welche Funktionen bietet, findet man unter Comparison of NTP implementations 🇬🇧.
Für ntpd erstellt man eine neue /etc/ntp.conf
sudo nano /etc/ntp.conf
und fügt die nachfolgende Konfiguration ein:
server 127.127.1.0 fudge 127.127.1.0 stratum 10 server 0.de.pool.ntp.org iburst prefer server 1.de.pool.ntp.org iburst prefer server 2.de.pool.ntp.org iburst prefer driftfile /var/lib/ntp/ntp.drift logfile /var/log/ntp ntpsigndsocket /var/lib/samba/ntp_signd/ restrict default kod nomodify notrap nopeer mssntp restrict 127.0.0.1 restrict 0.de.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery restrict 1.de.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery restrict 2.de.pool.ntp.org mask 255.255.255.255 nomodify notrap nopeer noquery
Damit die in der Konfiguration festgelegte Signd-Socket-Verbindung zwischen ntpd und samba-ad-dc funktioniert, müssen die Rechte für das Verzeichnis /var/lib/samba/ntp_signd noch wie folgt angepasst werden:
sudo chgrp ntp /var/lib/samba/ntp_signd sudo chmod g+rx /var/lib/samba/ntp_signd
Desweiteren muss man noch dafür sorgen, dass bei einem Neustart des AD-Servers die ntp.service Unit richtig starten kann. Denn da der AD-Server für die DNS-Namensauflösung auf sich selbst zeigt, können die externen Zeitserver erst abgefragt werden, nachdem der Samba-interne DNS-Server die Namen auch tatsächlich auflösen kann. Dazu legt man mittels
sudo systemctl edit ntp.service
eine /etc/systemd/system/ntp.service.d/override.conf mit dem folgenden sog. Drop-In an:
[Service] ExecStartPre=/bin/bash -c 'until host adc01.heim.lan; do sleep 1; done'
Dies sorgt dafür, dass vor dem eigentlichen Start-Befehl der ntp.service Unit solange versucht wird den Namen des AD-Servers aufzulösen, bis der Samba-interne DNS-Server erfolgreich darauf antwortet.
Nach diesen Anpassungen kann der NTP-Server neu gestartet werden:
sudo systemctl restart ntp.service
Außerdem muss man die Service-Einheit noch aktivieren, damit sie auch bei einem Neustart des Servers wieder mit startet:
sudo systemctl enable ntp.service
Während der Installation des Paketes ntp wird die Zeitzone auf UTC gesetzt, weil das NTP-Protokoll ausschließlich in UTC-Zeit arbeitet. Möchte man am Server eine andere Zeitzone nutzen, so kann man diese einfach mit dem Kommando timedatectl setzen, für die Zeitzone Europa/Berlin geht dies mittels[9]:
sudo timedatectl set-timezone Europe/Berlin
Anschließend kann man die Änderung überprüfen:
timedatectl
Rückmeldung:
Local time: Mi 2022-03-02 17:30:40 CEST Universal time: Mi 2022-03-02 15:30:40 UTC RTC time: Mi 2022-03-02 15:30:40 Time zone: Europe/Berlin (CEST, +0200) System clock synchronized: yes NTP service: n/a RTC in local TZ: no
Test des NTP-Servers¶
Die Funktionsfähigkeit des NTP-Servers kann mit den folgenden Befehlen überprüft werden:
Status der NTP-Service-Unit abfragen:
systemctl status ntp.service
Die Rückmeldung sollte ähnlich der folgenden aussehen:
● ntp.service - Network Time Service Loaded: loaded (/lib/systemd/system/ntp.service; enabled; vendor preset: enabled) Drop-In: /etc/systemd/system/ntp.service.d └─override.conf Active: active (running) since Sat 2022-02-26 15:03:11 CET; 25s ago Docs: man:ntpd(8) Process: 426 ExecStartPre=/bin/bash -c until host adc01.heim.lan; do sleep 1; done (code=exited, status=0/SUCCESS) Process: 558 ExecStart=/usr/lib/ntp/ntp-systemd-wrapper (code=exited, status=0/SUCCESS) Main PID: 566 (ntpd) Tasks: 2 (limit: 4646) Memory: 8.8M CGroup: /system.slice/ntp.service └─566 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 109:118 Feb 26 15:03:06 adc01 systemd[1]: Starting Network Time Service... Feb 26 15:03:11 adc01 bash[429]: adc01.heim.lan has address 10.10.10.95 Feb 26 15:03:11 adc01 ntpd[563]: ntpd 4.2.8p12@1.3728-o (1): Starting Feb 26 15:03:11 adc01 ntpd[563]: Command line: /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 109:118 Feb 26 15:03:11 adc01 systemd[1]: Started Network Time Service. Feb 26 15:03:11 adc01 ntpd[566]: proto: precision = 0.051 usec (-24) Feb 26 15:03:11 adc01 ntpd[566]: MS-SNTP signd operations currently block ntpd degrading service to all clients. Feb 26 15:03:11 ads01 ntpd[566]: restrict default: KOD does nothing without LIMITED. Feb 26 15:03:14 ads01 ntpd[566]: switching logging to file /var/log/ntp
Synchronisation mit einem NTP-Internet-Server testen:
ntpq -pn
Die Rückmeldung sollte der folgenden Ausgabe ähneln:
remote refid st t when poll reach delay offset jitter ============================================================================== +81.6.42.224 193.5.216.14 2 u 68 1024 377 158.995 51.220 50.287 *217.162.232.173 130.149.17.8 2 u 191 1024 176 79.245 3.589 27.454 -129.132.57.95 131.188.3.222 3 u 766 1024 377 22.302 -2.928 0.508
Die IP-Adressen werden dabei mit hoher Wahrscheinlichkeit von den hier gezeigten abweichen. Wichtig ist nur, dass vor einer der Zeilen ein *
angezeigt wird. Siehe auch Wie benutze ich pool.ntp.org?
Neustart des Servers¶
Der AD-DC-Server ist damit erfolgreich eingerichtet und getestet. Abschließend sollte man den Server nun noch neu starten, um zu prüfen, dass dabei auch alle Dienste wie erwartet automatisch und sauber neu gestartet werden:
sudo reboot
Nächste Schritte¶
Nachdem der Server neu gestartet wurde, hat man einen grundsätzlich funktionierenden Samba Active Directory Server. Allerdings hat man damit noch kein System, das man sofort produktiv einsetzen sollte! Außerdem gibt es z.B. außer dem Administrator-Konto noch kein weiteres nutzbares Benutzer-Konto. D.h. die eigentliche administrative Arbeit fängt jetzt erst so richtig an.
DNS-Server-Verteilung¶
Wie weiter oben bereits geschildert, ist im Active Directory die korrekte Namensauflösung grundlegend für die korrekte Funktion des Active Directory. Damit Rechner oder Server in die Active Directory Domäne aufgenommen werden bzw. mit dieser in Kontakt treten können, muss ihnen stets der Samba-Active-Directory-Server als DNS-Server mitgeteilt werden. Im vorliegenden Fall haben wir den Internet-Router sowohl als Gateway, als auch als DNS-Forward-Server eingetragen. Standardmäßig ist bei Internet-Routern heute auch ein DHCP-Server aktiv. Dieser muss fortan den Samba-Server als primären DNS-Server verteilen. Wie dies genau erfolgt, kann in der Dokumentation des jeweiligen Internet-Routers nachgeschlagen werden.
Lässt sich im Internet-Router der lokal zu nutzende DNS-Server nicht konfigurieren, so kann man den Samba-AD-Server entweder manuell in der DNS-Konfiguration der Clients festlegen. Siehe dazu z.B.:
Ubuntu Desktops: DNS-Server manuell unter Ubuntu-Desktop festlegen (Bebilderte Anleitung) 🇬🇧
Windows 10 Clients: Windows 10: So ändert ihr den DNS-Server für eure Internetverbindung (Bebilderte Anleitung) 🇩🇪
Hinweis:
Windows Rechner lassen sich erst der Version "Professionell" zu einer Domäne hinzufügen!
Alternativ kann man einen eigenen DHCP-Server einrichten und darüber den DNS-Server verteilen. Speziell für Samba siehe dazu auch:
Weitere administrative Aufgabenstellungen¶
Die administrativen Tätigkeiten, die mit dem Betriebe eines Active Directory Servers einhergehen sind vielseitig und können einen erheblichen Komplexitäts-Grad erreichen. Daher sollte man sich insbesondere mit den folgenden Themen auseinandersetzen:
Planung einer auf das Anwendungsszenario zugeschnittenen Domänen-Struktur
Administrations-Werkzeuge:
Administration von Benutzern, Gruppen
Hinzufügen von Client-Computern und Servern
Join Ubuntu 20.10 Desktop in Active Directory Domain during Setup 🇬🇧
Beachte dazu aber unbedingt:
Ubuntu User können sich nicht am Ubuntu samba AD-DC anmelden 🇩🇪
Vertrautmachen mit dem Rechtesystem in einer Windows-Domäne
Administration des DNS-Servers
Einrichtung einer Sicherung für den Active Directory Server
Erörterung sicherheitsrelevanter Aspekte
Vertrautmachen mit dem Protokollierungssystem
Links¶
Quellen extern¶
Samba-Wiki 🇬🇧 - Das original Samba-Wiki
Samba Release Planning 🇬🇧 - Über den Zyklus der Veröffentlichung und die Unterstützung von Samba-Versionen
Setting up Samba as an Active Directory Domain Controller 🇬🇧 - Anleitung zur Installation eines Active Directory Domain Controllers im Samba-Wiki
Active Directory Naming FAQ 🇬🇧 - Häufige Fragen und Antworten zur Namensgebung im Active Directory
Setting up RFC2307 in AD 🇬🇧 - RFC2307 im Active Directory nutzen
Samba Internal DNS Back End 🇬🇧 - Der Samba-interne DNS-Server
Time Synchronisation 🇬🇧 - Zeitsynchronisierung
Samba AD DC Port Usage 🇬🇧 - Übersicht über die von einem AD-Server genutzen Ports
Testing the DNS Name Resolution 🇬🇧 - Ordnungsgemäße Funktion des DNS-Servers prüfen
AD Schema Version Support 🇬🇧 - Die von Samba unterstüzten Active Directory Schemata
Samba AD DC Troubleshooting 🇬🇧 - Samba Active Directory Domain Controller - Problemlösungen
Passwords must meet complexity requirements 🇬🇧 - MS Technet - Standard Passwort-Komplexitäts-Richtlinie im Active Direcoty
Weiterführende Informationen¶
BSI-Kompendium Active Directory 🇩🇪 - Grundschutz-Kompendium des BSI zum Active Directory (Stand: 2021)
DNS Administration 🇬🇧 - Administration des DNS-Servers
Configure DHCP to update DNS records 🇬🇧 - DNS-Einträge mittels DHCP-Server aktuallisieren
Generating Keytabs 🇬🇧 - Erstellen einer Kerberos Keytab-Datei
Samba-AD-Server_unter_Ubuntu_20.04/Tipps - Ergänzungen zu diesem Howto
Howto-Liste - Übersicht aller Howto-Artikel