Samba

Samba ist ein freies Programmpaket, mit dem es seit Version 4 u. a. möglich ist, einen Domänen-Controller zu betreiben. Das Schulnetzkonzept nutzt davon nur einen sehr kleinen Teil, um eine einfache Benutzerverwaltung bzw. -schnittstelle zu realisieren.

Zur Realisierung des Schulnetzes werden zusätzlich zu Samba folgende Tools verwendet:

FreeRADIUS

Der FreeRADIUS-Server stellt verschiedenen Varianten zur Anmeldung von Benutzern bereit. Das Schulnetzkonzept nutzt ihn für die personalisierte Anmeldung von Benutzern an WLAN-Access-Points.

LDAP Account Manager

Mit dem LDAP Account Manager (LAM) können LDAP-Einträge (Benutzer, Gruppen etc.) benutzerfreundlich über eine Webschnittstelle verwaltet werden. Das Tool erlaubt im Besonderen den Import zahlreicher Benutzer mithilfe einer CSV-Datei.

Self Service Password

Self Service Password ist eine PHP-Anwendung, die es Benutzern ermöglicht, ihr Passwort über das LDAP-Protokoll zu ändern.

Erfüllte Anforderungen

Diese Anforderungen erfüllt das Schulnetzkonzept:

  • Benutzer- und Gruppenverwaltung über Web-Oberfläche (LDAP-Account-Manager)
  • Möglichkeit des CSV-Imports
  • Zentrale Benutzerbasis für Nextcloud und WLAN:
    • Synchronisation der Benutzer und Gruppen via LDAP in die Nextcloud
    • Personalisierte Anmeldung im WPA2-Enterprise-WLAN mit FreeRADIUS

Installation Samba

Virtuelle Maschine erzeugen

Verwenden Sie hierzu die Beschreibung zur Installation eines virtuellen Linux-Debians.

Dimensionierungsbeispiel der virtuellen Maschine:

  • 1 CPU
  • 16 GB Festplattenspeicher
  • 4 GB Arbeitsspeicher
  • 1 Netzwerkkarte mit Zugriff auf das Netzwerk "intern"

Notwendige Pakete installieren

# Notwendige Tools
apt install pwgen sshpass samba krb5-config winbind smbclient -y
# Während Installationsprozess folgende Angaben
# - Ihren Gegebenheiten angepasst - tätigen:
# Kerberos realm: schulnetz.intra
# Kerberos server: samba.schulnetz.intra
# Kerberos Administrative server: samba.schulnetz.intra

Originale Samba-Konfiguration sichern

mv /etc/samba/smb.conf /etc/samba/smb.conf.org

Samba Domänen-Setup ausführen

samba-tool domain provision
# Alle während des Installationsprozesse abgefragen Einstellungen
# können bei den vorgeschlagenen Default-Werten belassen werden,
# außer natürlich das neu zu vergebende Samba-Administrator-Passwort.

Domänen-Setup abschließen

# Kerberos-Konfiguration an die richtige Stelle kopieren:
cp /var/lib/samba/private/krb5.conf /etc/

# Domänen-Controller-Dienste für den 
# automatischen Systemstart konfigurieren:
systemctl stop smbd nmbd winbind
systemctl disable smbd nmbd winbind
systemctl unmask samba-ad-dc
systemctl start samba-ad-dc
systemctl enable samba-ad-dc

reboot

Falls gewünscht: Passwortkomplexität verringern

# Folgende Befehle deaktivieren die Passwortkomplexität 
# bis auf eine minimale Passwortlänge von 7 Zeichen:
samba-tool domain passwordsettings set --complexity=off
samba-tool domain passwordsettings set --history-length=0
samba-tool domain passwordsettings set --min-pwd-age=0
samba-tool domain passwordsettings set --max-pwd-age=0

Nützliche Befehle zur Überprüfung des Domänen-Controllers

# Samba Status anzeigen:
smbclient -L localhost -U%

# Domain-Level anzeigen:
samba-tool domain level show

