Samba als eigenständiger Domänencontroller auf Windows NT-Art ############################################################# .. highlight:: shell-session 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: .. highlight:: bash :: [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: .. highlight:: shell-session :: $# 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 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 a) 'root' muss als Samba-Account vorliegen b) 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: 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: 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...