Archiv/Howto/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:

  1. Installation von Programmen

  2. Starten von Programmen

  3. Ein Terminal öffnen

  4. Root-Rechte

  5. Samba (Übersichtsartikel)

  6. Samba Server

  7. Kerberos

  8. Dnsmasq

Inhaltsverzeichnis
  1. Grundlagen
  2. Abgrenzung und (noch) offene Punkte
  3. Alternative Linux-Distributionen für Samba...
  4. Speicherort der Samba-Konfigurationsdateie...
  5. Voraussetzungen zur Installation
    1. gleiche Systemzeit für Alle
    2. feste IP-Konfiguration
    3. Windows-Clients
  6. Vorarbeiten
    1. NTP-Daemon installieren
    2. DNS-Port frei machen
    3. ACL-Option für Dateisysteme aktivieren
  7. Installation von Samba-Paket
  8. Erstkonfiguration von Samba
  9. Benutzer- und Gruppen-Administration
  10. Einrichtung weiterer Freigaben (Shares)
    1. rlimit_max Fehler beheben
    2. Tausch-Verzeichnis für JEDEN
    3. Daten-Verzeichnis für Domaingruppen

Grundlagen

Samba_Server/samba-logo.png

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.)

http://www.zentyal.org/

Speicherort der Samba-Konfigurationsdateien (Standardpfade)

(wichtig für Datensicherung und Wiederherstellung)

  1. /var/lib/samba/

siehe auch (veraltet) - https://wiki.samba.org/index.php/TDB_Locations

Hier liegen die Dateien & Verzeichnisse für:

2. etc/samba/

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-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::---