# Passwortrichtlinien anzeigen:
samba-tool domain passwordsettings show

SSH-Kommunikation zwischen Samba-Server und OPNsense vorbereiten

Da LDAP-Verbindungen zum Samba-Server verschlüsselt erfolgen sollen und der OPNsense-Reverse-Proxy keine LDAP-Anfragen entgegen nehmen kann, muss das Zertifikat für die Verschlüsselung direkt auf dem Samba-Server hinterlegt werden.

Zur Zertifikatsgenerierung wird aber genau wie für alle anderen Zertifikate das OPNsense-Let's-Encrypt-Plugin verwendet. Nachdem dieses ein Zertifikat für z. B. ldap.ihre-schule.de generiert hat, kopiert es entsprechende Zertifikatsdateien auf den Samba-Server. Für das automatisierte Kopieren benötigt OPNsense Konsolenzugriff auf den Samba-Server. Hierfür müssen entsprechende Schlüssel generiert und zwischen beiden Systemen ausgetauscht werden:

# Auf Samba-Server-Konsole:

# Erzeugung von privatem (id_rsa) und öffentlichem (id_rsa.pub) Schlüssel
# im Ordner /root/.ssh
ssh-keygen

# Fall 1: die Datei /root/.ssh/authorized_keys existiert noch nicht
# -> Die Datei /root/.ssh/id_rsa.pub wird umbenannt in authorized_keys:
mv /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys

# Fall 2: die Datei /root/.ssh/authorized_keys existiert bereits
# -> Der Inhalt der Datei /root/.ssh/id_rsa.pub wird kopiert
# und in die Datei /root/.ssh/authorized_keys eingefügt

# Berechtigung setzen:
chmod -R 0600 /root/.ssh
# Auf OPNsense-Konsole:

mkdir /root/.ssh
# Den auf Samba-Server erzeugten privaten Schlüssel (id_rsa) 
# per sftp in den Ordner /root/.ssh kopieren

# Die Datei id_rsa umbennennen in id_rsa_samba
mv /root/.ssh/id_rsa /root/.ssh/id_rsa_samba

# Berechtigung setzen:
chmod -R 0600 /root/.ssh

# Einmal von OPNsense-Konsole bei Samba-Server anmelden,
# damit der Samba-Server der Liste der vertrauten Computer hinzugefügt wird:
ssh -i /root/.ssh/id_rsa_samba root@10.1.100.7

Das Generieren des Zertifikats mit dem OPNsense-Let's-Encrypt-Plugin sowie das Kopieren der Dateien auf den Samba-Server wird in der OPNsense-Anleitung im Abschnitt Let's Encrypt erklärt.

Samba-Konfiguration anpassen

vim /etc/samba/smb.conf
Datei /etc/samba/smb.conf
# Ändern Sie die bestehende Datei gemäß der folgenden Vorlage ab.
# Verwenden Sie den von Ihnen verwendeten Domänen-Namen 
# an den entsprechenden Stellen.

# Global parameters
[global]
	netbios name = SAMBA
	realm = SCHULNETZ.INTRA
	server services = s3fs, rpc, nbt, wrepl, ldap, cldap, kdc, drepl, winbindd, ntp_signd, kcc, dnsupdate
	workgroup = SCHULNETZ
	server role = active directory domain controller
	server role check:inhibit=yes
	#verstärkte Sicherheit für LDAP deaktivieren (Port 389 möglich)
	ldap server require strong auth = no
	# notwendig für FreeRADIUS mit ntlm-V1
	ntlm auth = yes
	# Enable ldaps
	# Achtung: Verwenden Sie die folgenden vier Zeilen erst dann, wenn die oben
	# beschriebene Zertifikatsgenerierung funktioniert hat!
	tls enabled  = yes
		tls keyfile  = /etc/samba/tls/ldap.ihre-schule.de.key
		tls certfile = /etc/samba/tls/fullchain.cer
		tls cafile   = 

[netlogon]
	path = /var/lib/samba/sysvol/schulnetz.intra/scripts
	read only = No

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

