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:
- Microsoft Technet. „Understanding Active Directory Domain Services (AD DS) Functional Levels“.
URL (abgerufen am 19.10.2014): http://technet.microsoft.com/library/understanding-active-directory-functional-levels%28WS.10%29.aspx
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.
- SAMBA4 Domain Controller zu existierender W2012R2 AD Domäne hinzufügen
- Anmeldung von AD-Domänenbenutzern auf Linux mit SSSD und PAM
- Active Directory Member Server mit SAMBA4 und PAM-Winbind
- AD-Precreation using ktutil, kinit and adcli
- Taking an Online Backup of a SAMBA-4 ActiveDirectory
- Comparing Distinguished LDAP Names