# Windows-Freigabe mit Samba Samba ist die Linux-Variante um SMB-Verbindungen zu Windows, Linux und OS X (macOS) herzustellen. Hierfür wird ein Serverdienst installiert und über eine übersichtliche Konfigurationsdatei entsprechend den Anforderungen eingestellt. Es existieren zwar auch Möglichkeiten diese Freigaben über GUI-Programme oder Webinterfaces zu konfigurieren allerdings sind deren Funktionsumfang meist auf Basis-Funktionen beschränkt. Samba bietet eine Überprüfungsmöglichkeit der Konfigurationsdatei, um Schreibfehler und deren Konsequenzen übersichtlich darzustellen. ## Inhaltsverzeichnis [toc] ## Installation Für die Installation empfiehlt sich die Shell da hierüber sinnvoll beobachtet werden kann welche weiteren Abhängigkeiten installiert werden. ### Shell-Installation Update der Paketdatenbank und der installierten Pakete ```bash sudo apt update && sudo apt-get upgrade -y ``` Installation des Samba-Dienstes ```bash sudo apt install samba ``` Nach der Installation des Dienstes kann dieser über die Konfigurationsdatei /etc/samba/smb.conf bearbeitet werden. Die von Ubuntu vorkonfigurierte Version ist nahezu vollständig selbsterklärend und mit entsprechenden Beispielen versehen. ## /etc/samba/smb.conf ### Samba-Konfiguration (`smb.conf`) einfach erklärt Die Datei `/etc/samba/smb.conf` steuert, wie dein Linux-Server Dateien und Drucker für Windows-, macOS- oder andere Linux-Geräte freigibt. Sie ist in **zwei Hauptbereiche** unterteilt: 1. **Globale Einstellungen** (`[global]`): Grundlegende Server-Konfiguration. 2. **Freigaben** (`[Freigabename]`): Definition einzelner freigegebener Ordner/Drucker. ### 1. Globale Einstellungen `[global]` Diese Einstellungen gelten für den **gesamten Samba-Server**. Hier ein Auszug der wichtigsten Optionen für einen **Standalone-Server** (ohne Domain): ```ini [global] # Name der Arbeitsgruppe (wie in Windows-Netzwerken) workgroup = WORKGROUP # Beschreibung des Servers (erscheint z.B. in Windows-Explorer) server string = %h server (Samba, Ubuntu) # Netzwerk-Interfaces: Auf welchen IP-Adressen/Netzwerkkarten soll Samba laufen? ; interfaces = 127.0.0.0/8 eth0 # Standard: Alle verfügbaren Interfaces ; bind interfaces only = yes # Nur auf den oben genannten Interfaces # Protokollierung: Wo und wie werden Logs geschrieben? log file = /var/log/samba/log.%m # %m = Name des Clients (z. B. "log.PC1") max log size = 1000 # Maximale Log-Größe in KB logging = file # Logs nur in Dateien (nicht syslog) # Sicherheit: Wie authentifizieren sich Nutzer? server role = standalone server # Server arbeitet allein (keine Domain) map to guest = bad user # Unbekannte Nutzer werden als "Gast" behandelt obey pam restrictions = yes # Nutzer müssen sich an Linux-PAM-Regeln halten unix password sync = yes # Samba-Passwort ändert auch Linux-Passwort passwd program = /usr/bin/passwd %u # Programm zum Ändern des Passworts pam password change = yes # Nutze PAM für Passwort-Änderungen # Nutzerfreigaben: Erlaube Nutzern, eigene Freigaben zu erstellen usershare allow guests = yes # Gäste dürfen auf Nutzerfreigaben zugreifen ``` > **Wichtige Hinweise:** > * ````;```` oder ````#````: > * Zeilen mit ````;```` sind deaktivierte Vorschläge (können aktiviert werden). > * Zeilen mit ````#```` sind Standardwerte (werden auch ohne Angabe genutzt). > * ````%h````: Platzhalter für den Hostnamen des Servers. > * ````standalone server````: Der Server arbeitet ohne Domain – Nutzer müssen lokal auf dem Linux-System existieren. #### Anpassungen an Windows 11 Fügen sie unterhalb dieser Einstellungen im noch im Bereich [Global] : ````ini # Protokolle und Kompatibilität server min protocol = SMB2 smb encrypt = desired ```` Erst dadurch kann Windows 11 konsitant darauf zugreifen. ### 2. Freigaben definieren Freigaben werden in eigenen Abschnitten definiert, z. B. [Musik] oder [Drucker]. Jede Freigabe hat einen Namen (erscheint im Netzwerk) und Optionen für Zugriffsrechte. Beispiel 1: Öffentliche Freigabe (z. B. für Musik) ````ini [Musik] comment = Musikfreigabe für alle # Beschreibung (erscheint im Explorer) path = /srv/samba/musik # Pfad zum freigegebenen Ordner browseable = yes # Freigabe ist im Netzwerk sichtbar read only = no # Nutzer dürfen Dateien schreiben guest ok = yes # Gäste (ohne Passwort) dürfen zugreifen ```` Beispiel 2: Eingeschränkte Freigabe (nur für bestimmte Nutzer) ````ini [Dokumente] comment = Vertrauliche Dokumente path = /srv/samba/dokumente browseable = yes read only = no guest ok = no # Kein Gastzugriff valid users = @mitarbeiter # Nur Nutzer der Gruppe "mitarbeiter" dürfen zugreifen write list = @teamleitung # Nur Gruppe "teamleitung" darf schreiben ```` Wichtige Freigabe-Optionen: |Option |Bedeutung |Beispiel | |--------------|------------------------------------------------------------------------|--------------------------| |comment |Beschreibung der Freigabe (erscheint im Explorer). |comment = Medienarchiv | |path |Pfad zum freigegebenen Ordner. |path = /srv/samba/musik | |browseable |yes: Freigabe ist im Netzwerk sichtbar. no: Nur mit direktem Pfad. |browseable = yes | |read only |yes: Nur Lesezugriff. no: Schreibzugriff erlaubt. |read only = no | |guest ok |yes: Gäste (ohne Passwort) dürfen zugreifen. |guest ok = yes | |valid users |Liste der Nutzer/Gruppen, die überhaupt zugreifen dürfen. |valid users = @mitarbeiter| |write list |Liste der Nutzer/Gruppen, die schreiben dürfen (überschreibt read only).|write list = @teamleitung | |create mask |Berechtigungen für neue Dateien (oktal). |create mask = 0664 | |directory mask|Berechtigungen für neue Ordner (oktal). |directory mask = 0775 | |force group |Neue Dateien/Ordner gehören automatisch zu dieser Gruppe. |force group = mitarbeiter | ### 3. Sonderfälle #### Nutzer-Home-Verzeichnisse Jeder Nutzer kann automatisch auf sein eigenes Home-Verzeichnis zugreifen: ````ini [homes] comment = Persönlicher Ordner browseable = no # Nur der eigene Nutzer sieht die Freigabe read only = no # Nutzer darf schreiben valid users = %S # %S = aktueller Nutzer (z. B. "plustig") ```` #### Druckerfreigabe Samba Drucker für Windows-Clients freigeben: ````ini [printers] comment = Alle Drucker path = /var/spool/samba # Spoolfolder für Druckaufträge browseable = no # Drucker sind nicht im Explorer sichtbar printable = yes # Erlaubt Druckaufträge guest ok = no # Nur authentifizierte Nutzer dürfen drucken [print\$] comment = Druckertreiber path = /var/lib/samba/printers browseable = yes read only = yes guest ok = no write list = root, @lpadmin # Nur Admins dürfen Treiber hochladen ```` ### 4. Einstellungen prüfen und übernehmen Nach Änderungen in der smb.conf immer prüfen: ````bash sudo samba-tool testparm ```` Hierbei werden alle Einstellungen angezeigt. Manche bleiben ausgeblendet, wenn sie per defaqult aktiv sind wie z.B. ````browseable = yes```` Wenn keine Fehler auftauchen können alle EInstellungen übernommen werden: ````bash sudo systemctl restart smbd nmbd ```` ## Samba-Projekt 1 einfache Freigaben für Medienplayer KODI: **Vorraussetzungen:** * Samba installiert und in der [Konfiguration für Windows 11](#Anpassungen-an-Windows-11) angepasst ## Beispiel eingeschränkte Freigabe z.B. Unterlagen für bestimmten Personenkreis. Im Vorfeld solcher Freigaben müssen die betreffenden Benutzer zum einen auf dem System vorhanden sein und auch noch ergänzend in Samba bekannt gemacht werden. Dazu legen wir nun 2 neue Nutzer an, um später nachvollziehen zu können wer was darf. Dazu als Beispiel Hans Wurst aus der Produktion und Peter Lustig aus der Verwaltung. Im folgenden werden Zugriffsgruppen definiert welche es ermöglichen die Lese- und Schreibrechte sauber Granuliert darzustellen: | | Lesen Angebote | Schreiben Angebote | Lesen Lieferscheine | Schreiben Lieferscheine | | ------------ | ------------------ | ---------------------- | ----------------------- | --------------------------- | | Hans Wurst | X | | | X | | Peter Lustig | | X | | X | ```bash sudo adduser hwurst sudo adduser plustig sudo addgroup angebote_l sudo addgroup angebote_ae sudo addgroup lieferscheine_l sudo addgroup lieferscheine_ae sudo usermod -aG angebote_l hwurst sudo usermod -aG lieferscheine_ae hwurst sudo usermod -aG angebote_ae plustig sudo usermod -aG lieferscheine_ae plustig ``` Bekanntgabe an Samba: ```bash sudo smbpasswd -a hwurst sudo smbpasswd -a plustig ``` Erstellen der Verzeichnisse: ```bash sudo mkdir /srv/samba/angebote sudo chown -R nobody:angebote_ae /srv/samba/angebote sudo chmod -R 0077 /srv/samba/angebote sudo mkdir /srv/samba/lieferscheine sudo chown -R nobody:lieferscheine_ae /srv/samba/lieferscheine sudo chmod -R 0077 /srv/samba/lieferscheine sudo nano /etc/samba/smb.conf ``` Erklärung: ```bash chown Rekursive USER:GRUPPE Pfad chmod Rekurisv OKTALMODE-RECHTE (Siehe Tabelle) Pfad ```` In der Datei /etc/samba/smb.conf: ```ini [Angebote] comment = Angebote an Kunden path = /srv/samba/angebote guest ok = no browseable = yes readonly = yes valid users = @angebote_l, @angebote_ae write list = @angebote_ae force create mode = 0775 force directory mask = 0775 force group = angebote_ae [Lieferscheine] copy = Angebote comment = Lieferscheine von Lieferanten path = /srv/samba/lieferscheine valid users = @lieferscheine_l, @lieferscheine_ae write list = @lieferscheine_ae force group = lieferscheine_ae ``` ## Userverzeichnis > Jeder User der Zugriffsrechte auf Samba selbst hat kann durch eine spezielle Freigabe automatisch Zugriff auf sein eigenes Home-Verzeichnis erhalten. Diese ist in der Beispielkonfiguration der smb.conf bereits auskommentiert vorhanden und kann schlicht wieder ein kommentiert werden. ```ini [homes] comment = Privates Verzeichnis browseable = no read only = yes create mask = 0700 directory mask = 0700 valid users = %S ``` „homes" ist hier nur ein Platzhalter dieser wird automatisch durch den jeweiligen Usernamen ersetzt und auch der Zugriff ist dann nur für diesen User verfügbar. ## Sonderfall Drucker Für Drucker ist standartmäßig eine Freigabe aktiviert ähnlich wie dies auch Windows in einem Heimnetzwerk tut. Die Konfiguration können Sie der Beispielkonfiguration der smb.conf entnehmen es sind 2 Freigaben notwendig, um ALLE Drucker freizugeben. ```ini [printers] comment = Alle Drucker browseable = no path = /var/spool/samba printable = yes guest ok = no read only = yes create mask = 0700 ``` Damit werden Alle Drucker, die am System eingerichtet sind mit jeweils einem eigenen Eintrag freigegeben. ```ini [print$] comment = Drucker Treiber path /var/lib/samba/printers browseable = yes read only = yes guest ok = no ``` Hier sucht Windows nach Druckertreibern. Die Treiber müssen entweder über andere Wege in dieses Verzeichnis gelegt werden oder es kann auch ein write list Eintrag hinzugefügt werden. ## Netzwerkpapierkorb Auf einem Netzlaufwerk gelöschte Dateien können schnell mal verloren gehen, dafür lässt sich ein Netzwerkpapierkorb einsetzen. Entweder unter global für alle Freigaben oder pro Freigabe einmal einsetzen. ```ini # Virtuelles File System "recycle" wird angelegt vfs object = recycle # Der Pfad zum Papierkorb relativ zur Freigabe (".recyclebin" ist Default). recycle:repository = .recyclebin # Im Papierkorb bleiben Pfad-Angaben erhalten. recycle:keeptree = Yes # Beim Verschieben wird der Zeitstempel angepasst. recycle:touch = Yes # Gleichnamige Dateien werden nicht überschrieben. recycle:versions = Yes # Keine Begrenzung der Dateigröße pro gelöschter Datei. recycle:maxsize = 0 ``` Und wer leert den? Durch Cron wird jeden Tag der Papierkorb durchsucht und alles, was älter als 14 Tage ist gelöscht. ```bash sudo crontab -e ``` In einer Zeile: ``` 0 12 * * * for path in $(grep path /etc/samba/smb.conf | cut -d= -f2 | sed -e 's/ //' -e 's/\%S/*/'); do if ; then find ${path}/.recycle -mindepth 1 -mtime +14 -exec rm -rf {} \;; fi; done ``` Was steht da nun drin: Jeden Tag um 0:12 soll in der smb.conf nach Pfad-Angaben gesucht werden und innerhalb dieser die Pfade „.recycle" nach Dateien durchsucht werden die älter als 14 Tage sind. Diese werden gelöscht. Jetzt in die [PDF herunterladen](Windows-Freigabe_mit_Samba.pdf){ .md-button }