Samba4 als Domaincontroller
Archivierte Anleitung
Dieser Artikel wurde archiviert. Das bedeutet, dass er nicht mehr auf Richtigkeit überprüft oder anderweitig gepflegt wird. Der Inhalt wurde für keine aktuell unterstützte Ubuntu-Version getestet. Wenn du Gründe für eine Wiederherstellung siehst, melde dich bitte in der Diskussion zum Artikel. Bis dahin bleibt die Seite für weitere Änderungen gesperrt.
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Achtung!
Die Verwendung dieses Howto geschieht wie üblich auf eigene Gefahr. Bei Problemen mit der Anleitung melde dies bitte in der dazugehörigen Diskussion und wende dich zusätzlich an den Verfasser des Howtos.
Hinweis:
Diese Howto-Anleitung wurde zuletzt von luftpump am 23.03.2017 unter Xubuntu 16.04.01 LTS erfolgreich getestet.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
- Grundlagen
- Abgrenzung und (noch) offene Punkte
- Alternative Linux-Distributionen für Samba4 im AD-Betrieb (und andere Services wie DNS, DHCP, Firewall, Proxy, etc.)
- Speicherort der Samba-Konfigurationsdateien (Standardpfade)
- Voraussetzungen zur Installation
- Vorarbeiten
- Installation von Samba-Paket
- Erstkonfiguration von Samba
- Benutzer- und Gruppen-Administration
- Einrichtung weiterer Freigaben (Shares)
Grundlagen¶
Ab Samba Version 4.x kann man Samba im Microsoft-kompatiblen Modus "Active-Directory Domain-Controller" (kurz AD DC) laufen lassen. Dieser Artikel beschreibt die Grundinstallation eines Samba-Servers als DC für eine Windows Domäne.
Es werden nur offizielle Pakete aus dem Ubuntu-Repo benutzt, und orientiert sich weitgehend am Artikel im offiziellen Samba-Wiki. Sie berücksichtigt aber die Besonderheiten bei Ubuntu.
Offizielles Samba-HowTo - https://wiki.samba.org/index.php/Samba_AD_DC_HOWTO 🇬🇧
Hinweis:
Dieser Artikel ist nur für erfahrenen Ubuntu-Benutzer geeignet, die wissen, was ein Active-Directory Domaincontroller ist.
Sämtliche Eingaben setzen voraus, dass man Root-Rechten arbeitet ist (sudo -s
).
Abgrenzung und (noch) offene Punkte¶
1. AD-Replikation (mit weiterem DC) 2. SYSVOL-Replikation (mit weiterem DC) 3. Datensicherung und Recovery
Alternative Linux-Distributionen für Samba4 im AD-Betrieb (und andere Services wie DNS, DHCP, Firewall, Proxy, etc.)¶
Speicherort der Samba-Konfigurationsdateien (Standardpfade)¶
(wichtig für Datensicherung und Wiederherstellung)
/var/lib/samba/
siehe auch (veraltet) - https://wiki.samba.org/index.php/TDB_Locations
Hier liegen die Dateien & Verzeichnisse für:
Samba-Datenbank
LDAP-Config
Group-Policies
DNS-Config
SPNs
Kerberos-Config
Passwörter
SYSVOL
Zertifikate
Druckertreiber
2. etc/samba/
Samba-Konfigurationsdatei "smb.conf"
Voraussetzungen zur Installation¶
gleiche Systemzeit für Alle¶
Die Systemzeit von Clients und Samba-Server muss gleich sein. Ansonsten gibt es Probleme mit Kerberos-Tickets, und somit Probleme mit der Authentifizierung und Zugriffsprobleme.
feste IP-Konfiguration¶
Der Samba-Server muss eine feste IP-Adresse haben. (über GUI anpassbar) Denn die Clients nutzen ihn auch als DNS-Server, und auf den Clients muss diese als IP-Adresse hinterlegt werden. Der Samba-Server selbst nutzt den DNS-Server des Providers oder DSL-Routers (inkl. Gateway für den Internetzugriff)
Windows-Clients¶
Wenn Windows-Clients (XP, Win 7, 8, oder 10) verwendet werden, und zur Domäne beitreten wollen, müssen diese entweder Windows Pro oder Enterprise-Edition sein, denn die Home-Edition von Windows kann keiner Domäne beitreten.
Diese Windows Clients, oder Windows-Server müssen dann den Samba-Server als DNS eingetragen haben damit sie Verbindung zur Domäne bekommen.
Vorarbeiten¶
NTP-Daemon installieren¶
Dies wird benötigt, damit alle Clients ihre Zeit mit dem Domaincontroller synchronisieren können.
Dies ist eine Voraussetzung für einen reibungslosen Betrieb von Kerberos-Authentifizierung.
sudo apt-get install ntp sudo service ntp start
Überprüfen ob Daemon korrekt läuft:
netstat -tulpn |grep ":123 "
Problem: Bei Neustart des Servers ist der Daemon zwar gestartet, aber der Port UDP 123 ist trotzdem nicht offen.
Lösung: Es darf kein ntpdate installiert sein. Also:
sudo apt-get remove ntpdate sudo service ntp restart
Verbindung zu vorhandenen Peers und dessen Zeit anzeigen, auf dem Server selbst ausführen:
ntpq --peers
Zeitserver aus Sicht eines Windows 10 Clients überprüfen:
w32tm /monitor /computers:<ip-adresse-des-Samba-Servers>
DNS-Port frei machen¶
Bei Ubuntu und Debian 8 gibt es eine Besonderheit in der DNS-Konfiguration:
Am Client wird die DNS-Namensauflösung mit Hilfe eines lokalen DNS-Dienstes "dnsmasq" realisiert.
Der Samba-Server will aber seinen eigenen DNS-Service installieren, und scheitert damit, weil dieser schon von "dnsmasq" belegt ist. Somit muss zuvor diese Hürde bereinigt werden.
So kann man den störenden "dnsmasq" deaktivieren:
sudo systemctl disable dnsmasq
Achtung!
Jetzt muss der Computer zwingend neu gebootet werden.
Prüfung ob der DNS-Port 53 jetzt frei ist:
sudo netstat -tlpn |grep ":53 "
Der Befehl darf keine Ausgabe bringen, jedenfalls nichts mit "dnsmasq" am Ende der Zeile.
Hinweis: Denn wenn der Samba-Dienst nicht richtig läuft, dann liegt es vermutlich daran, dass der Netzwerkport 53 (DNS) schon belegt ist.
Dazu Samba im interaktiven Modus starten: samba -i
Dann kommt folgende Fehlermeldung: Failed to bind to 0.0.0.0:53 - NT_STATUS_ADDRESS_ALREADY_ASSOCIATED
ACL-Option für Dateisysteme aktivieren¶
siehe auch - ACL Wikiartikel
Für das eingebundene Share muss dessen Dateisystem mit acl-Option gemountet sein, sonst sind keine erweiterten ACLs möglich. (Standard)
Seit Ubuntu 12.04 gehört ACL bei den Dateisystemen ext3 und ext4 zu den Default-Optionen (Parameter "defaults") und braucht deshalb auch bei diesen nicht mehr explizit aktiviert zu werden.
Mit dem Mount-Parameter "noacl" kann man die Nutzung von ACLs aber explizit verbieten.
Kommandos zur Überprüfung:
cat /etc/fstab |grep -i noacl mount |grep -i noacl
Beide Befehle dürfen für die Partitionen auf denen Shares liegen, keine Ausgabe bringen.
Installation von Samba-Paket¶
("winbind" wird nur zur Analysezwecken gebraucht, ist aber dafür wertvoll)
sudo apt-get install samba sudo apt-get install winbind
Erstkonfiguration von Samba¶
Beispielkonfigurationsdaten für den Samba-Server:
Hostname des Samba-Servers: DC1 IP-Adresse: 192.168.1.5 getestete Samba-Version: 4.3.11-Ubuntu
Die bestehende Datei smb.conf löschen oder umbenenen:
sudo rm /etc/samba/smb.conf
Dann folgendes als root ausführen zur Ersteinrichtung eines DC:
samba-tool domain provision
Es werden dann Domänennamen, NETBIOS-Name der Domäne, DNS-Server des Providers/DSL-Routers, und User-Passwort für den Samba-Administrator abgefragt, Beispiel:
root@DC1:/etc/samba# samba-tool domain provision Realm [FRITZ.BOX]: TESTFIRMA.DOM Domain [TESTFIRMA]: Server Role (dc, member, standalone) [dc]: DNS backend (SAMBA_INTERNAL, BIND9_FLATFILE, BIND9_DLZ, NONE) [SAMBA_INTERNAL]: DNS forwarder IP address (write 'none' to disable forwarding) [192.168.1.1]: Administrator password: Retype password:
Danach kommt folgende Ausgabe, z.B.:
Looking up IPv4 addresses Looking up IPv6 addresses More than one IPv6 address found. Using fd88:fdcf:c3ea::135 Setting up share.ldb Setting up secrets.ldb Setting up the registry Setting up the privileges database Setting up idmap db Setting up SAM db Setting up sam.ldb partitions and settings Setting up sam.ldb rootDSE Pre-loading the Samba 4 and AD schema Adding DomainDN: DC=testfirma,DC=dom Adding configuration container Setting up sam.ldb schema Setting up sam.ldb configuration data Setting up display specifiers Modifying display specifiers Adding users container Modifying users container Adding computers container Modifying computers container Setting up sam.ldb data Setting up well known security principals Setting up sam.ldb users and groups Setting up self join Adding DNS accounts Creating CN=MicrosoftDNS,CN=System,DC=testfirma,DC=dom Creating DomainDnsZones and ForestDnsZones partitions Populating DomainDnsZones and ForestDnsZones partitions Setting up sam.ldb rootDSE marking as synchronized Fixing provision GUIDs A Kerberos configuration suitable for Samba 4 has been generated at /var/lib/samba/private/krb5.conf Once the above files are installed, your Samba4 server will be ready to use Server Role: active directory domain controller Hostname: DC1 NetBIOS Domain: TESTFIRMA DNS Domain: testfirma.dom DOMAIN SID: S-1-5-21-1643755149-329575646-4284657705
Danach ist die /etc/samba/smb.conf mit folgender Rolle und Config eingerichtet (mehr nicht!), z.B.:
# Global parameters [global] workgroup = TESTFIRMA realm = TESTFIRMA.DOM netbios name = DC1 server role = active directory domain controller dns forwarder = 192.168.1.1 [netlogon] path = /var/lib/samba/sysvol/testfirma.dom/scripts read only = No [sysvol] path = /var/lib/samba/sysvol read only = No
Achtung!
Jetzt muss der Rechner zwingend neu gebootet werden.
Nach dem Reboot sind die üblichen Ports eines Domaincontrollers offen, hier die Ausgabe von sudo netstat -tlpn
:
(der aufgelistete sshd-Service auf Port 22 wurde zuvor manuell hinzu installiert, und gehört nicht zur eigentlichen Samba-Installation. Der cupsd ist ab Werk bei Ubuntu schon installiert.)
Aktive Internetverbindungen (Nur Server) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:464 0.0.0.0:* LISTEN 1572/samba tcp 0 0 0.0.0.0:53 0.0.0.0:* LISTEN 1578/samba tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 792/sshd tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 655/cupsd tcp 0 0 0.0.0.0:88 0.0.0.0:* LISTEN 1572/samba tcp 0 0 0.0.0.0:636 0.0.0.0:* LISTEN 1570/samba tcp 0 0 0.0.0.0:445 0.0.0.0:* LISTEN 1569/smbd tcp 0 0 0.0.0.0:1024 0.0.0.0:* LISTEN 1566/samba tcp 0 0 0.0.0.0:3268 0.0.0.0:* LISTEN 1570/samba tcp 0 0 0.0.0.0:3269 0.0.0.0:* LISTEN 1570/samba tcp 0 0 0.0.0.0:389 0.0.0.0:* LISTEN 1570/samba tcp 0 0 0.0.0.0:135 0.0.0.0:* LISTEN 1566/samba tcp 0 0 0.0.0.0:139 0.0.0.0:* LISTEN 1569/smbd tcp6 0 0 :::464 :::* LISTEN 1572/samba tcp6 0 0 :::53 :::* LISTEN 1578/samba tcp6 0 0 :::22 :::* LISTEN 792/sshd tcp6 0 0 ::1:631 :::* LISTEN 655/cupsd tcp6 0 0 :::88 :::* LISTEN 1572/samba tcp6 0 0 :::636 :::* LISTEN 1570/samba tcp6 0 0 :::445 :::* LISTEN 1569/smbd tcp6 0 0 :::1024 :::* LISTEN 1566/samba tcp6 0 0 :::3268 :::* LISTEN 1570/samba tcp6 0 0 :::3269 :::* LISTEN 1570/samba tcp6 0 0 :::389 :::* LISTEN 1570/samba tcp6 0 0 :::135 :::* LISTEN 1566/samba tcp6 0 0 :::139 :::* LISTEN 1569/smbd
Damit ist jetzt grundsätzlich der Samba-Server als Domaincontroller mit LDAP, Kerberos, DNS und CIFS-Protokoll erreichbar und einsetzbar.
Benutzer- und Gruppen-Administration¶
Die Domänenverwaltung des Active-Directory des Samba-Servers geschieht per Linux auf der Kommandozeile mit dem Programm "samba-tool". ("samba-tool" ist ein Teil des Samba4-Pakets)
Syntax siehe auch hier - https://www.samba.org/samba/docs/man/manpages-3/samba-tool.8.html
Einfache Informationsausgaben einer Domäne kann man auch mit "wbinfo" (eigenes Paket) erledigen.
Alle Benutzerkonten auflisten:
samba-tool user list
oder
wbinfo -u
Einen neuen Benutzer hinzufügen (soweit noch nicht vorhanden):
HINWEISE dazu:
Samba 4 benötigt KEINE vorherige Anlage eines Unix Users bevor er in Samba angelegt werden kann.
Es wird bei Usernamen entgegen den Linuxstandards nicht zwischen Groß- und Kleinschreibung unterschieden.
Bei der Anlage wird ein Passwort abgefragt, dies unterliegt einer strengen Passwort-Policy.
samba-tool user add "Alice"
Eine neue Gruppe hinzufügen:
samba-tool group add Team-A
Alle Gruppen auflisten (ab Werk sind schon jede Menge Standard-Gruppen vorhanden)
samba-tool group list
oder
wbinfo -g
Einen Benutzer zu einer bestehenden Gruppe hinzufügen:
samba-tool group addmembers Team-A Alice
Alle Mitglieder einer Gruppe anzeigen:
samba-tool group listmembers Team-A
Einrichtung weiterer Freigaben (Shares)¶
Ab Werk sind auf dem Sambaserver jetzt nun die CIFS-Shares "netlogon" und "sysvol" verfügbar.
SYSVOL ist ein Standard-Verzeichnis bei Domaincontrollern und beinhaltet die Windows Group-Policies sowie beinhaltet auch das NETLOGON-Share.
Das NETLOGON-Share ist standardmässig nur für Loginscripte vorgesehen.
EMPFEHLUNG: Beide Shares sollten nicht für andere Zwecke missbraucht werden!
Wenn man diesen Server somit nicht nur als Domaincontroller verwenden möchte, sondern auch als Fileserver, kann man weitere Shares einrichten.
rlimit_max Fehler beheben¶
Für die Nutzung weiterer Shares muss man erst einen altbekannten Fehler beheben: testparm-Fehlermeldung: (kommt bei der Ausführung des Befehls "testparm")
rlimit_max (1024) below minimum Windows limit (16384)
Lösung: http://lists.samba.org/archive/samba/2010-January/153331.html
Um diesen Fehler permanent zu beheben, muss man in der Datei "/etc/security/limits.conf" in der vorletzten Zeile vor der Zeile "# End of File" folgende Zeile hinzufügen und abspeichern:
* - nofile 16384
Achtung!
Jetzt muss der Rechner zwingend neu gebootet werden.
Nach dem Reboot sollte bei der Ausführung von "testparm" diese Fehlermeldung nicht mehr kommen, und man kann nun weitere Shares einrichten.
Tausch-Verzeichnis für JEDEN¶
(auch mit Schreib-Zugriff für echte Gäste, und Nicht-Domänenmitgliedern ohne Domänenaccount) Richten Sie im Dateisystem das Verzeichnis "tausch" ein, und berechtigen sie jeden mit Schreibrechten:
Beispiel:
sudo mkdir /mnt/tausch sudo chmod 777 /mnt/tausch
Ergänzen Sie die Datei "/etc/samba/smb.conf" am Ende um folgende Zeilen:
[tausch] comment = Tausch path = /mnt/tausch read only = No inherit permissions = Yes inherit acls = Yes inherit owner = Yes guest ok = Yes
Passende Berechtigungen (ACLs) im Dateisystem für das Share "tausch" setzen:
chown -R root:root /mnt/tausch/ chmod -R 777 /mnt/tausch/ setfacl -R -b /mnt/tausch/ # entfernt alle bestehenden Rechte setfacl -R -d -m:rxw /mnt/tausch/ # setzt rwx als Default-Recht für alle User
Daten-Verzeichnis für Domaingruppen¶
Ergänzen Sie die Datei "/etc/samba/smb.conf" am Ende um folgende Zeilen:
[daten] comment = Daten path = /mnt/daten read only = No inherit permissions = Yes inherit acls = Yes inherit owner = Yes guest ok = No
Berechtigungen (ACLs) für das Shares "daten" setzen:
Tatsächliche Linux ID für einen Windows-User oder Windows-Gruppe ermitteln.
Beispiel für die Gruppe "Domain Admins": (beim User oder Gruppennamen spielt Gross/Kleinschreibung keine Rolle)
wbinfo -i "domain admins"
Beispielausgabe:
TESTFIRMA\domain admins:*:3000008:3000008::/home/TESTFIRMA/domain admins:/bin/false
Erkenntnis: Die zugehörige Linux-ID lautet somit: 3000008
Beispiel für die zuvor angelegt Gruppe "team-a":
wbinfo -i "team-a"
Beispielausgabe:
TESTFIRMA\team-a:*:3000026:3000026::/home/TESTFIRMA/team-a:/bin/false
Erkenntnis: Die zugehörige Linux-ID von "team-a" lautet: 3000026
Die zwei Gruppen "Domain Admins" und "team-a" mit Vollzugriff berechtigen (inkl. Vererbung auf Unterobjekte und Defaultrechte, Parameter -d)
chown -R root:root /mnt/daten/ # root zum Besitzer aller Dateien machen chmod -R 700 /mnt/daten/ # alle Rechte auf root einschränken setfacl -R -b /mnt/daten/ # entfernt alle bestehenden ACLs setfacl -R -d -m g:3000008:rwx /mnt/daten/ # die Gruppe "Domain Admins" mit Vollrechten ausstatten setfacl -R -d -m g:3000026:rwx /mnt/daten/ # die Gruppe "team-a" mit Vollrechten ausstatten
Anzeige im Linuxdateisystem:
root@DC1:/mnt# getfacl -t /mnt/daten/ # file: mnt/daten # owner: root # group: root user::rwx group::--- other::--- default:user::rwx default:group::--- default:group:3000008:rwx default:group:3000026:rwx default:mask::rwx default:other::---