Aufsetzen eines Fileservers als Mietglied einer Domäne auf Samba Basis
Die Installation und Konfiguration des Fileservers auf einem Linux Server in unserem Fall auf Debian 11 ist einfacher als man denkt. Nach der Konfiguration werden die benötigte Berechtigungen auf dem Fileserver mit Windows Tools auf von einem Windows Rechner vergeben. Der Verwaltungsrechner muss sich selbstverständlich in der Domäne befinden.
Die Konfigurationsdaten des Fileserver fs1 (Mitglied der Domäne)
Betriebssystem: Debian 11
Servername: fs1
Domäne: schule.lan
IP-Adresse: 172.16.0.5
Netmask: 255.255.252.0
Gateway: 172.16.0.1
DNS: 172.16.0.10
Der zu installierende Dienst: Samba als ADS (Mitglied der Domäne)
Es wird davon ausgegangen, dass
- eine VM mit der richtigen Netzwerkkarte erstellt wurde
- debian 11 Standard Installation durchgeführt ist, am besten ohne grafische Oberfläche und mit ssh Server.
Einstellungen zu ssh-Server und update finden die hier Punkt 2 und 3 - die VM Firewall-pfSense läuft und entsprechend konfiguriert ist.

Die zweite Festplatte für Daten wird partitioniert, formatiert und anschließend in System eingebunden, in der Datei /etc/fstab. Der Ordner /data muss existieren, wenn nicht, dann bitte erstellen.
root@fs1:~# cfdisk /dev/sdb
root@fs1:~# mkfs.ext4 /dev/sdb1
root@fs1:~# mkfs.ext4 /dev/sdb1
/dev/sdb1 /data ext4 acl,user_xattr 0 0

Die Samba-Pakete und die Ldap-Tools, die möglicherweise später gebraucht werden, werden jetzt installiert.
root@fs1:~# apt-get install samba winbind smbclient
root@fs1:~# apt-get install ldb-tools ldapscripts
root@fs1:~# apt-get install ldb-tools ldapscripts

Die Samba wird zu einem Mitglied der Domäne konfiguriert. Als erstes leeren wir die schon vorhandene /etc/samba/smb.conf Datei und fügen wir den folgenden Inhalt ein. Danach wird die Datei gespeichert.
[global]
workgroup = SCHULE
realm = SCHULE.LAN
netbios name = FS1
server string = Fileserver
security = ADS
encrypt passwords = true
vfs objects = acl_xattr
idmap config * : backend = tdb
idmap config * : range = 1000000-1999999
idmap config SCHULE : backend = rid
idmap config SCHULE : range = 50000 - 99999
winbind nss info = rfc2307
winbind use default domain = Yes
winbind enum users = yes
winbind enum groups = yes
# oplocks auf no, sonnst bei Profilen nach dem Abmelden kann passieren, dass
# die Datei ntusers.dat und ntusers.ini auf dem Server in Benutzung bleibt.
# Bei nächsten Anmeldung kommen dann Probleme mit den Profilen.
oplocks = no
template shell = /bin/bash
sync always = yes
# admin users = Administrator
# [home] wird nicht die Standard-Freigabe genommen wie [homes]
[home]
comment = Home Ordner
path = /data/home
read only = no
browseable = No
[Profiles]
path = /data/profiles
read only = no
browseable = No
[Marktplatz]
path = /data/marktplatz
comment = Schuldaten
read only = no
browseable = yes
workgroup = SCHULE
realm = SCHULE.LAN
netbios name = FS1
server string = Fileserver
security = ADS
encrypt passwords = true
vfs objects = acl_xattr
idmap config * : backend = tdb
idmap config * : range = 1000000-1999999
idmap config SCHULE : backend = rid
idmap config SCHULE : range = 50000 - 99999
winbind nss info = rfc2307
winbind use default domain = Yes
winbind enum users = yes
winbind enum groups = yes
# oplocks auf no, sonnst bei Profilen nach dem Abmelden kann passieren, dass
# die Datei ntusers.dat und ntusers.ini auf dem Server in Benutzung bleibt.
# Bei nächsten Anmeldung kommen dann Probleme mit den Profilen.
oplocks = no
template shell = /bin/bash
sync always = yes
# admin users = Administrator
# [home] wird nicht die Standard-Freigabe genommen wie [homes]
[home]
comment = Home Ordner
path = /data/home
read only = no
browseable = No
[Profiles]
path = /data/profiles
read only = no
browseable = No
[Marktplatz]
path = /data/marktplatz
comment = Schuldaten
read only = no
browseable = yes

