Windows Active Directory mit Samba unter Linux
Um einen eigenen Active Directory (AD) Domain Controller, ist es nicht zwangsläufig erforderlich sich eine teure Windows Server Lizenz zu beschaffen. In kleineren Umgebungen reicht in vielen Fällen auch eine AD Installation mit dem kostenlosen Samba-Tool unter Linux aus.
In unserem Beispiel möchten wir Samba in einer frisch installieren Ubuntu-VM konfigurieren. Das Original dieser Anleitung gibt es in englischer Sprache auf dem wiki des Samba Projektes unter folgendem Link:
https://wiki.samba.org/index.php/Setting_up_Samba_as_an_Active_Directory_Domain_Controller
Wir setzen vorraus, dass eine aktuelle Ubuntu Distribution als Server-Variante (ohne grafische Oberfläche) installiert wurde. Um eine reibungslose Installation zu bewerkstelligen, sind folgende Vorarbeiten notwendig:
1. Hosts-Eintrag und Hostname
/etc/hosts wie folgt editieren:
192.168.177.2 ad.blu-it-consulting.de ad
Als nächstens den Hostnamen festlegen:
echo "ad.blu-it-consulting.de" > /etc/hostname
hostname -f ad.blu-it-consulting.de
Prüfen, dass der Domain-Name korekt aufgelöst wird:
ping ad.blu-it-consulting.de
2. Statische IP-Adresse vergeben:
Am Besten beim Aufsetzen der Linux-Maschine darauf achten, dass wir mit einer statischen IP-Adresse arbeiten, in unserem Fall 192.168.177.2. Wie dies am besten geht, bitte der Doku der jeweiligen Linux-Distribution entnehmen.
3. DNS Resolver Tools |DNS Cache Tools deaktivieren:
Es ist ganz wichtig, darauf zu achten, dass keine DNS-Resolver-Tools wie systemd-resolved.service oder DNS-Cache Tools wie dnsmask oder unbound auf dem System laufen. Ist der TCP/UDP Port 53 blockiert, lässt sich der Samba AD-Controller nicht starten!
Der Befehl:
netstat -tulpn | grep 53
alternativ:
ss -tulpn | grep 53
darf keine aktive Anwendung auf dem Port anzeigen.
4. Prüfen, dass keine Samba Instanz bereits läuft
Diese Schritte sind insbersondere sehr wichtig, wenn ein vorheriger Provisioning Versuch nicht geklappt hat.
Prüfen, dass keine Samba-Prozesse laufen:
ps ax | egrep "samba|smbd|nmbd|winbindd"
5. Samba Pakete installieren:
An dieser Stelle können wir die eigentlichen Pakete von Samba installieren.
apt install samba samba-common libnss-winbind winbind
Existierende smb.conf löschen
Achtung: Bereits mit der Standard-Installation wird eine smb.conf Datei unter /etc/samba angelegt. Diese muss vor dem Prosioning entfernt werden:
Samba-Config-File anzeigen lassen.
smbd -b | grep "CONFIGFILE"
CONFIGFILE: /etc/samba/smb.conf
In diesem Fall muss die Datei mitrm /etc/samba/smb.conf
gelöscht werden
Vorherige Samba Datenbanken löschen:
Diese sollten nur vorhanden sein, wenn eine Domain Provisionierung bereits durchgeführt wurde. Bei einer frischen Erstinstallation kann dieser Schritt übersprungen werden.
# smbd -b | egrep "LOCKDIR|STATEDIR|CACHEDIR|PRIVATE_DIR"
LOCKDIR: /usr/local/samba/var/lock/
STATEDIR: /usr/local/samba/var/locks/
CACHEDIR: /usr/local/samba/var/cache/
PRIVATE_DIR: /usr/local/samba/private/
Eventuell vorhandele Kerberos-Installation löschen:
rm /etc/krb5.conf
6. Provisionierung eines primärem Samba AD Domain Controllers.
Nun kommen wir zum eigentlichen Schritt, der Provisionierung (Ausrollen) der Samba AD Konfiguration. Hier gibt es entweder die Möglichkeit dies in einem interaktiven Modus zu tun:
samba-tool domain provision --use-rfc2307 --interactive
oder wir geben alle Parameter hintereinander an
samba-tool domain provision --server-role=dc --use-rfc2307 --dns-backend=SAMBA_INTERNAL --realm=AD.BLU-IT-CONSULTING.DE --domain=AD --adminpass=Passw0rd
Erläuterung: In unserem Beispiel veweden wir als DNS-Backend die Samba-interne Datenbank. Diese sollte für die meinsten Fälle ausreichen. Eine performantere Alternative bietet jedoch eine eigene Bind9 Instanz.
--dns-backend=BIND9_DLZ
Dies empfehlen wir nur Fortgeschrittenen Benutzern. Mehr Informationen zu Bind9 und Sama bietet das Samba Wiki:
https://wiki.samba.org/index.php/Setting_up_a_BIND_DNS_Server
DNS Fowarder IP: Dies ist die IP-Adresse an die ALLE DNS-Anfragen weitergeleitet werden, die nicht unserer AD Domain entsprechen, also z.B. alle DNS-Namensauflösungen im Internet. In unserem Fall übernimmt dies der lokale Router auf der Adresse 192.168.177.1
Ist die Provisionierung erfolgreich durchgelaufen, sieht das Ergebnis folgendermaßen aus:
samba-tool domain provision --use-rfc2307 --interactive
Realm: ad.blu-it-consulting.de
Domain [ad]:
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) [192.168.177.1]:
Administrator password:
Retype password:
Looking up IPv4 addresses
Looking up IPv6 addresses
No IPv6 address will be assigned
Setting up share.ldb
Setting up secrets.ldb
Setting up the registry
Setting up the privileges database
Setting up idmap db
Setting up SAM db
Setting up sam.ldb partitions and settings
Setting up sam.ldb rootDSE
Pre-loading the Samba 4 and AD schema
Adding DomainDN: DC=ad,DC=blu-it-consulting,DC=de
Adding configuration container
Setting up sam.ldb schema
Setting up sam.ldb configuration data
Setting up display specifiers
Modifying display specifiers
Adding users container
Modifying users container
Adding computers container
Modifying computers container
Setting up sam.ldb data
Setting up well known security principals
Setting up sam.ldb users and groups
Setting up self join
Adding DNS accounts
Creating CN=MicrosoftDNS,CN=System,DC=ad,DC=blu-it-consulting,DC=de
Creating DomainDnsZones and ForestDnsZones partitions
Populating DomainDnsZones and ForestDnsZones partitions
Setting up sam.ldb rootDSE marking as synchronized
Fixing provision GUIDs
A Kerberos configuration suitable for Samba 4 has been generated at /var/lib/samba/private/krb5.conf
Setting up fake yp server settings
Once the above files are installed, your Samba4 server will be ready to use
Server Role: active directory domain controller
Hostname: ad.blu-it-consulting.de
NetBIOS Domain: AD
DNS Domain: ad.blu-it-consulting.de
DOMAIN SID: S-1-5-21-631713858-1203367268-4102601509
An dieser Stelle sind wir tatsächlich schon fertig. Mit folgendem Befehl können wir kontrollieren, ob der Service korrekt läuft:
systemctl status samba-ad-dc.service
● samba-ad-dc.service - Samba AD Daemon
Loaded: loaded (/lib/systemd/system/samba-ad-dc.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2021-01-17 10:42:56 CET; 1 day 3h ago
Docs: man:samba(8)
man:samba(7)
man:smb.conf(5)
Main PID: 614 (samba)
Status: "smbd: ready to serve connections..."
Samba auf Funktionalität testen
Wir lassen uns die vom Domain Controller bereitgestellten Shares anzeigen
smbclient -L localhost -N
Anonymous login successful
Sharename Type Comment
--------- ---- -------
sysvol Disk
netlogon Disk
IPC$ IPC IPC Service (Samba 4.12.6-Debian)
SMB1 disabled -- no workgroup available
und verbinden wir uns zum Letlogon Usershare, um die Authentifizierung zu testen:
smbclient //localhost/netlogon -UAdministrator -c 'ls'
Enter PDC\Administrator's password:
. D 0 Wed Sep 12 22:05:55 2018
.. D 0 Fri Oct 4 16:34:05 2019
18874368 blocks of size 1024. 11340584 blocks available
DNS-Funktionalität testen
TCP basierter _ldap service (SRV) resource record testen:
host -t SRV _ldap._tcp.pdc.ludwig-fd.de.
_ldap._tcp.pdc.ludwig-fd.de has SRV record 0 100 389 odroid.pdc.ludwig-fd.de.
UDP basierter _kerberos SRV resource record testen:
host -t SRV _kerberos._udp.pdc.ludwig-fd.de. _kerberos._udp.pdc.ludwig-fd.de has SRV record 0 100 88
ad.blu-it-consulting.de.
A Record des Domain Controllers testen:
host -t A odroid.pdc.ludwig-fd.de.
ad.blu-it-consulting.de has address 192.168.177.2