Samba als eigenständiger Domänencontroller auf Windows NT-Art

ZIEL: Ein Windows XP Client soll in die Samba-Domäne nach alter PDC-Art aufgenommen werden, wobei die Nutzerdaten des Windows-Clients mitsamt seinem Profil auf dem Samba-Server gespeichert werden sollen (servergespeicherte Profile, engl.: roaming profiles).

Begiffe:

  • PDC - Primary Domain Controller

  • BDC - Backup Domain Controller (Replikation via ‚rsync‘)

Weiteres unter http://pemmann.de/cc/html/202.html#samba-4-in-der-rolle-eines-alten-pdc

Versionen: Verwendet wird dazu Debian 8 (Jessie) mit Samba 4.2

Installation

Es sind nur die üblichen Standard-Pakete erforderlich:

$# apt-get install samba smbclient

Konfiguration

$# cd /etc/samba/
$#
$# ls -l
insgesamt 36
-rw-r--r-- 1 root root   50 Jun 19 09:59 dhcp.conf
-rw-r--r-- 1 root root    8 Mai 18 07:00 gdbcommands
-rw-r--r-- 1 root root 9500 Jun 19 09:08 smb.conf
-rw-r--r-- 1 root root 9231 Jun 14 12:16 smb.conf.orig
drwxr-xr-x 2 root root 4096 Mai 21 18:02 tls
$#
$# mv smb.conf smb.conf_simple_shares
$#
$# vi smb.conf

Wir befüllen jetzt die neue Datei mit folgendem Inhalt:

[global]
# Wie bei Windows: Der Gast ist deaktiviert, Authentifizierung erforderlich!
#map to guest = bad user

# Für NetBIOS-Namensauflösung ist der NetBIOS-Domänenname ausreichend:
workgroup = DOM1
server role = classic primary domain controller

# Ich bin PDC:
domain logons = yes

# Einstellungen fürs Browsing
domain master = yes
local master = yes
preferred master = yes
os level = 255

# Übermittlung an Clients, welcher UNC-Pfad verwedet werden soll
#logon path = \\%L\profiles\%U
# Robustere Variante: Verschiedene Windows-Architekturen auseinandergehalten.
logon path = \\%L\profiles\%U\%a

[profiles]
comment = Profile Share
path = /srv/samba/profiles
writable = yes
profile acls = yes

[free4all]
path = /srv/samba/pub
public = yes
writable = yes

Nun können wir die Syntax testen:

$# testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[profiles]"
Processing section "[free4all]"
Loaded services file OK.
Server role: ROLE_DOMAIN_PDC

Press enter to see a dump of your service definitions

# Global parameters
[global]
    workgroup = DOM1
    server role = classic primary domain controller
    logon path = \\%L\profiles\%U\%a
    domain logons = Yes
    os level = 255
    preferred master = Yes
    domain master = Yes
    idmap config * : backend = tdb


[profiles]
    comment = Profile Share
    path = /srv/samba/profiles
    read only = No
    profile acls = Yes


[free4all]
    path = /srv/samba/pub
    read only = No
    guest ok = Yes
$#

Verzeichnisse anlegen:

$# mkdir -m 707 /srv/samba/profiles
$# mkdir -m 707 /srv/samba/pub

Maschinenaccount anlegen (Wir setzen hier voraus, das die Maschine ‚XPBOX‘ heißt):

$# groupadd machines
$# useradd -d /nodir -s /bin/false -g machines  XPBOX$
$#
$# smbpasswd -a -m XPBOX
Added user XPBOX$.
$#

HINWEIS: Anstelle die Maschinenaccounts manuell anzulegen, kann dies automatisch während des Domänenbeitritts geschehen. Dazu in der globalen Sektion der smb.conf einfach die Zeile add machine script = /usr/sbin/useradd %u hinzufügen.