Es wird die Datei /etc/krb5.conf zu unseren Bedürfnissen angepasst. Den vorhandenen Inhalt löschen wir und ersetzten mit unserem.
[libdefaults]
default_realm = SCHULE.LAN
dns_lookup_realm = false
dns_lookup_kdc = true
[realms]
SCHULE.LAN = {
kdc = dc1.schule.lan
master_kdc = dc1.schule.lan
admin_server = dc1.schule.lan
}
[domain_realm]
.dc1.schule.lan = SCHULE.LAN
dc1.schule.lan = SCHULE.LAN
[logging]
kdc = FILE:/var/log/krb5/krb5kdc.log
admin_server = FILE:/var/log/krb5/kadmind.log
default = SYSLOG:NOTICE:DAEMON
default_realm = SCHULE.LAN
dns_lookup_realm = false
dns_lookup_kdc = true
[realms]
SCHULE.LAN = {
kdc = dc1.schule.lan
master_kdc = dc1.schule.lan
admin_server = dc1.schule.lan
}
[domain_realm]
.dc1.schule.lan = SCHULE.LAN
dc1.schule.lan = SCHULE.LAN
[logging]
kdc = FILE:/var/log/krb5/krb5kdc.log
admin_server = FILE:/var/log/krb5/kadmind.log
default = SYSLOG:NOTICE:DAEMON

Wir müssen noch die Einträge in der Datei /etc/nsswitch.conf anpassen. Die Einträge bei paswd und group werden von files auf compat winbind geändert.
passwd: compat winbind
group: compat winbind
shadow: files
gshadow: files
group: compat winbind
shadow: files
gshadow: files

Als Nächstes testen wir, ob Kerberos funktioniert, indem wir uns als Administrator authentifizieren.
root@fs1:~# kinit Administrator

Domäne beitreten
root@fs1:~# net ads join -U Administrator

Mit den folgenden Befehlen kann man, die Freigaben auflisten, Benutzer und Gruppen in der Domäne auflisten und den Status der Dienste anzeigen lassen.
root@fs1:~# smbclient -L localhost -U%
root@fs1:~# wbinfo -u
root@fs1:~# wbinfo -g
root@fs1:~# systemctl status smbd
root@fs1:~# systemctl status smbd
root@fs1:~# systemctl status winbind
root@fs1:~# wbinfo --online-status
root@fs1:~# wbinfo -u
root@fs1:~# wbinfo -g
root@fs1:~# systemctl status smbd
root@fs1:~# systemctl status smbd
root@fs1:~# systemctl status winbind
root@fs1:~# wbinfo --online-status

Die Ordner für die Daten werden erstellt.
root@fs1:~# mkdir -p /data/home
root@fs1:~# mkdir -p /data/marktplatz
root@fs1:~# mkdir -p /data/profiles
root@fs1:~# mkdir -p /data/marktplatz
root@fs1:~# mkdir -p /data/profiles

Jetzt können wir die Samba-Dienste neu starten.
root@fs1:~# systemctl restart smbd.service
root@fs1:~# systemctl restart nmbd.service
root@fs1:~# systemctl restart winbind.service
root@fs1:~# systemctl restart nmbd.service
root@fs1:~# systemctl restart winbind.service