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 mit
rm /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

Neuer Blog Online

Wir von BLU IT-Consulting möchten der Internet-Community und Technik-Entusiasten in unserem neuen Blog Wissen und Best Practises frei zur Verfügung stellen, um interessante Technologien auszuprobieren.

Daher werden in dieser Rubrik in regelmäßigen Abständen Anleitungen spannender OpenSource Proekte zur Verfügung stellen.