Jetzt sind alle menschlichen und maschinellen Benutzer vorhanden, fehlt nur noch der Samba-Account für ‚root‘, der wenigstens temporär fürs Joining der Arbeitsstationen benötigt wird:

$# pdbedit -L
winuser01:1001:
root:0:root
XPBOX$:1003:
tux:1000:tux
max:1002:
$#

Neustarten der Dienste:

$# systemctl restart smbd.service
$# systemctl restart nmbd.service
$#
$# systemctl status smbd.service
● smbd.service - LSB: start Samba SMB/CIFS daemon (smbd)
Loaded: loaded (/etc/init.d/smbd)
Active: active (running) since Mo 2017-06-19 11:42:06 CEST; 19s ago
Process: 3033 ExecStop=/etc/init.d/smbd stop (code=exited, status=0/SUCCESS)
Process: 1430 ExecReload=/etc/init.d/smbd reload (code=exited, status=0/SUCCESS)
Process: 3037 ExecStart=/etc/init.d/smbd start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/smbd.service
        ├─3047 /usr/sbin/smbd -D
        └─3049 /usr/sbin/smbd -D

Jun 19 11:42:06 dns2 systemd[1]: Starting LSB: start Samba SMB/CIFS daemon (smbd)...
Jun 19 11:42:06 dns2 smbd[3037]: Starting SMB/CIFS daemon: smbd.
Jun 19 11:42:06 dns2 systemd[1]: Started LSB: start Samba SMB/CIFS daemon (smbd).
Jun 19 11:42:06 dns2 smbd[3047]: [2017/06/19 11:42:06.988384,  0] ../lib/util/become_daemon.c:124(daem...eady)
Jun 19 11:42:06 dns2 smbd[3047]: STATUS=daemon 'smbd' finished starting up and ready to serve connections
Hint: Some lines were ellipsized, use -l to show in full.
$#
$# systemctl status nmbd.service
● nmbd.service - LSB: start Samba NetBIOS nameserver (nmbd)
Loaded: loaded (/etc/init.d/nmbd)
Active: active (running) since Mo 2017-06-19 11:42:13 CEST; 30s ago
Process: 3054 ExecStop=/etc/init.d/nmbd stop (code=exited, status=0/SUCCESS)
Process: 3059 ExecStart=/etc/init.d/nmbd start (code=exited, status=0/SUCCESS)
CGroup: /system.slice/nmbd.service
        └─3070 /usr/sbin/nmbd -D

Jun 19 11:42:37 dns2 nmbd[3070]:
Jun 19 11:42:37 dns2 nmbd[3070]: Samba name server DNS2 is now a local master browser for workgroup DO....30.4
Jun 19 11:42:37 dns2 nmbd[3070]:
Jun 19 11:42:37 dns2 nmbd[3070]: *****
Jun 19 11:42:37 dns2 nmbd[3070]: [2017/06/19 11:42:37.018413,  0] ../source3/nmbd/nmbd_become_lmb.c:39...age2)
Jun 19 11:42:37 dns2 nmbd[3070]: *****
Jun 19 11:42:37 dns2 nmbd[3070]:
Jun 19 11:42:37 dns2 nmbd[3070]: Samba name server DNS2 is now a local master browser for workgroup DO...7.108
Jun 19 11:42:37 dns2 nmbd[3070]:
Jun 19 11:42:37 dns2 nmbd[3070]: *****
Hint: Some lines were ellipsized, use -l to show in full.
$#
$# pgrep -a mbd
3047 /usr/sbin/smbd -D
3049 /usr/sbin/smbd -D
3070 /usr/sbin/nmbd -D
$#

Als nächstes wollen wir per Namensauflösungsbroadcasts (‚nmblookup‘) den Domänenbeitritt versuchen.

Im Idealfall lässt sich unter Windows der NetBIOS-Hostname des Samba-Servers mit der ping-Option ‚-a‘ ermitteln:

c:\> ping -a <IP-DES-SAMBA-Servers>