Installation und Verwendung des LDAP-Account-Managers

Installation/Update des LDAP-Account-Managers

Laden Sie zunächst die aktuelle .deb-Installationsdatei von der Herstellerseite herunter:
https://www.ldap-account-manager.org/lamcms/releases

Kopieren Sie die Datei z. B. mit WinSCP ins Verzeichnis /root des Samba-Servers.

dpkg -i /root/<Dateiname der heruntergeladenen Datei>.deb

# Ggf. fehlende Abhängigkeiten nachinstallieren:
apt -f install

Konfiguration des LDAP-Account-Managers

  • Aufruf der Weboberfläche des LDAP-Account-Managers: http://10.1.100.7/lam (bzw. verschlüsselt: https://usermanagement.ihre-schule.de)
  • Hauptpasswort setzen: LAM-Einstellungen → Allgemeine Einstellungen → Neues Hauptpasswort (Standard: lam)
  • Profilpasswort setzen: LAM-Einstellungen → Serverprofile ändern → Serverprofile verwalten → lam → Neues Profilpasswort
  • Serverprofile "lam" ändern
    • Allgemeine Einstellungen
      • Server-Adresse: ldaps://ldap.ihre-schule.de:636
      • TLS aktivieren: nein
      • Baumansicht: DC=schulnetz,DC=intra
      • Login-Methode: feste Liste
      • Liste der berechtigten Benutzer: CN=Administrator,CN=Users,DC=schulnetz,DC=intra
    • Accounttypen
      • Benutzer:
        LDAP-Suffix: ou=Users,ou=School,dc=schulnetz,dc=intra
        Attribute der Listen: #userPrincipalName;#givenName;#sn;#mail
      • Gruppen:
        LDAP-Suffix: ou=Groups,ou=School,dc=schulnetz,dc=intra
        Attribute der Listen: #cn;#gidNumber;#memberUID;#description
        Hosts und Samba-Domänen löschen
    • Module
      • Benutzer: Windows (windowsUser)(*)
        restliche Module entfernen
      • Gruppen
        Windows (windowsGroup)(*)
        restliche Module entfernen

Verwendung des LDAP-Account-Managers

  • Aufruf der Weboberfläche: http://10.1.100.7/lam (bzw. verschlüsselt: https://usermanagement.ihre-schule.de)

Verzeichnisstruktur anlegen

  • Mit dem OU-Editor folgende OU-Struktur im Users-Verzeichnis anlegen:
    • Users
      • students
        • 5a
        • 10x
      • teachers
      • ggf. guests

Gruppen erzeugen und Benutzer zuordnen

  • Unter dem Reiter "Gruppen" folgende Gruppen (Domänenlokal) erzeugen und entsprechend User zuordnen:
    • schueler (→ alle Schüler-User)
    • lehrer (→ alle Lehrer-User)
    • ggf. schulleitung
    • ggf. erweiterte-schulleitung
    • wifi (→ alle User, die Zugriff zum WLAN erhalten sollen)
    • 5a (→ alle Schüler der 5a) … bis 10x

Benutzer importieren

  • Libre-Office-Calc-Vorlage "csv-generator-schueler" bzw. "csv-generator-lehrer" verwenden und nach eigenen Gegebenheiten anpassen
  • Tabellenblatt Eingabe: Daten eingeben
  • Tabellenblatt PW-Generator: Gewünschte Anzahl an Passwörtern durch kopieren der Formel eingeben → Passwörter in Zwischenablage kopieren
  • Tabellenblatt Eingabe: Passwörter einfügen über: Bearbeiten → Inhalte einfügen (Haken bei Formeln entfernen)
  • Tabellenblatt CSV-LAM → Datei → Speichern unter
    → Dateityp: Text CSV > Haken bei Filtereinstellungen bearbeiten
    → Zeichensatz: Unicode (UTF-8) > OK

Installation des FreeRadius-Servers

Der FreeRADIUS-Server wird aktuell auf jenem Computer installiert auf dem auch der Samba-Domänen-Controller läuft. Soll der Radius-Server auf einem anderem System installiert werden, muss dieser der Domäne hinzugefügt werden.

