# 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. ## 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. ## smb.conf ```ini [global] workgroup = WORKGROUP ``` Hier wird die Arbeitsgruppe bzw. die Domäne, in der der Samba-Server betrieben werden soll definiert. ```ini server string = %h server (Samba, Ubuntu) ``` Die Beschreibung des Servers (mouse-over) wobei für %h für der hostname des Servers eingesetzt wird. ```ini wins support = no wins server = w.x.y.z ``` Kann geändert werden zu ```ini wins support = yes # wins server = w.x.y.z ``` Damit übernimmt der Samba-Server die [WINS](https://de.wikipedia.org/wiki/Windows_Internet_Naming_Service)-Aufgaben. **In einem Netzwerk sollte immer nur ein WINS-Server aktiv laufen.** ```ini dns proxy = no ``` Bei der Grundkonfiguration no wird kein DNS-Server für die Namensauflösung genutzt sondern nur die lokalen host Dateien, WINS-Server und Broadcasts. Wenn ein funktionierender DNS-Server im Netzwerk vorhanden ist kann dieser durch den Einsatz von yes ebenfalls genutzt werden. ```ini interfaces = 127.0.0.0/8 eth0 bind interfaces only = yes ``` Hier kann konfiguriert werden ob der Samba-Server auf einer, mehreren oder allen Netzwerkkarten und IP-Adressen verfügbar ist. Wenn Sie hier nichts verändern ist der Server Grundsätzlich auf allen Netzwerkkarten und Subnetzen erreichbar. ```ini server role = ``` standalone server: Die einfachste Variante, nur User die per smbpasswd hinzugefügt wurden können auf den Samba-Server zugreifen. member server: Der Server ist Mitglied einer Domäne und hat ein Maschinenkonto auf dem ADDC an welchen auch die Benutzeranfragen weitergegegeben werden. classic primary domain controller: Samba agiert als NT4 PDC classic backup domain controller : Samba ist ein sekundärer NT4 DC active directory domain controller: Samba agiert als ADDC und übernimmt die gesamte Benutzerauthentifizierung. Diese Einstellung sollte nicht von Hand genutzt werden da hierfür ein Provisionierungsscript genutzt wird. ``` map to guest = bad user ``` Was passiert mit unbekannten Nutzern. ## Freigaben Freigaben werden je nach Funktionalität unterschiedlich beschrieben wobei es auch besondere Freigaben gibt, welche z.B. Drucker, Clientspezifisch oder Userspezifische Freigaben betreffen. ## Beispiel einer freien Freigabe z.B. Medienfreigabe im Privatbereich ```ini [Musik] comment = Musikfreigabe path = /srv/samba/musik read only = no browseable = yes ``` Nach dem Speichern überprüfen Sie ob alle Funktionen, die sie definiert haben korrekt übernommen werden konnten: ```bash sudo samba-tool testparm ``` Sie werden feststellen, dass die Option browseable nicht angezeigt wird. Dies liegt daran, dass diese Kombination browseable = yes ein defaultwert ist und somit nicht angezeigt wird. Damit diese Freigabe auch funktioniert, muss Sie auch auf dem System vorhanden sein, sowie die korrekte Rechtevergabe erfolgt sein. ```bash sudo mkdir /srv/samba sudo mkdir /srv/samba/musik sudo chmod -R a+rw /srv/samba/musik ``` nach Abschluss dieser Aktion muss der Samba-Dienst und der NetBIOS-Nameserver neu gestartet werden. ```bash sudo systemctl restart smbd.service nmbd.service ``` Alle vor der Installation von Samba vorhandenen User sind nicht in der Samba-Datenbank hinterlegt und müssen nachgepflegt werden. Hierbei geben sie ihren Usernamen und ihr Passwort erneut ein. Spätere Änderungen werden synchronisiert. ```bash sudo smbpasswd -a USERNAME ``` Nun können Sie von einem beliebigen Client auf diese Freigabe zugreifen: Windows: Explorer öffnen und in der Adresszeile: ``` \\IP des Servers\Musik ``` eingeben oder direkt ein Netzlaufwerk verbinden Linux und OSX: Im Dateimanager in die Adresszeile: ``` smb://IP des Servers/Musik ``` ## 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 addgrouo 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 mkdir /srv/samba/lieferscheine sudo chown -R nobody:angebote_ae /srv/samba/angebote sudo chown -R nobody:lieferscheine_ae /srv/samba/lieferscheine sudo chmod -R 0077 /srv/samba/angebote sudo chmod -R 0077 /srv/samba/lieferscheine sudo nano /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. [PDF herunterladen](Windows-Freigabe_mit_Samba.pdf){ .md-button }