linux-rhel-centos-fedora storage networking samba smb windows rhel

Samba: Windows File Sharing on RHEL (Artikel 101)

Konfiguration von Samba unter RHEL zur Bereitstellung von Dateidiensten für Windows-Clients. Integration in heterogene Netzwerke, Freigabe-Management und SELinux-Konfiguration.

# Samba on RHEL: Brückenschlag zur Windows-Welt

TL;DR / Management Summary Samba ist das Schweizer Taschenmesser für die Interoperabilität zwischen Linux und Windows. Es implementiert das SMB/CIFS Protokoll und ermöglicht es RHEL-Servern, als Dateiserver für Windows-Clients zu fungieren oder sich in ein Active Directory zu integrieren. Ein Senior Admin muss wissen, dass Samba unter RHEL eine sehr spezifische Konfiguration von SELinux und der Firewalld benötigt, da sonst Freigaben zwar sichtbar, aber nicht zugreifbar sind.


# 1. Einführung & Architektur

SMB im Linux-Kernel.

Samba besteht aus zwei Haupt-Dämons:

  1. smbd: Bietet Datei- und Druckdienste an (Port 445).
  2. nmbd: Bietet NetBIOS-Namensauflösung an (Port 137/138 - heutzutage oft optional).
graph LR
    A[Windows Client] -->|SMB Port 445| B[RHEL: smbd]
    B --> C{SELinux Check}
    C -->|Allowed| D[Filesystem: /data/share]
    B --> E[User Database: /var/lib/samba/private/passdb.tdb]
    F{firewalld} -->|Allow service: samba| B

# 2. Installation & Grundkonfiguration

Schnell zur ersten Freigabe.

# Schritt 1: Pakete installieren

sudo dnf install samba samba-common samba-client
sudo systemctl enable --now smb nmb

# Schritt 2: Samba-Benutzer anlegen

Samba nutzt eine eigene Passwort-Datenbank. Der User muss aber im Linux-System existieren.

sudo smbpasswd -a sysadmin

# Schritt 3: Freigabe definieren (/etc/samba/smb.conf)

[global]
    workgroup = SAMBA
    security = user
    passdb backend = tdbsam

[shared_docs]
    comment = Enterprise Shared Documents
    path = /data/samba/docs
    browseable = yes
    writable = yes
    guest ok = no
    valid users = @smbgroup

# 3. Firewall & SELinux: Die RHEL-Hürden

Zugriff gewähren.

# Firewall öffnen

sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload

# SELinux für Samba (Kritisch!)

Dateien, die via Samba geteilt werden, benötigen ein spezielles Label.

# Pfad labeln
sudo semanage fcontext -a -t samba_share_t "/data/samba(/.*)?"
sudo restorecon -Rv /data/samba

Wenn User ihre Home-Verzeichnisse via Samba sehen sollen:

sudo setsebool -P samba_enable_home_dirs on

# 4. Day-2 Operations: AD-Integration (Ausblick)

Zentrale Authentifizierung.

In großen Umgebungen nutzt man keine lokalen Samba-User, sondern bindet RHEL ins Active Directory ein.

  • Tools: realmd, sssd, adcli.
  • Vorteil: Windows-Admins können Berechtigungen über gewohnte Gruppen steuern.

# 5. Troubleshooting & “War Stories”

Wenn der Explorer ‘Netzwerkpfad nicht gefunden’ meldet.

# Story 1: “Der Guest-Account Error”

Symptom: Windows-Clients können die Freigabe sehen, aber beim Doppelklick kommt “Zugriff verweigert”, ohne dass nach einem Passwort gefragt wird. Ursache: Windows versucht es erst mit dem Gast-Account. Wenn map to guest = bad user in der global Sektion fehlt, schlägt die Verhandlung fehl. Lösung: Fügen Sie map to guest = bad user hinzu, damit Windows zur Passworteingabe aufgefordert wird.

# Story 2: “Symlink-Sackgasse”

Symptom: Innerhalb einer Samba-Freigabe funktionieren Linux-Symlinks nicht, die auf Verzeichnisse außerhalb der Freigabe zeigen. Ursache: Aus Sicherheitsgründen verhindert Samba das Verlassen des Freigabe-Pfads. Lösung: Wenn nötig, in der global Sektion aktivieren (Vorsicht!): follow symlinks = yes, wide links = yes, unix extensions = no.


# 6. Fazit & Empfehlung

  • Sicherheit: Nutzen Sie immer SMB3 (Standard in RHEL 8/9). Deaktivieren Sie SMB1 (min protocol = SMB2).
  • Performance: Für 10G-Netzwerke nutzen Sie socket options = TCP_NODELAY in der Config.
  • Wartung: Prüfen Sie regelmäßig mit smbstatus, wer aktuell welche Dateien geöffnet hat.

# Anhang: Cheatsheet

Aufgabe RHEL Befehl
Syntax-Check Config testparm
Aktive Verbindungen smbstatus
Samba User listen pdbedit -L -v
Passwort ändern smbpasswd <user>
Share lokal testen smbclient -L localhost -U <user>
SELinux Booleans `getsebool -a