Samba-Domäne von Grund auf

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
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

  1. Bereiten Sie sdc1 vor und prüfen Sie hostname, hostname -f und hostname -i.
  2. Legen Sie die Domäne samba.it2XX.int an und starten Sie samba-ad-dc.
  3. Arbeiten Sie die ganze Tabelle unter „Prüfen“ ab. Notieren Sie, was nicht wie erwartet aussieht.
  4. Holen Sie sich als administrator ein Kerberos-Ticket und zeigen Sie es an. Löschen Sie es mit kdestroy.
  5. Legen Sie die Rückwärtszone an und prüfen Sie sie mit host.
  6. Legen Sie zwei Benutzer und eine Gruppe an und machen Sie beide zu Mitgliedern.
  7. Welche Ports öffnet der DC? Ordnen Sie jeden einem der vier Dienste DNS, Kerberos, LDAP, SMB zu.

Vertiefung

  1. Lassen Sie sich mit ldbsearch alle Benutzer direkt aus der Datenbank anzeigen: ldbsearch -H /var/lib/samba/private/sam.ldb '(objectClass=user)' sAMAccountName
  2. 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)'
  3. Was steht in der von provision erzeugten /etc/samba/smb.conf? Erklären Sie jede Zeile.
  4. Legen Sie einen zweiten DNS-Eintrag an, z.B. www als Alias auf sdc1, und prüfen Sie ihn.
  5. 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

Weiter