(Windows) Domain Controller mit Samba 4
Derzeitige Umgebung:
- OS: Gentoo Linux
Kernel: 4.19.66 - meine Kernel-.config (als Proxmox-VM)
- Init-System: OpenRC (Gentoo Standard)
Samba installieren
Use flags:
- net-fs/samba: addc addns ads cups gnutls ldap python quota winbind
- sys-libs/ldb: python
- sys-libs/tdb: python
- sys-libs/tevent: python
- net-dns/bind-tools: gssapi
- app-text/ghostscript-gpl: cups
Installiere Samba:
emerge samba
Domain Controller einrichten
samba-tool domain provision --use-rfc2307 --interactive
Erklärung für die Parameter:
--use-rfc2307
- Dieser Parameter fügt POSIX Attribute (UID/GID) zume AD Schema hinzu. Damit können sich Linux, BSD, oder macOS Clients (inklusive des lokalen PCs) zusätzlich zu Windows Clients anmelden.
--interactive
Dieser Parameter sorgt dafür, daß die Konfiguration interaktiv abgefragt wird. Mit --help bekommt man Hilfe um die Daten auf der Kommandozeile direkt anzugeben.
Erklärung für die Rückfragen, die kommen:
Realm
INTERNAL.DOMAIN.COM
- Das sollte die DNS Domain in Großbuchstaben sein. Üblicherweise wird eine interne Sub-Domain verwendet um diese getrennt von der externen DNS-Domain zu halten. Die Trennung ist aber nicht verpflichtend.
Domain
INTERNAL - Hier ist der Netbios Donmainname anzugeben. Üblicherweise ist das der ganz linke Teil der obigen Sub-Domain, ist aber auch frei vergebbar. Zum Beispiel der Name INTERNAL ist nicht sehr aussagekräftig. Hier könnte der Firmenname oder Anfangsbuchstaben eines Namens sinnvoller sein. Auf jeden Fall muß er in Großbuchstaben eingegeben werden und darf maximal 15 Zeichen lang sein um ältere Clients zu unterstützen.
Server Role
- dc - Einrichtung als ersten Domain Controller. Die anderen Werte stellen andere Funktionalitäten bereit, die hier nicht behandelt werden.
DNS Backend
BIND9_DLZ oder SAMBA_INTERNAL - Das ist abhängig von persönlichen Vorlieben. Wenn dieser Server externe DNS-Domains unterstützen soll sollte der BIND9_DLZ-Backend verwendet werden Näheres in [1]. Ansonsten sollte SAMBA_INTERNAL angegeben werden.
DNS Forwarder
- Namen, die nicht hier aufgelöst werden können, werden an den DNS Forwarder weitergereicht.
Administrator password
- xxxxxxxx - Für den Administrator ist ein Paßwort anzugeben. Es muß bestimmte Kriterien erfüllen. Standardmäßig muß es einen Großbuchstaben, eine Zahl und eine Mindestlänge von 8 Zeichen haben.
Danach muß die Kerberos-Konfiguration kopiert werden:
cp /var/lib/samba/private/krb5.conf /etc
Systemkonfiguration
NTP-Server
Windows Domain Controller und -Clients sind sehr abhängig von der korrekten Zeit. Abweichungen führen oft zu merkwürdigen Fehlermeldungen.
emerge net-misc/ntp
Und aktivieren:
rc-update add ntpd default rc-service ntpd start
DNS Resolver
DNS-Anfragen müssen immer über den eigenen Resolver, der von Samba bereitgestellt wird, laufen.
- Option 1: Server hat eine statische IP-Adrese
- /etc/resolv.conf ändern und am Anfang folgendes hinzufügen:
# Falls IPv6 verwendet wird #nameserver ::1 nameserver 127.0.0.1
- /etc/resolv.conf.head mit folgendem Inhalt anlegen:
# Falls IPv6 verwendet wird #nameserver ::1 nameserver 127.0.0.1
- /etc/resolv.conf ändern und am Anfang folgendes hinzufügen:
Samba aktivieren und starten
/etc/conf.d/samba mu? angepaßt werden. Der Eintrag daemon_list muß so aussehen:
daemon_list="samba4"
Danach aktivieren und starten_
rc-update add samba default rc-service samba start
Einige Tests
Als Domain wird hier testweise internal.domain.com verwendet. Das muß durch den Wert ersetzt werden, der bei der Einrichtung verwendet wurde.
DNS
Überprüfung, on der DNS korrekt arbeitet:
host -t SRV _ldap._tcp.internal.domain.com. host -t SRV _kerberos._udp.internal.domain.com. host -t A server.internal.domain.com.
Das sollte dabei herauskommen:
_ldap._tcp.internal.domain.com has SRV record 0 100 389 server.internal.domain.com. _kerberos._udp.internal.domain.com has SRV record 0 100 88 server.internal.domain.com. server.internal.domain.com has address xxx.xxx.xxx.xxx
Windows NT Anmeldung
Die Windows-Anmeldung überprüft man so:
smbclient //localhost/netlogon -U Administrator -c 'ls'
Man wird nach dem Paßwort gefragt (wurde bei der Einrichtung abgefragt). Man sollte sowas bekommen:
. D 0 Fri Sep 6 17:42:35 2019 .. D 0 Fri Sep 6 17:42:38 2019 22510736 blocks of size 1024. 15418104 blocks available
Kerberos
Kerberos ist die Anmeldungsschicht. Die Domain muß in Großbuchstaben anagegeben werden:
kinit administrator@INTERNAL.DOMAIN.COM
Nach Eingabe des Paßwortes erhält man folgendes:
Warning: Your password will expire in 41 days on Wed 08 Jan 2014 11:59:11 PM CST
Um zu überprüfen ob alles geklappt (Ticket zugeteilt) hat:
klist
mit folgendem Ergebnis:
Ticket cache: FILE:/tmp/krb5cc_0 Default principal: administrator@INTERNAL.DOMAIN.COM Valid starting Expires Service principal 11/28/2013 00:22:17 11/28/2013 10:22:17 krbtgt/INTERNAL.DOMAIN.COM@INTERNAL.DOMAIN.COM renew until 11/29/2013 00:22:14
Als abschließenden Test ob die Ticketzuteilung ok ist:
smbclient //server/netlogon -k -c 'ls'
sollte man das hier bekommen:
. D 0 Fri Sep 6 17:42:35 2019 .. D 0 Fri Sep 6 17:42:38 2019 22510736 blocks of size 1024. 15418104 blocks available
Man wird nicht mehr nach dem Paßwort gefragt !
Konfigurationstips
Aktuelle (globale) Paßwortregeln abfragen:
samba-tool domain passwordsettings show Password informations for domain 'DC=xxxx,DC=yyyy' Password complexity: on Store plaintext passwords: off Password history length: 24 Minimum password length: 7 Minimum password age (days): 1 Maximum password age (days): 42 Account lockout duration (mins): 30 Account lockout threshold (attempts): 0 Reset account lockout after (mins): 30
Administratorpaßwort läuft nie ab:
samba-tool user setexpiry Administrator --noexpiry
Kennwortkomplexitätsregeln deaktivieren
samba-tool domain passwordsettings set --complexity=off
Kennwortchronik abschalten
samba-tool domain passwordsettings set --history-length=0
Minimales Kennwortalter deaktivieren
samba-tool domain passwordsettings set --min-pwd-age=0
Maximales Kennwortalter deaktivieren
samba-tool domain passwordsettings set --max-pwd-age=0
Minimale Kennwortlänge deaktivieren
samba-tool domain passwordsettings set --min-pwd-length=0
Zertifikate erneuern
Das standardmäßige Zertifikat finktioniert nicht mit Java-basierten Tools, da der Servername nicht drin ist. Daher muß man das Zertifikat ersetzen. Hier ein Beispiel für den Server dc.fritz.box
cd /var/lib/samba/private/tls rm *.pem openssl req -newkey rsa:2048 -keyout key.pem -nodes -x509 -days 365 -out cert.pem
Dabei wird man nach einigen Eingaben gefragt:
Generating a RSA private key .............................................................................................................................................+++++ ..............................+++++ writing new private key to 'key.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:BW Locality Name (eg, city) []:Stadt Organization Name (eg, company) [Internet Widgits Pty Ltd]:Private Organizational Unit Name (eg, section) []:Private Common Name (e.g. server FQDN or YOUR name) []:dc.fritz.box Email Address []:email
Da es kein CA-Zertifikat braucht muß man dieses in /etc/samba/smb.conf abschalten. Main fügt die Zeile
tls cafile =
im Abschnitt [global] hinzu.
Externe Verweise
Danke auch an die Autoren dieser Webseiten:
[1] https://wiki.archlinux.org/index.php/Samba/Active_Directory_domain_controller
[2] https://bytesandbones.wordpress.com/2018/03/28/gentoo-samba-4-5-as-dc-ad/
[3] https://www.oehl.tv/kennwortrichtlinien-anpassen/ [3] https://serverfault.com/questions/873615/ssl-self-signed-certificate-error-on-samba-4