SAMBA4 Domain Controller zu existierender W2012R2 AD Domäne hinzufügen

Hinweis: Bei Verwendung der paketierten Version von SAMBA ändern sich die Pfade von /usr/local/samba zu den entsprechenden in /usr und /var.Insbesondere wird der Dienst nicht mit /usr/local/samba/sbin/samba gestartet (bzw. mit samba) sondern mit

systemctl start samba-ad-dc

Szenario

Ich habe eine Windows-Domäne MYDOM.LOCAL mit einem oder mehreren Domain Controllern (DC) mit Windows Server 2012R2 als Betriebssystem.

Ich will einen Domain Controller mit Debian GNU/Linux „jessie/sid“ als Betriebssystem und SAMBA4 hinzufügen.

Ein existierender DC mit W2012R2 hat die IP 192.168.2.5 und heisst WINDC.MYDOM.LOCAL.

Der neue DC mit SAMBA4 hat die IP 192.168.2.6 und soll LINDC.MYDOM.LOCAL heissen.

Hinweis (ab SAMBA Version 4.4 ist das Absenken der Funktionalitätsebene von 2012R2 auf 2008R2 nicht mehr zwingend erforderlich; diese sollte auf allen geläufigen Distris jetzt Standard sein. Über spätere Versionen von Windows Server kann ich keine Aussage machen):

Das folgende Verfahren funktioniert nur, wenn man in der existierenden Windows-AD-Domäne die Forest- und den Domain-Funktionalität auf Windows 2008R2 reduziert. Von Microsoft gibt es eine Übersicht, was die Funktionalitäts-Ebenen bedeuten und wie weit man sie auf den verschiedenen Versionen ihrer OS absenken kann:

In früheren SAMBA-Versionen (zuletzt versucht: 4.1.12 stable) kommt ein unbehandelter Ausnahmefehler „'drsuapi.DsBindInfoFallBack' object has no attribute 'supported_extensions'„, in der aktuellen Entwicklerversion kommt ein Fehlschlag mit Status „WERR_DS_INCOMPATIBLE_VERSION„.

Um die Funktionalitäts-Ebene abzusenken, muss man sich auf einem existierenden Windows-DC als Domänenbenutzer „Administrator“ anmelden (Konto ggf. aktivieren), PowerShell ausführen und dort folgende Kommandos ausführen:

Set-ADForestMode -Identity "mydom.local" -ForestMode Windows2008R2Forest
Set-ADDomainMode -Identity "mydom.local" -DomainMode Windows2008R2Domain

Vorbereitung: SAMBA4 installieren

Ich verwende die neueste Entwicklerversion (GIT) von SAMBA4:

 ~# git clone git://git.samba.org/samba.git samba
...
 ~# cd samba
 samba# ./configure --sysconfdir=/etc/samba
...
 samba# make
...
 samba# make install
...
 samba#

Ich habe bei configure mit Option --sysconfdir angegeben, dass ich die Konfigurationsdatei smb.conf im Verzeichnis /etc/samba haben möchte (statt in /usr/local/samba/etc). configure unterstützt noch weitere Optionen, mit denen sich auch die Datenbankverzeichnisse auf /var/lib, die Laufzeit-Tempfiles auf /var/run usw. umbiegen lassen. Genaueres dazu erfährt man mit

 samba# ./configure --help

Vorbereitung: Konfigurationsdatei für SAMBA4

Die Datei /etc/samba/smb.conf auf LINDC:

# Global parameters
[global]
        workgroup = MYDOM
        realm = MYDOM.local
        netbios name = LINDC
        server role = active directory domain controller

[netlogon]
        path = /usr/local/samba/var/locks/sysvol/mydom.local/scripts
        read only = No

[sysvol]
        path = /usr/local/samba/var/locks/sysvol
        read only = No

Vorbereitung: Nameserver

Ich füge den SAMBA4-DC von seiner eigenen Shell aus mit dem SAMBA-Werkzeugen hinzu. Dazu muss als Nameserver der WINDC verwendet werden. Also sieht die /etc/resolv.conf auf LINDC so aus:

nameserver 192.168.2.5

Vorbereitung: Kerberos

Die /etc/krb5.conf auf LINDC sieht so aus:

[libdefaults]
default_realm = MYDOM.LOCAL
dns_lookup_realm = true
dns_lookup_kdc = true

Ich teste auf LINDC, ob die Authentifizierung funktioniert:

 ~# kinit Administrator