Installation notwendiger Pakete

apt install freeradius freeradius-utils -y

Autostart des FreeRADIUS-Servers aktivieren

update-rc.d freeradius enable

Die Authentifizierungsbefehle NTLM-Auth und wbinfo mit bestehenden Benutzern testen

ntlm_auth --request-nt-key --domain=SCHULNETZ --username=<benutzername> --password=<passwort>
wbinfo -a <benutzername>%<passwort>

Datei ntlm_auth anpassen

vim /etc/freeradius/3.0/mods-enabled/ntlm_auth
Datei /etc/freeradius/3.0/mods-enabled/ntlm_auth
# Domäne: SCHULNETZ
# Erforderliche Gruppe für Zugangsberechtigung zum WLAN: SCHULNETZ\wifi
exec ntlm_auth {
        wait = yes
        program = "/usr/bin/ntlm_auth --request-nt-key --domain=SCHULNETZ --username=%{mschap:User-Name} --password=%{User-Password} --require-membership-of=SCHULNETZ\wifi"
}

Datei mschap anpassen

vim /etc/freeradius/3.0/mods-enabled/mschap
Datei /etc/freeradius/3.0/mods-enabled/mschap
# ntlm_auth auskommentieren, als Domain SCHULNETZ eintragen 
# und als erforderliche Gruppe SCHULNETZ\wifi festlegen

ntlm_auth = "/usr/bin/ntlm_auth --request-nt-key --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00} --require-membership-of=SCHULNETZ\wifi"

ntml_auth als Authentifierizerungsmethode in den Seiten default und inner-tunnel festlegen

