Zum Inhalt springen

Windows-Freigabe mit Samba

Samba implementiert das SMB/CIFS-Protokoll unter Linux und ermöglicht damit Dateifreigaben, die Windows-, macOS- und Linux-Clients gleichermaßen einbinden können. Auf RHEL ist — wie bei WordPress — SELinux zu beachten.

Terminal-Fenster
sudo dnf install samba samba-client samba-common
sudo systemctl enable --now smb
sudo systemctl enable --now nmb # NetBIOS-Namensauflösung (optional)
Terminal-Fenster
sudo mkdir -p /srv/freigabe
sudo chown -R root:root /srv/freigabe
sudo chmod 2775 /srv/freigabe # SGID: neue Dateien erben Gruppe

Für eine Freigabe auf der alle Benutzer einer Gruppe schreiben dürfen:

Terminal-Fenster
sudo groupadd freigabe-gruppe
sudo chown root:freigabe-gruppe /srv/freigabe
sudo usermod -aG freigabe-gruppe micha
Terminal-Fenster
sudo nano /etc/samba/smb.conf
[global]
workgroup = WORKGROUP
server string = Linux Fileserver
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
# Freigabe für eine Gruppe
[Freigabe]
comment = Gemeinsame Ablage
path = /srv/freigabe
valid users = @freigabe-gruppe
read only = no
browseable = yes
create mask = 0664
directory mask = 2775
# Persönliches Home-Verzeichnis (optional)
[homes]
comment = Heimatverzeichnis
valid users = %S
read only = no
browseable = no

Konfiguration prüfen:

Terminal-Fenster
testparm # Syntax und Logik prüfen
testparm -s # bereinigte Ausgabe ohne Kommentare

Samba verwaltet Passwörter in einer eigenen Datenbank — unabhängig vom Linux-Systempasswort. Der Linux-Benutzer muss aber existieren:

Terminal-Fenster
# Linux-Benutzer anlegen (falls noch nicht vorhanden)
sudo useradd -M -s /sbin/nologin micha # ohne Homedir, kein Shell-Login
# oder für einen normalen Benutzer mit Login:
sudo useradd -m micha
# Samba-Passwort setzen
sudo smbpasswd -a micha # Benutzer hinzufügen + Passwort setzen
sudo smbpasswd -e micha # Benutzer aktivieren (enable)
sudo smbpasswd -d micha # Benutzer deaktivieren (disable)
# Alle Samba-Benutzer anzeigen
sudo pdbedit -L
Terminal-Fenster
# Samba darf auf das Freigabeverzeichnis zugreifen
sudo semanage fcontext -a -t samba_share_t "/srv/freigabe(/.*)?"
sudo restorecon -Rv /srv/freigabe
# Kontext prüfen
ls -laZ /srv/freigabe

Nützliche SELinux-Booleans für Samba:

Terminal-Fenster
# Home-Verzeichnisse freigeben
sudo setsebool -P samba_enable_home_dirs 1
# Samba darf beliebige Dateien lesen/schreiben (weniger sicher)
sudo setsebool -P samba_export_all_rw 1
# Aktuell gesetzte Samba-Booleans anzeigen
getsebool -a | grep samba
Terminal-Fenster
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload
# Was öffnet der samba-Dienst?
firewall-cmd --info-service=samba
# ports: 135/tcp 137/udp 138/udp 139/tcp 445/tcp
Terminal-Fenster
sudo systemctl restart smb nmb
systemctl status smb
Terminal-Fenster
smbclient -L localhost -U micha # Freigaben auflisten
smbclient //localhost/Freigabe -U micha # Freigabe öffnen
# Im smbclient:
smb: \> ls # Inhalt anzeigen
smb: \> put datei # Datei hochladen
smb: \> get datei # Datei herunterladen
smb: \> exit
Terminal-Fenster
sudo mount -t cifs //server/Freigabe /mnt \
-o username=micha,password=...,uid=$(id -u),gid=$(id -g)
# Dauerhaft in /etc/fstab:
//server/Freigabe /mnt/freigabe cifs credentials=/etc/samba/credentials,uid=1000,gid=1000 0 0
Terminal-Fenster
# /etc/samba/credentials (Rechte 600!)
username=micha
password=sicheres-passwort

Im Explorer: \\server-ip\Freigabe oder \\server-hostname\Freigabe

Oder per Kommandozeile (cmd/PowerShell):

net use Z: \\server-ip\Freigabe /user:micha
Terminal-Fenster
journalctl -u smb -f # Samba-Logs live
tail -f /var/log/samba/log.smbd # SMB-Daemon-Log
tail -f /var/log/samba/log.nmbd # NetBIOS-Log
# Verbindungsversuche beobachten
tail -f /var/log/samba/log.*