Password for Administrator@MYDOM.LOCAL: ****
 ~# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: Administrator@MYDOM.LOCAL

Valid starting       Expires              Service principal
19.10.2014 18:36:59  20.10.2014 04:36:59  krbtgt/MYDOM.LOCAL@MYDOM.LOCAL
renew until 20.10.2014 18:36:56
 ~#

Domain-Join als Domain Controller

 ~# samba-tool domain join mydom.local DC -U Administrator

Fehlende Nameserver-Einträge hinzufügen

Auf WINDC lege ich in DNS erstmal einen A-Record für „lindc“ mit IP 192.168.2.6 an.

Falls noch nicht vorhanden lege ich auch eine Reverse-Lookup-Zone für 192.168.2 an und trage dort zwei PTR-Records mit 192.168.2.5 auf windc.mydom.local sowie 192.168.2.6 auf lindc.mydom.local ein.

Es fehlen noch die CNAME-Records, mit denen der DC via objectGUID aufgelöst werden kann. Dazu muss auf LINDC die Object-GUID ermittelt werden, die der neue DC bekommen hat:

 ~# ldbsearch -H /usr/local/samba/private/sam.ldb '(invocationid=*)' --cross-ncs objectguid
...
# record 2
dn: CN=NTDS Settings,CN=LINDC,CN=Servers,...usw...
objectGUID: 01234567-89ab-cdef-0123-456789abcdef

Jetzt kann ich die CNAME-Einträge anlegen:

 ~# samba-tool dns add \
    192.168.2.5 _msdcs.mydom.local \
    01234567-89ab-cdef-0123-456789abcdef CNAME lindc.mydom.local \
    -U Administrator

SAMBA4 starten

Damit ist alles vorbereitet, und ich brauche SAMBA4 nur noch zu starten:

 ~# /usr/local/samba/sbin/samba

Wenn das alles geklappt hat, sollte jetzt insbesondere die Replikation zwischen den DCs funktionieren, darüber kann ich einen Bericht anfordern mit:

 ~# samba-tool drs showrepl

Hinweis: Dabei kann als letzte Zeile folgende Warnung ausgegeben werden:

Warning: No NC replicated for Connection!

Dazu sagt das Internet: „This Warning is expected and completely harmless.“ – Hurra.

LINDC als eigenen Nameserver verwenden

Da SAMBA4 jetzt läuft, kann es auch DNS-Abfragen bedienen, und ich kann den LINDC sich selbst als Nameserver verwenden lassen. Dazu ändere ich die /etc/resolv.conf auf LINDC zu:

nameserver 192.168.2.6

sysvol von WINDC auf LINDC abgleichen

Da aufgrund einer Einschränkung in SAMBA4 die Freigabe sysvol (enthält die Group Policy) nicht automatisch zwischen WINDC und LINDC repliziert wird, muss das mit einem Skript erledigt werden.

Dazu hole ich erstmal die cifs-utils, damit ich mount.cifs zur Verfügung habe:

~# wget ftp://ftp.samba.org/pub/linux-cifs/cifs-utils/cifs-utils-6.4.tar.bz2
~# tar xvjf cifs-utils-6.4.tar.bz2
~# cd cifs-utils-6.4
cifs-utils-6.4# ./configure && make && make install

Dann hole ich mir die Freigabe „sysvol“ von WINDC:

~# mkdir -p /mnt/windc/sysvol
~# mount -t cifs -o user=administrator //windc/sysvol /mnt/windc/sysvol

Dann übertrage ich die Daten:

~# rsync -av /mnt/windc/sysvol/MYDOM.local /usr/local/samba/var/locks/sysvol/mydom.local

Dann lasse ich SAMBA4 die Permissions korrigieren:

~# samba-tool ntacl sysvolreset

Das kann man natürlich auch skripten, z.B. als Cronjob, der alle 5 Minuten läuft.

Hinweis: Ich habe es nicht selbst getestet, aber wenn man den Abgleich von \\WINDC\sysvol und \\LINDC\sysvol von einem Windows-Rechner aus erledigen möchte, soll das Tool „Robocopy“ dazu in der Lage sein, die Dateiberechtigungen korrekt zu erhalten.

Optional: FSMO-Rollen übertragen

Um zu zeigen, dass der neue DC funktionstüchtig ist, lasse ich ihn Betriebsmaster für alle FSMO-Rollen werden:

 ~# samba-tool fsmo seize --role=all

Das sollte anstandslos durchlaufen.