Dies ist aber keine zwingende Vorbedingung, letztlich muss ja der Domänenname ‚DOM1‘ via NetBIOS Broadcasts gefunden werden.

Windows XP zur Domäne hinzufügen

Das Joining von Windows XP läuft wie folgt ab:

  • Rechtsklick auf Arbeitsplatz => Eigenschaften

  • Registerkarte „Computername“

  • Schalter „Ändern“

  • Bei „Mitglied von:“ tragen wir den NetBIOS-Namen der Domäne namens ‚DOM1‘ ein (siehe smb.conf => ‚workgroup = DOM1‘)

  • Es sollte sich sofort ein Popup auftun, in dem wir als ‚root‘ mit dem Samba-Passwort authentifizieren können

Hier können verschiedenste Fehler auftreten:

  1. Namensauflösung funktioniert nicht(egal ob NetBIOS oder DNS verwendet wird)

  2. Benutzer- und Maschinenkonten

    1. ‚root‘ muss als Samba-Account vorliegen

    2. Die Windows-Maschine muss genau so heißen, wie die definierten Maschinenaccounts:

Dann loggen wir als ‚tux‘ ein (ein Nutzer, den es nur auf dem PDC gibt)… und legen auf dem Desktop einen Ordner namens ‚TEST-ORDNER‘ an.

Wir kontrollieren die Verzeichnisstruktur VOR dem Abmelden des Nutzers:

$# ## Nach dem Einloggen von 'tux' auf Windows XP ('XPBOX'):
$#
$# ls -lR /srv/samba/profiles/
/srv/samba/profiles/:
insgesamt 8
drwxrwx--x+ 3 tux tux 4096 Jun 19 12:21 tux

/srv/samba/profiles/tux:
insgesamt 8
drwxrwx--x+ 2 tux tux 4096 Jun 19 12:21 WinXP

/srv/samba/profiles/tux/WinXP:
insgesamt 0
$#

Erst während dem Abmeldevorganges des Windows-Clients werden die Daten auf den Server kopiert:

$# ls -lR /srv/samba/profiles/ | grep -B5 -A5 TEST-ORDNER
insgesamt 16
-rwxrwxr--+ 1 tux tux 16384 Jun 19 12:21 index.dat

/srv/samba/profiles/tux/WinXP/Desktop:
insgesamt 8
drwxrwxr-x+ 2 tux tux 4096 Jun 19 12:23 TEST-ORDNER

/srv/samba/profiles/tux/WinXP/Desktop/TEST-ORDNER:
insgesamt 0

/srv/samba/profiles/tux/WinXP/Druckumgebung:
insgesamt 0

$#

Windows 7 zur Domäne hinzufügen

Grundsätzlich läuft bei Windows 7 alles genauso wie bei Windows XP, nur dass es eines Registry-Patches bedarf.

Zu diesem neuen Registry-Eintrag siehe https://wiki.samba.org/index.php/Required_Settings_for_Samba_NT4_Domains

Dazu bitte eine neue Datei beliebigen Namens anlegen, Endung: .reg, der Inhalt:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\LanManWorkstation\Parameters]

"DomainCompatibilityMode"=dword:00000001
"DNSNameResolutionRequired"=dword:00000000

Mit Doppenklick werden die Einstellungen in die Registry importiert. Das funktioniert auch mit der von Microsoft stammenden VM ‚IE11Win7“.

Windows 7 via DNS in die Domäne aufnehmen und betreiben

Datum: Dienstag, 20.06.2017

Dazu wird die von Microsoft vorinstallierte VM namens „IE11WIN7“ verwendet. Allerdings muss jetzt eine durchgängige Namensauflösung via DNS und unserem eigenen bind9-Daemon möglich sein. Die Aufnahme des Clients geschieht jetzt per FQDN der Domäne, also ‚DOM1.TEST‘. Das hat den Vorteil, dass keine Broadcast Domain in Erscheinung tritt, vielmehr ist nun ein Arbeiten über Routergrenzen hinweg möglich.

