Server-Blog Ubuntu Server

Thema Samba-Dateiserver: Zentralisierte Freigaben mit LDAP und Virenscan

Abschnitt 1: Installation und LDAP-Vorbereitung

Dieser Samba-Server wird als **Standalone-Server** betrieben, wobei die Authentifizierung von Benutzern und Gruppen vollständig über einen zentralen **LDAP-Server** (z.B. OpenLDAP) erfolgt.

1. Installation der Pakete:

Für dieses Setup benötigen wir Samba, die LDAP-Bibliotheken zur Authentifizierung und die **ClamAV VFS-Module** für den Virenscan.

apt install samba samba-common samba-client libnss-ldap libpam-ldap \
samba-vfs-modules clamav-daemon -y

2. Samba Konfigurationsdatei (smb.conf):

Wir arbeiten mit der Datei **/etc/samba/smb.conf**. Die folgenden Abschnitte zeigen die kritischen **LDAP- und ID-Mapping-Einstellungen**.


Abschnitt 2: Globale LDAP- und Sicherheitskonfiguration

Die Konfiguration stellt sicher, dass Samba über **SSL (LDAPS)** auf den LDAP-Server zugreift und das **RID-Backend** für das ID-Mapping verwendet, um Unix-IDs eindeutig zuzuordnen.

[global]

# WICHTIG: Ersetzen Sie 'ihredomain.com' durch Ihre Domain
workgroup = FIRMENNAME
passdb backend = ldapsam:ldaps://ldap.ihredomain.com
ldap suffix = dc=ihredomain,dc=com
ldap admin dn = cn=admin,dc=ihredomain,dc=com
ldap passwd sync = yes
ldap user suffix = ou=samba
ldap group suffix = ou=samba
server role = standalone server

# Neues ID-Mapping mit dem rid-Backend (für LDAP-Integration empfohlen)
idmap backend = rid
idmap rid:range = 10000-20000
idmap rid:unix_nss_mode = yes
idmap rid:unix_nss_mode:rid_base = 200000

log level = 3
# Hinweis: LDAP SSL ist hier aktiviert ('ldaps://'), die Option 'ldap ssl = no' \
# kann in modernen Setups entfernt werden, wenn SSL aktiv genutzt wird.
ldap ssl = no 

security = user

#### Debugging/Accounting ####
   log file = /var/log/samba/log.%m
   max log size = 1000
   logging = file
   panic action = /usr/share/samba/panic-action %d

Abschnitt 3: Freigaben (Shares) und VFS-Module

Die Freigaben nutzen erweiterte **VFS-Module** (**Virtual File System**-Module) für den **Virenschutz (ClamAV)** und einen **Papierkorb (Recycle Bin)**.

1. Home-Verzeichnisse ([homes])

Jeder Benutzer erhält eine private Freigabe zu seinem Home-Verzeichnis, das automatisch über /home/%S bereitgestellt wird. Der Virenfilter ist aktiv.

[homes]
    comment = Home Directories
    browseable = no
    path = /home/%S
    writeable = yes
    create mode = 0640
    directory mode = 0740
    read only = no
    valid users = @smb-user
    force user = %S
    force group = smb-user

    # VFS-Module für ACLs und Virenschutz
    vfs objects = acl_xattr virusfilter
    virusfilter:scanner = clamav
    virusfilter:infected file action = quarantine

#   aktiviert Beschränkungen für die Laufwerksgröße je Benutzer
#    quota = user
#    quota limit = 5G

2. Allgemeine Freigabe ([beispiel2]) mit Papierkorb

Diese Freigabe beinhaltet das **Recycle Bin** Modul, das gelöschte Dateien für zwei Tage (recycle:maxage = 2d) in einem versteckten Ordner speichert.

[beispiel2]
    path = /home/sharing
    guest ok = no
    writeable = yes
    browseable = yes
    read only = no
    create mask = 0774
    directory mask = 0774
    # Zugriff für explizite Benutzer und LDAP-Gruppe
    valid users = @familie benutzer1 benutzer2 @ldap

    # Papierkorb-Modul
    vfs objects = recycle acl_xattr virusfilter
    recycle:repository = .recycle/%U
    recycle:keeptree = yes
    recycle:versions = yes
    recycle:maxsize = 0
    recycle:exclude = *.tmp, *.temp, *.bak, ~$*
    recycle:exclude_dir = .tmp, .cache
    recycle:touch = yes
    recycle:perms = 0600
    recycle:directory_perms = 0700
    recycle:noversions = *.pst
    recycle:mode = DELETED_FILES
    recycle:maxage = 2d

    # Virusfilter Modul
    virusfilter:scanner = clamav
    virusfilter:infected file action = quarantine

Abschnitt 4: ClamAV-Integration und Überwachung

Damit der **Virusfilter** zuverlässig funktioniert, muss ClamAV aktuell gehalten werden.

1. Manueller Virenscan (Beispiel-Skript):

Das Skript aktualisiert die Virendatenbank und scannt das gesamte /home/-Verzeichnis. Infizierte Dateien werden in den Ordner /home/quarantaene verschoben.

root@mail-srv:~# cat /root/scan-av.sh
clamscan -ir /home/ --move=/home/quarantaene
freshclam

2. Automatisierter Cron-Job:

Um das Skript täglich um 01:00 Uhr auszuführen und die Virendefinitionen zu aktualisieren, verwenden Sie diesen Cron-Job (in der root-Crontab):

0 1 * * * /root/scan-av.sh > /dev/null 2>&1

3. Abschließende Schritte:

Nach dem Speichern der smb.conf die Syntax prüfen und die Dienste neustarten:

testparm /etc/samba/smb.conf
systemctl restart smbd nmbd