vim /etc/freeradius/3.0/sites-enabled/default
Datei /etc/freeradius/3.0/sites-enabled/default
#nach authenticate ntlm_auth einfügen
authenticate {
        ntlm_auth
#...
vim /etc/freeradius/3.0/sites-enabled/inner-tunnel
Datei /etc/freeradius/3.0/sites-enabled/inner-tunnel
#nach authenticate ntlm_auth einfügen
authenticate {
        ntlm_auth
#...

Neustart und Test des FreeRADIUS-Servers

service freeradius restart

# radtest mit bestehenden Benutzern der Gruppe wifi durchführen
# (Ergebnis muss “Access-Accepted" sein)
radtest -t mschap username password localhost 0 testing123

# Debug bei Fehlern:
## FreeRADIUS-Service stoppen:
service freeradius stop
## FreeRADIUS-Server mit Konsolenausgabe starten
/usr/sbin/freeradius -X
## Authentifizierungsversuch unternehmen und Fehlermeldungen auswerten

# Eventuell für mschap notwendig: 
# den Benutzer freerad der Gruppe winbindd_priv hinzufügen:
adduser freerad winbindd_priv

Zugriffsberechtigte Clients (Access-Points) definieren

vim /etc/freeradius/3.0/clients.conf
Datei /etc/freeradius/3.0/clients.conf
# Beispiel für alle Clients (= Access-Points) aus dem Teilnetz 10.1.254.0/24

client 10.1.254.0/24 {
	secret = <Radius-Passwort des Access-Points>
	shortname = 10.1.254-netw
	nas_type = other
}
service freeradius restart

Festlegungen im Access-Point

  • Verschlüsselung: 802.11i (WPA)-802.1x (= WPA Enterprise)
  • Radius-Server: 10.1.100.7
  • Port: 1812
  • Secret: <Radius-Passwort vergeben>

Installation Self Service Password

Für die Installation benötigen Sie zunächst die aktuellste .deb-Datei, welche Sie unter ltb-project.org/download finden.

Kopieren Sie diese in das Verzeichnis root ihres Samba-Servers.

Installation des heruntergeladenen .deb-Pakets

dpkg -i /root/self-service-password_<heruntergeladene version>_all.deb

# Ggf. sind zusätzliche Pakete erforderlich.
# Diese können Sie mit folgendem Befehl nachinstallieren:
# apache2 php php-ldap php-mcrypt php-mbstring

Kopieren und Editieren der zugehörigen Apache-Konfigurationsdatei

cp /etc/apache2/sites-available/self-service-password.conf /etc/apache2/conf-available/
vim /etc/apache2/conf-available/self-service-password.conf
Datei /etc/apache2/conf-available/self-service-password.conf
Alias /selfservice /usr/share/self-service-password

    <Directory /usr/share/self-service-password>
        AllowOverride None
        <IfVersion >= 2.3>
            Require all granted
        </IfVersion>
        <IfVersion < 2.3>
            Order Deny,Allow
            Allow from all
        </IfVersion>
    </Directory>

    <Directory /usr/share/self-service-password/scripts>
        AllowOverride None
        <IfVersion >= 2.3>
            Require all denied
        </IfVersion>
        <IfVersion < 2.3>
            Order Deny,Allow
            Deny from all
        </IfVersion>
    </Directory>

Aktivieren der Apache-Konfiguration und Neustart des Apache-Servers

a2enconf self-service-password
service apache2 restart

Editieren der Self-Service-Password-Konfiguration

vim /usr/share/self-service-password/conf/config.inc.php
Datei /usr/share/self-service-password/conf/config.inc.php
# Nachfolgend sind nur jene Zeilen der Konfigurationsdatei dargestellt,
# in denen sich Änderungen ergeben. Passen Sie diese entsprechend an
# und ersetzen sie die Zeilen in der Konfigurationsdatei.

$ldap_url = "ldaps://ldap.ihre-schule.de:636";
$ldap_binddn = "CN=Administrator,CN=Users,DC=schulnetz,DC=intra";
$ldap_bindpw = "<LDAP-Administrator-Passwort>";
$ldap_base = "OU=School,DC=schulnetz,DC=intra";
$ldap_login_attribute = "sAMAccountName";
$ad_mode = true;
$samba_mode = true;
$pwd_min_length = 8;
$use_questions = false;
$mail_from = "<E-Mail-Adresse zum Versenden neuer Passwörter>";
$mail_smtp_host = '<SMTP-Server>';
$mail_smtp_auth = true;
$mail_smtp_user = '<SMTP-Benutzer>';
$mail_smtp_pass = '<SMTP-Passwort>';
$mail_smtp_port = 587;
$use_sms = false;
$keyphrase = "<langes Passwort für Verschlüsselung>";
$lang = "de";

Aufruf der Webschnittstelle

Benutzer können das Tool Self Service Password nun dazu verwenden, ihr Passwort zu ändern oder sich an die im LDAP-Verzeichnis hinterlegte E-Mail-Adresse einen Link zum zurücksetzen des Passworts zukommen zu lassen.

Je nachdem, ob und wie Sie den Reverse-Proxy konfiguriert haben, ist Self Service Password unter der IP oder dem FQDN des Samba-Servers erreichbar - z. B.:

  • 10.1.100.7/selfservice
  • usermanagement.ihre-schule.de/selfservice

Ihre Kommentare

Kommentar von Fred |

Hallo Thomas,

erstmal mein Kompliment zu dem System! Bin absolut begeistert.

Hast du schon was zum Kennwort ändern hinbekommen (siehe to do oben)? Versuche mich vergeblich seit ein paar Tagen mit dem "Self Service Password" von ltb-project.

Grüße aus Mittelfranken

Fred

Antwort von Thomas Mayer

Hallo Fred,

vielen Dank für das positive Feedback - endlich schreibt mal wer ;-)

Ich habe meine Self-Service-Password-Erkenntnisse ergänzt. Sie sind von der Beschreibung noch etwas kurz - ich hoffe sie helfen Dir weiter.
Ich plane, als Benutzerverzeichnis statt Samba künftig OpenLDAP einzusetzen. Dann könnte die Nextcloud den Self-Service für die Nutzer übernehmen und OPNSense könnte als FreeRADIUS-Server fungieren...

Beste Grüße
Tom

Was ist die Summe aus 6 und 9?