Als ersten Schritt müssen wir den Windows-Client in die DNS-Zonendatei eintragen und die Namensauflösung testen:

root@d81:~# echo 'IE11WIN7   IN   A   10.20.30.124' >  /etc/bind/db.dom1.test
root@d81:~#
root@d81:~# rndc reload
server reload successful
root@d81:~#
root@d81:~# host ie11win7
IE11WIN7.dom1.test has address 10.20.30.124
root@d81:~#
root@d81:~# ssh tux@smb1
tux@smb1's password:

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Jun 20 08:59:41 2017 from 10.20.30.3
tux@smb1:~$ su -
Passwort:
root@smb1:~#
root@smb1:~# ip -4 addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
    inet 127.0.0.1/8 scope host lo
    valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    inet 10.20.30.123/24 brd 10.20.30.255 scope global eth0
    valid_lft forever preferred_lft forever
root@smb1:~#
root@smb1:~# hostname -f
smb1.dom1.test
root@smb1:~#
root@smb1:~# host smb1
smb1.dom1.test has address 10.20.30.123
root@smb1:~#
root@smb1:~# host ie11win7
IE11WIN7.dom1.test has address 10.20.30.124
root@smb1:~#

Besonders wichtig ist, das alle Maschinen unseren Bind9-Nameserver benutzen. Das betrifft natürlich auch den Samba-Server:

root@smb1:~# cat /etc/resolv.conf
nameserver 10.20.30.3
search dom1.test
root@smb1:~#

Damit das Joining per Full Qualified Domain Name gelingt, müssen wir in der ‚smb.conf‘ beim Parameter ‚workgroup‘ tatsächlich auch den FDQN der Domäne notieren, d.h. wir ändern ihn auf workgroup = DOM1.TEST. Im Endeffekt sieht das so aus:

root@smb1:~# testparm -s
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
Processing section "[profiles]"
Processing section "[free4all]"
Loaded services file OK.
Server role: ROLE_DOMAIN_PDC

# Global parameters
[global]
    workgroup = DOM1.TEST
    server role = classic primary domain controller
    logon path = \\%L\profiles\%U\%a
    domain logons = Yes
    os level = 255
    preferred master = Yes
    domain master = Yes
    idmap config * : backend = tdb


[profiles]
    comment = Profile Share
    path = /srv/samba/profiles
    read only = No
    profile acls = Yes


[free4all]
    path = /srv/samba/pub
    read only = No
    guest ok = Yes
root@smb1:~#

Und natürlich müssen wir wieder einen entsprechenden Maschinenaccount anlegen:

$# useradd -d /nodir -s /bin/false -g machines  IE11WIN7$
$#
$# smbpasswd -a -m IE11WIN7
Added user IE11WIN7$.
$#

Wie üblich bitte nach größeren Änderungen die Daemons neu starten. Hier wird übrigens zumindestens für den Domänenbeitritt immer noch der ‚nmbd‘ benötigt, auch wenn das Ganze dann über routingfähiges DNS läuft:

root@smb1:~# systemctl restart nmbd.service
root@smb1:~# systemctl restart smbd.service

Auf dem Client ‚IE11WIN7‘

In der Konsole vorsichtshalber bitte ipconfig /flushdns ausführen.

Dann das Joining vornehmen:

  • Rechtsklick auf Computer => Eigenschaften

  • Registerkarte „Computername“

  • Schalter „Ändern“

  • Bei „Mitglied von:“ tragen wir diesmal den FQDN der Domäne namens ‚DOM1.TEST‘ ein (siehe smb.conf => ‚workgroup = DOM1.TEST‘)

  • Es sollte sich unmittelbar ein Popup auftun, in dem wir als ‚root‘ mit dem Samba-Passwort authentifizieren können. Der Vorgang des Beitretens kann ein wenig dauern…