Active Directory auf dem Raspberry Pi

Hallo allerseits. Heute erzähle ich Euch einiges über Active Directory auf dem Raspberry Pi. Beginnen möchte ich mit einer Produktempfehlung. Denn nicht jeder Raspberry ist für diese Aufgabe geeignet. Ich empfehle den neuen Raspberry Pi 4. Denn dieser kommt als erster Raspberry mit einer Gigabit-Ethernet-Schnittstelle, als auch mit 2 USB3.0-Schnittstellen daher. Und beide haben ihre eigene Leitung zur CPU. Das ist wichtig, um dass der Datenfluss zwischen Eurem AD-Server (dem Pi) und Eurem Client-PC mit vernünftiger Geschwindkeit abläuft. In Punkto RAM empfehle ich ab 2GB RAM aufwärts. Ich selbst habe mir den Pi 4 mit 2GB RAM zugelegt. Da der Raspberry keine weiteren Aufgaben zu erledigen hat, sollten 2GB RAM dicke reichen.

Meine Erfahrungen

Bevor wir richtig los legen, möchte ich Euch ein wenig von meinen persönlichen Erfahrungen berichten. Zunächst steht natürlich die Frage im Raum, wozu benötigt man einen Active Directory? Wirklich notwendig ist er in einem Heimnetzwerk mit 2 Laptops und einem stationären Desktop-PC nicht. Aber ich wollte mich mit der Materie einfach mal vertraut machen. Zudem war ein Drucker-Server und ein Fileserver schon lange in Planung. Denn oft sitzen wir gerade an dem Rechner, auf dem die Datei, welche es auzudrucken gilt, gerade nicht gespeichert ist. Auch konnte bislang nur gedruckt werden, wenn der Laptop per USB mit dem Drucker verbunden war. Diese Projekte habe ich zusammen mit dem Active-Directory Projekt gleich mit umgesetzt. Nun verfügen wir über ein Netzlaufwerk, welches dank Active-Directory auch gleich als solches im Nutzeraccount eingebunden wird und können dort unsere Dateien ablegen. Egal an welchem Pc wir uns gerade befinden, wir haben nun immer Zugriff auf unsere Dateien. Zudem kann gemütlich von der Couch aus gedruckt werden (sofern der Drucker aktiv ist). Der Cups-Druckerserver wird allerdings ein eigenständiger Beitrag, da ich hier auch erklären möchte, wie ich meinen Sonderling von Ricoh SP 112 Laserdrucker zum Laufen bekommen habe.

Das Einrichten des Active Directory auf dem Pi 4 zog sich bei mir über rund 2 Wochen hin. Immer und immer wieder startete ich mit einem frischen Raspbian-System neu, weil wieder irgendwas nicht klappte. In den zahlreichen Anleitungen, die ich im Netz zum Thema “Active Directory auf dem Raspberry Pi” fand, waren entweder veraltet, unvollständig oder gar beides. Irgendetwas fehlte immer. In einigen wurde Samba sogar noch aus den Quellen heraus auf dem Pi kompiliert. Dies war eine Zeit lang auch notwendig, da Active Directory erst ab Samba4 verfügbar ist. Und wer die Raspberry-Repositories kennt, weiss das man von dort nur sehr selten wirklich aktuelle Versionen herunter laden und installieren kann. Inzwischen ist das Kompilieren allerdings nicht mehr notwendig, da Samba4 auch in den Repositories des Debian-Systems angekommen ist.

Werbung – Diese Produkte finden beim Pi4-Active Directory Anwendung:


Als Amazon-Partner verdiene ich an qualifizierten Verkäufen.
Lesen Sie hier mehr über die in diesem Blog verwendeten Werbeeinblendungen.

Erste Vorbereitungen

Für dieses Projekt nutze ich meinen Raspberry Pi 3, sowie ein frisches Raspbian-Image als Ausgangsbasis. Als Systemspeicher kommt eine 16GB Micro-SD zum Einsatz. Um sicher zu stellen, dass das Raspbian-System aktuell ist, wird es zunächst aktualisiert:

sudo apt-get update
sudo apt-get upgrade

Danach überlegen wir uns, wie unsere Domain heißen und welche IP-Adresse sie bekommen soll. In meinem Fall werde ich die folgenden Angaben verwenden:

Raspberryname: raspisrv
Domain: raspinet.local
Raspberry-IP: 192.168.2.2
Router: 192.168.2.1

Danach bearbeiten wir die dhcpcd.conf Datei

sudo nano /etc/dhcpcd.conf

In dieser steht bereits sehr viel drin, dass Meiste ist aber mit Sternchen auskommentiert und somit unwirkam. Hier suchen wir nach der Zeile: Example static IP configuration: und ändern die folgenden Zeilen wie folgt ab:

# Example static IP configuration:
interface eth0
static ip_address=192.168.2.2
static routers=192.168.2.1
static domain_name_servers=192.168.2.2
static domain_search=raspinet.local

