331 lines
13 KiB
Markdown
331 lines
13 KiB
Markdown
|
|
# 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 }
|