Samba-Domäne von Grund auf
| Kurs | Lab | Rechner | Domäne |
|---|---|---|---|
| Linux - Samba | Linux - Samba Lab | sdc1 · 10.2XX.1.21 | samba.it2XX.int |
Einfach erklärt
- Ein Domänencontroller (DC) ist die zentrale Stelle für Benutzer, Gruppen und Rechner eines Netzes.
- Er ist eigentlich vier Dienste in einem: DNS sagt, wo der DC ist, Kerberos stellt Tickets für die Anmeldung aus, LDAP speichert Benutzer und Rechner, und SMB liefert Gruppenrichtlinien und Anmeldeskripte aus.
- Samba bringt alle vier mit. Ein einziger Befehl, samba-tool domain provision, legt eine komplette Domäne an.
- Damit alles funktioniert, müssen drei Dinge stimmen: Name, DNS und Zeit. Fast jeder Fehler an einem DC lässt sich auf einen davon zurückführen.
Das Wichtigste
- Realm und NetBIOS-Name lassen sich später nicht mehr ändern. Vorher festlegen.
- Der DC braucht eine feste Adresse, und sein Name muss auf diese Adresse zeigen, nicht auf 127.0.0.1.
- Auf einem DC laufen nicht smbd, nmbd und winbind einzeln, sondern alles im Dienst samba-ad-dc.
- Der DC ist sein eigener DNS-Server. Was er nicht kennt, fragt er beim Forwarder nach.
- Kerberos verträgt höchstens 5 Minuten Zeitunterschied. Der DC verteilt die Zeit an die Clients, mit chrony und Signierung.
Deine Werte
- Siehe Lab. Für diese Seite:
source ~/.lab echo $SAMBA $SAMBA_REALM $SERVER samba.it201.int SAMBA.IT201.INT 10.201.1
| Wert | Beispiel lab01 |
|---|---|
| Rechner | sdc1 |
| Adresse | 10.201.1.21/24 |
| Gateway, DNS-Forwarder | 10.201.1.1 (Firewall) |
| DNS-Domäne | samba.it201.int |
| Realm | SAMBA.IT201.INT |
| NetBIOS-Domäne | SAMBA |
Vorbereitung
Feste Adresse
- /etc/network/interfaces
auto lo iface lo inet loopback auto enp0s3 iface enp0s3 inet static address 10.201.1.21/24 gateway 10.201.1.1
- Den Namen der Karte zeigt ip -br link.
Name
- Kurzer Name als Hostname, der volle Name kommt aus /etc/hosts:
- hostnamectl set-hostname sdc1
- /etc/hosts
127.0.0.1 localhost 10.201.1.21 sdc1.samba.it201.int sdc1
- Die Zeile 127.0.1.1 sdc1 aus der Debian-Installation muss weg.
- Prüfen:
hostname → sdc1 hostname -f → sdc1.samba.it201.int hostname -i → 10.201.1.21
DNS vorläufig
- Bis die Domäne steht, fragt sdc1 die Firewall:
- /etc/resolv.conf
nameserver 10.201.1.1 search samba.it201.int
- Kein Programm darf diese Datei überschreiben: kein NetworkManager, kein resolvconf, kein systemd-resolved.
Neu starten
- reboot
- Danach alles oben noch einmal prüfen.
Installation
- apt install samba-ad-dc krb5-user winbind libnss-winbind libpam-winbind smbclient chrony dnsutils ldb-tools acl attr
- krb5-user fragt nach dem Realm: SAMBA.IT201.INT eintragen. Die Fragen nach den Servern leer lassen, die Datei wird später ersetzt.
- Was jedes Paket tut:
| Paket | Wofür |
|---|---|
| samba-ad-dc | der Dienst samba-ad-dc und das Programm samba |
| krb5-user | kinit, klist zum Testen |
| winbind, libnss-winbind, libpam-winbind | Domänenbenutzer auf dem DC selbst sichtbar |
| smbclient | Freigaben testen |
| chrony | Zeit mit Signierung für die Clients |
| dnsutils | host, dig |
| ldb-tools | ldbsearch, direkt in die Datenbank schauen |
Einzeldienste abschalten
- Das Paket startet smbd, nmbd und winbind als normalen Dateiserver. Auf einem DC stören sie:
systemctl disable --now smbd nmbd winbind systemctl mask smbd nmbd winbind
- Die mitgelieferte Konfiguration zur Seite legen:
- mv /etc/samba/smb.conf /etc/samba/smb.conf.orig
Domäne anlegen
samba-tool domain provision \ --server-role=dc \ --use-rfc2307 \ --dns-backend=SAMBA_INTERNAL \ --realm=SAMBA.IT201.INT \ --domain=SAMBA \ --option="dns forwarder = 10.201.1.1"
| Option | Bedeutung |
|---|---|
| --server-role=dc | ein Domänencontroller |
| --use-rfc2307 | speichert Linux-Werte wie uidNumber und Shell im AD, nützlich für Linux-Clients |
| --dns-backend=SAMBA_INTERNAL | der eingebaute DNS-Server von Samba |
| --realm | DNS-Domäne in Großbuchstaben |
| --domain | NetBIOS-Name, höchstens 15 Zeichen, ohne Punkte |
| --option="dns forwarder = …" | wohin Anfragen gehen, die nicht zur Domäne gehören |
- Das Ende der Ausgabe:
Server Role: active directory domain controller Hostname: sdc1 NetBIOS Domain: SAMBA DNS Domain: samba.it201.int DOMAIN SID: S-1-5-21-…
- Kein Passwort auf der Kommandozeile (--adminpass): Es landet in der History und ist während des Laufs in ps sichtbar. Ohne die Option erzeugt provision ein Zufallspasswort. Danach selbst setzen:
- samba-tool user setpassword Administrator
Kerberos
- provision hat die passende krb5.conf erzeugt. Kopieren, keinen Link anlegen:
- cp /var/lib/samba/private/krb5.conf /etc/krb5.conf
[libdefaults]
default_realm = SAMBA.IT201.INT
dns_lookup_realm = false
dns_lookup_kdc = true
[realms]
SAMBA.IT201.INT = {
default_domain = samba.it201.int
}
[domain_realm]
sdc1 = SAMBA.IT201.INT
DNS auf sich selbst
- /etc/resolv.conf
nameserver 10.201.1.21 search samba.it201.int
- Ab jetzt beantwortet sdc1 alle DNS-Anfragen selbst und leitet fremde an die Firewall weiter.
Starten
systemctl unmask samba-ad-dc systemctl enable --now samba-ad-dc systemctl status samba-ad-dc
- unmask schadet nicht, falls der Dienst gar nicht maskiert ist.
Zeit mit chrony
- Windows-Clients wollen die Zeit vom DC signiert. chrony holt sich die Signatur über einen Socket von Samba.
- Den Socket legt Samba beim ersten Start an. Rechte für chrony setzen:
chown root:_chrony /var/lib/samba/ntp_signd chmod 750 /var/lib/samba/ntp_signd
- /etc/chrony/conf.d/samba.conf
server 10.201.1.1 iburst ntpsigndsocket /var/lib/samba/ntp_signd allow 10.201.1.0/24 allow 172.26.201.0/24
- systemctl restart chrony
- allow erlaubt den Clients aus SERVER und LAN, die Zeit abzufragen.
Prüfen
| Was | Befehl | Erwartet |
|---|---|---|
| Dienst läuft | systemctl is-active samba-ad-dc | active |
| Freigaben | smbclient -L localhost -N | sysvol, netlogon, IPC$ |
| Anmeldung | smbclient //localhost/netlogon -U Administrator -c ls | . und .. |
| LDAP-Eintrag | host -t SRV _ldap._tcp.samba.it201.int. | … 0 100 389 sdc1.samba.it201.int. |
| Kerberos-Eintrag | host -t SRV _kerberos._udp.samba.it201.int. | … 0 100 88 sdc1.samba.it201.int. |
| Name | host -t A sdc1.samba.it201.int. | has address 10.201.1.21 |
| Forwarder | host debian.org | eine Adresse aus dem Internet |
| Kerberos | kinit administrator, dann klist | krbtgt/SAMBA.IT201.INT@SAMBA.IT201.INT |
| Benutzer | wbinfo -u | SAMBA\administrator, SAMBA\guest, SAMBA\krbtgt |
| Datenbank | samba-tool dbcheck | Checked … objects (0 errors) |
| Zeit | chronyc sources | ein Server mit ^* |
| Signierung | chronyd -v | in der Liste der Funktionen: +SIGND |
- klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@SAMBA.IT201.INT
Valid starting Expires Service principal
18.10.2026 10:15:02 18.10.2026 20:15:02 krbtgt/SAMBA.IT201.INT@SAMBA.IT201.INT
renew until 19.10.2026 10:14:58
Offene Ports
- ss -lntup
| Port | Dienst |
|---|---|
| 53 tcp/udp | DNS |
| 88 tcp/udp | Kerberos |
| 135 tcp | RPC Endpoint Mapper |
| 137, 138 udp, 139 tcp | NetBIOS |
| 389 tcp/udp | LDAP, udp = CLDAP für die DC-Suche |
| 445 tcp | SMB |
| 464 tcp/udp | Kerberos-Passwort ändern |
| 636 tcp | LDAPS |
| 3268, 3269 tcp | Global Catalog, mit TLS |
| 49152–65535 tcp | dynamische RPC-Ports |
Rückwärtszone
- Wird nicht automatisch angelegt, wird aber von vielen Programmen erwartet:
samba-tool dns zonecreate sdc1 1.201.10.in-addr.arpa -U Administrator samba-tool dns add sdc1 1.201.10.in-addr.arpa 21 PTR sdc1.samba.it201.int -U Administrator host 10.201.1.21
Erste Benutzer und Gruppen
samba-tool user create max samba-tool group add verwaltung samba-tool group addmembers verwaltung max samba-tool user list samba-tool group listmembers verwaltung
- Die Passwortregeln der Domäne: samba-tool domain passwordsettings show
Stolperfallen
- 127.0.1.1 in /etc/hosts: Der DC trägt sich mit der falschen Adresse in DNS ein. Clients finden ihn nicht.
- resolv.conf wird überschrieben: Nach dem Neustart steht wieder ein anderer Nameserver drin. Das Programm finden, das es tut, und abschalten.
- smbd läuft noch: Port 445 ist belegt, samba-ad-dc startet nicht richtig. systemctl status smbd
- krb5.conf nicht kopiert: kinit findet den Realm nicht oder fragt einen falschen KDC.
- Realm klein geschrieben: kinit administrator@samba.it201.int scheitert, Realms sind in Großbuchstaben.
- Zeit falsch: kinit meldet Clock skew too great.
- Provision wiederholen: Erst alles Alte entfernen, sonst bricht provision ab:
systemctl stop samba-ad-dc rm /etc/samba/smb.conf rm -rf /var/lib/samba/private/* /var/lib/samba/sysvol/* find /var/lib/samba /var/cache/samba -name '*.tdb' -delete
Übungen
Grundübungen
- Bereiten Sie sdc1 vor und prüfen Sie hostname, hostname -f und hostname -i.
- Legen Sie die Domäne samba.it2XX.int an und starten Sie samba-ad-dc.
- Arbeiten Sie die ganze Tabelle unter „Prüfen“ ab. Notieren Sie, was nicht wie erwartet aussieht.
- Holen Sie sich als administrator ein Kerberos-Ticket und zeigen Sie es an. Löschen Sie es mit kdestroy.
- Legen Sie die Rückwärtszone an und prüfen Sie sie mit host.
- Legen Sie zwei Benutzer und eine Gruppe an und machen Sie beide zu Mitgliedern.
- Welche Ports öffnet der DC? Ordnen Sie jeden einem der vier Dienste DNS, Kerberos, LDAP, SMB zu.
Vertiefung
- Lassen Sie sich mit ldbsearch alle Benutzer direkt aus der Datenbank anzeigen: ldbsearch -H /var/lib/samba/private/sam.ldb '(objectClass=user)' sAMAccountName
- Fragen Sie den DC per LDAP von außen ab: ldapsearch -H ldap://sdc1 -Y GSSAPI -b "DC=samba,DC=it2XX,DC=int" '(sAMAccountName=max)'
- Was steht in der von provision erzeugten /etc/samba/smb.conf? Erklären Sie jede Zeile.
- Legen Sie einen zweiten DNS-Eintrag an, z.B. www als Alias auf sdc1, und prüfen Sie ihn.
- Wie lange ist ein Kerberos-Ticket gültig, und wo steht das?
Fehlersuche
- Jede Übung beschreibt ein Symptom. Finden Sie die Ursache, bevor Sie die Lösung aufklappen.
- 1. kinit administrator meldet
- Clock skew too great
Die Uhr des Rechners weicht mehr als 5 Minuten von der des DCs ab. Prüfen mit timedatectl und chronyc tracking. In VirtualBox oft nach dem Fortsetzen einer pausierten VM.
- 2. host -t SRV _ldap._tcp.samba.it2XX.int liefert NXDOMAIN, obwohl samba-ad-dc läuft
In /etc/resolv.conf steht noch die Firewall als Nameserver. Sie kennt die Domäne nicht. Der DC muss sich selbst fragen.
- 3. Nach provision startet samba-ad-dc, aber smbclient -L localhost meldet NT_STATUS_CONNECTION_REFUSED oder zeigt keine sysvol-Freigabe
smbd läuft noch als einzelner Dienst und belegt Port 445. systemctl disable --now smbd nmbd winbind und mask.
- 4. Clients finden den DC unter der Adresse 127.0.1.1
In /etc/hosts steht noch 127.0.1.1 sdc1. Beim Start hat sich der DC mit dieser Adresse in DNS eingetragen. Zeile entfernen, samba-ad-dc neu starten, mit samba_dnsupdate --verbose die Einträge erneuern.
- 5. host debian.org funktioniert auf sdc1 nicht, Namen der Domäne aber schon
Der Forwarder fehlt oder ist falsch. In /etc/samba/smb.conf unter [global]: dns forwarder = 10.2XX.1.1, dann samba-ad-dc neu starten.
- 6. Windows-Clients zeigen nach dem Beitritt eine falsche Uhrzeit, Linux-Clients nicht
chrony kann den Socket von Samba nicht lesen. Rechte von /var/lib/samba/ntp_signd prüfen: root:_chrony, 750. Im Journal von chrony steht dann ein Fehler zu ntp_signd.
Vertiefung
- Samba Neuerungen · Samba DNS · Samba ntp · Samba-tool domain · Samba-tool dns · Samba-tool user · Samba-tool dbcheck
- Ältere Fassung für Debian 12: Debian Samba4 ADS Domaincontroller
- https://wiki.samba.org/index.php/Setting_up_Samba_as_an_Active_Directory_Domain_Controller