Hierbei fällt auf, dass der Raspberry auf seine eigene IP-Adresse als “domain_name_servers” zeigt. Das ist so gewollt. Würde hier die Adresse Eures Routers eingetragen werden, so würde der Raspberry den Router fragen, ob dieser die Domain “raspinet.local” kennt. Dieser weiß aber von der neuen Domain nichts und entsprechend würde die Domain nicht gefunden werden.

Auch ist es ratsam, dem Raspberry vom Router eine feste IP-Adresse zuweisen zu lassen. Denn später tragen wir die IP-Adresse des Raspberry bei den Windows-Client-Computern als DNS-Server ein. Weist der Router nun dem Raspberry ständig eine andere IP-Adresse zu, funktioniert alles an Tag 1 noch perfekt und ab Tag 2 wird der Active-Directory-Server (der Pi) nicht mehr gefunden.

Mittels sudo raspi-config -> Network Options -> Hostname ist der Name des Raspberry zu ändern:

sudo raspi-config

Im Punkt Network Options (2) und dem Unterpunkt Hostname (N1) den Rasberry-Namen ändern

Nun wird der Raspberry neu gestartet. -> sudo reboot und nachfolgend mittels sudo ifconfig die Netzwerkkonfiguration überprüft. Der Raspberry sollte nun bei eth0 die inet IP-Adresse ausgeben, welche Ihr eben in der dhchcd.conf angegeben habt. In meinem Fall war es die 192.168.2.2, welche der Raspberry auch korrekt ausgibt.

— Werbung —

Installieren von Samba und weiteren Paketen

Nun geht es los mit dem Installieren von Samba, Keberos und Winbind. Während der Installation wird man zu Eingaben aufgefordert, welche sehr wichtig für das Funktionieren des späteren Active-Directory-Servers sind.

sudo apt install samba smbclient krb5-config krb5-user krb5-clients winbind libnss-winbind libpam-winbind

Hier werden nun folgende 3 Eingabefenster erscheinen:

Hier ist die Domain anzugeben. Bitte alles komplett groß schreiben.

In dieser und der folgenden Abfrage ist der Name des Raspberry Pi anzugeben. Auch hier ist wieder alles komplett groß zu schreiben.

Genau an dieser Stelle machte ich ständig den gleichen Fehler. Ich hatte bei allen 3 Abfragen stets die Domain, teils sogar in Kleinbuchstaben angegeben. Ich hatte mich hierbei an Anleitungen orientiert, welche ich im Netz gefunden hatte. Leider wurde in diesen Anleitungen nicht immer alles korrekt wiedergegeben.

Samba und Keberos konfigurieren

Weiter geht es mit der Keberos-Konfiguration. Diese erfolgt, wie beim Raspberry typisch, per Textdatei. So ist hier die Datei krb5.conf zu bearbeiten.

sudo mv /etc/krb5.conf /etc/krb5.conf.orig   #bestehende Konfiguration wird gesichert und umbenannt
sudo nano /etc/krb5.conf          #neue Konfigurationsdatei erstellen und öffnen

#Folgendes ist in die neue Konfigurationsdatei einzufügen:
    [libdefaults]
            default_realm = RASPINET.LOCAL
            dns_lookup_realm = false
            dns_lookup_kdc = false
            ticket_lifetime = 24h
            renew_lifetime = 7d
            kdc_timesync = 1
            ccache_type = 4
            forwardable = true
            proxiable = true
            fcc-mit-ticketflags = true
    [realms]
            RASPINET.LOCAL = {
                    kdc = 192.168.2.2:88
                    admin_server = 192.168.2.2
                    default_domain = RASPINET.LOCAL
            }
    [domain_realm]
            .RASPINET.LOCAL = RASPINET.LOCAL
            RASPINET.LOCALL = RASPINET.LOCAL

Das Gleiche geschieht nun mit der Samba-Konfigurationsdatei.

sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.orig   #bestehende Konfiguration umbenennen
sudo nano /etc/samba/smb.conf          #neue Konfigurationsdatei erstellen und öffnen

#Hier kommt folgendes rein:
[global]
	dns forwarder = 192.168.2.2
	netbios name = RASPISRV
	realm = RASPINET.LOCAL
	server role = active directory domain controller
	workgroup = RASPINET

	security = user
	encrypt passwords = true
	domain logons = yes
	logon path = /media/logon
	logon drive = M:

[netlogon]
	path = /var/lib/samba/sysvol/pinet.local/scripts
	read only = No

[sysvol]
	path = /var/lib/samba/sysvol
	read only = No

[Profile]
	comment = Benutzerprofile
	path = /home/pi/medien/profiles
	guest ok = yes
	writeable = yes
	readonly = no
	browseable = no
	create mask = 0600
	directory mask = 0700

[Freigabe]
	comment = Datenablage für alle
	path = /home/pi/medien/Freigabe
	guest ok = yes
	writeable = yes
	readonly = no
	browseable = yes
	create mask = 0600
	directory mask = 0700
	security = share

[logon]
	path = /home/pi/medien/logon
	guest ok = yes
	read only = yes

Erstellen der Dateifreigaben

Die hier angegebenen Ordner müssen natürlich zuvor noch erstellt werden. Dies werden die zukünftigen Dateifreigaben.

sudo mkdir /home/pi/medien
sudo mkdir /home/pi/medien/profiles
sudo mkdir /home/pi/medien/Freigabe
sudo mkdir /home/pi/medien/logon
sudo chmod -R 777 /home/pi/medien      #Setzt die Rechte lesen, schreiben und ausführen für den Ordner #Medien sowie alle Unterordner und Dateien.

Letzte Vorbereitungen vor dem ersten Samba-Start

Nun muss noch die Domain-Provision durchgeführt werden.

sudo samba-tool domain provision

Es werden nachfolgend Daten abgefragt. Zum ersten möchte der Raspberry Eure Domain wissen. Wieder einmal alles groß schreiben: RASPINET.LOCAL. Nachfolgend kann alles mit Enter bestätigt werden. Abgesehen vom DNS-Forwarder-IP-Adress. Hier habe ich meinen Router, die 192.168.2.1 eingetragen. Und zum Schluß natürlich Euer Passwort, welches 2 mal einzugeben ist. Zum Schluss werden alle Daten noch einmal angezeigt.

Bevor Samba gestartet werden kann, muss es demaskiert und erlaubt werden. Das erlauben aktiviert auch den Autostart von Samba beim Systemstart.

sudo systemctl unmask samba-ad-dc.service
sudo systemctl start samba-ad-dc.service
sudo systemctl enable samba-ad-dc.service
sudo systemctl status samba-ad-dc.service

Wichtig ist, dass bei der Status-Ausgabe hinter “Active: ” ein grünes active (running) zu finden ist. Auch sollte beim “start samba-ad-dc.service” keine Fehlermeldung auftreten.

Hat alles geklappt, kann mit dem Befehl kinit Administrator ein Ticket erzeugt werden. Mit klist kann es abgerufen und angzeigt werden. Mit dem Befehl host -t A raspisrv.raspinet.local kann überprüft werden, ob die Domain erfolgreich aufgelöst werden kann.

Wenn Eure Konsolenausgabe ebenso aussieht, dann ist alles bereit, für ein erstes Login eines Windows-PC’s in die neue Domäne.

Mit Windows in die Domäne einloggen

  1. Netzwerk- und Freigabecenter öffnen
  2. Auf den Netzwerkadapter klicken (Achtung: Sofern vorhanden, die gleichen Einstellungen auch für den WLAN-Adapter tätigen)
  3. Auf Eigenschaften klicken
  4. Bei IPv6 den Haken entfernen, IPv4 auswählen und auf Eigenschaften klicken
  5. Hier die IP-Adresse Eures Raspberry Pi als DNS-Adresse eingeben

Danach muss noch der Rechner in die Domäne aufgenommen werden, was wie folgt bewerkstelligt wird:

Danach muss der Rechner noch neu gestartet werden und Ihr könnt Euch nun endlich in Eurer eigenen Active-Directory-Domäne einloggen.

Ihr bekommt einen ganz frischen Desktop vor die Nase gesetzt, welcher noch kaum Verknüpfungen aufweist und auch an Programme ist nur die Standardsoftware installiert, welche ohnehin von Windows mitgeliefert wird.

Schlussworte

Ganz wichtig sind die DNS-Einstellungen auf dem Windows-Rechner. Tragt dort einzig und allein Euren Raspberry Pi als DNS-Server ein und deaktiviert IPv6. Andernfalls kann es sein, dass Ihr zwar den Anmeldebildschirm für die Domäne (Vorletztes Bild, Punkt 5) bekommt, danach aber eine Fehlermeldung folgt, von wegen Domäne nicht gefunden.

Wie gesagt, bis Active Directory bei mir auf dem Pi 4 funktioniert hat, dauerte es ganze 2 Wochen. Ich war immer wieder dem Aufgeben näher als dem “weiter machen”. Letztlich hat sich die Hartnäckigkeit ausgezahlt und mein Active Directory funktioniert nun bestens. Inzwischen habe ich den Raspbian-Kernel sogar auf 64Bit geupdated (sudo raspi-update) und auch das läuft bestens.

Wenn es auch bei Euch funktioniert, kann ich nur zu einer Image-Sicherung raten. Ladet Euch das Gparted-ISO-Image herunter. Brennt es auf DVD und bootet damit Euren PC. Hier könnt Ihr nun mit Gparted die SD-Karten Partition des Raspberry soweit verkleinern, bis kaum noch Speicherplatz frei ist. Das ist wichtig, um das Eure Imagesicherung nicht größer als nötig wird. Danach startet Ihr Euren Windows-Rechner ganz normal und zieht Euch mit dem Win32DiskImager ein Image der SD-Karte.

  1. Haken bei “Read only allocated Partitions” setzen
  2. Über das Diskettensymbol Speicherort und Namen angeben
  3. Durch Anklicken von “Öffnen” bestätigen
  4. SD-Karte lesen und als *.img-Datei speichern lassen

Damit habt Ihr immer eine Sicherung, falls mal etwas schief geht und der Raspberry Pi nicht mehr so läuft wie gewohnt/gewünscht.