Samba Server unter Debian Lenny einrichten und Samba Share vom Server in Windows XP und Debian mounten

Geschrieben von Eric Scheibler am 25.09.2010

Um mein Archiv im Netzwerk freizugeben, habe ich einen Samba Fileserver eingerichtet. Ziel soll es sein, dass sowohl mein Windows XP PC als auch ein Linux Notebook auf diese Freigabe zugreifen können. ich brauche nur einen Samba Benutzer, der den Ordner /archiv freigibt, der Ordner soll ausschließlich mit Passwort erreichbar sein.

Ersteinrichtung auf dem Server

Samba Installieren:

# apt-get install samba

Setup:

  • Arbeitsgruppe: lan
  • DHCP: nein Den DHCP Server brauche ich nicht, da dies schon meine Fritz!Box übernimmt.

Als nächstes lege ich einen neuen Nutzer an:

# useradd --user-group sambafreigabe

Mit dem Befehl wird ein Nutzer namens sambafreigabe mit der dazugehörigen Gruppe sambafreigabe erstellt. Mit useradd wird weder ein Homeverzeichnis angelegt, noch bekommt der Nutzer eine Shell, dies sollte aus Sicherheitsgründen geschehen, da so das Risiko minimiert werden kann, außerdem braucht dieser User auch schlicht keine Shell. Man kann sich davon überzeugen wenn man die Datei passwd öffnet:

# nano /etc/passwd

Steht in der Zeile von sambafreigabe ganz hinten “/bin/false”, ist alles ok. Allerdings braucht der Nutzer ein gutes Passwort (siehe weiter unten):

# passwd sambafreigabe

Nun erstellt man das Verzeichnis, welches man freigeben will:

# mkdir /archiv

Das Verzeichnis soll der Gruppe sambafreigabe gehören:

# chgrp sambafreigabe /archiv

Als nächstes noch die Rechte neu setzen (siehe auch weiter unten):

chmod 775 /archiv

Anpassen der Samba Konfigurationsdatei

Als erstes sollte man von der aktuellen Konfigurationsdatei ein Backup erstellen:

# cp /etc/samba/smb.conf /etc/samba/smb.conf.bak

Nun folgendes anfügen / ersetzen:

# nano /etc/samba/smb.conf
[global]
...
encrypt passwords = true
invalid users = root
socket options = TCP_NODELAY
# der folgende Befehl bewirkt, dass Umlaute unter Windows korrekt dargestellt werden
display charset = iso-8859-15 ||

# hier folgen die Einstellungen für meinen freigegebenen Ordner
# man kann beliebig viele davon anlegen
# ganz unten anfügen
[archiv]
comment = Mein Archiv
# die zugreifenden Clients sollen Schreibrechte haben
writable = yes
path = /archiv
public = no
# nur der angegebene User kann als Login genutzt werden
valid users = sambafreigabe
# Owner und Gruppe sollen auf die erstellten Daten Vollzugriff haben
# diese Einstellung überschreibt die globalen
force create mode = 0770
force directory mode = 0770

Abspeichern und die Konfiguration überprüfen:

# testparm

Samba verwendet für die Nutzerverwaltung eine eigene Datenbank. Nutzer die dieser Datenbank hinzugefügt werden sollen, müssen bereits als Systemuser existieren. Als Passwort empfiehlt es sich der Übersichtlichkeit halber, das gleiche wie oben zu verwenden (muss natürlich nicht sein).

Nun wird der eigentliche Samba User erstellt:

# smbpasswd -a sambafreigabe

und aktiviert:

# smbpasswd -e sambafreigabe

jetzt kann der Samba Daemon neu gestartet werden:

# /etc/init.d/samba restart

Dateirechte auf dem Server

Die Konfiguration des Samba Daemons ist jetzt abgeschlossen. Ich hatte allerdings noch ein Problem mit den Dateirechten. Solange ich unter Windows eine Datei neu angelegt habe, funktionierte alles. Die Datei wurde mit den nötigen Rechten erstellt und sambafreigabe war der Owner. Die Konflikte begannen, wenn ein anderer Nutzer des Servers eine Datei unter /archiv erstellt hat, so beispielsweise mein mailuser, wenn er einen Mailanhang entpackt. Dann hatte ich unter Windows nicht mehr die nötigen Rechte um diese Datei oder den Ordner wieder entfernen zu können, da ja der mailuser nun der Owner war und alle, die nicht in der Gruppe von mailuser waren nur Leserechte hatten. Ich habe das Problem folgendermaßen gelöst.

  1. Gruppenzugehörigkeit Ich habe oben den User sambafreigabe mit der gleichnamigen Gruppe erstellt. der Nutzer mailuser soll nun ebenfalls zur Gruppe sambafreigabe gehören
# addgroup mailuser sambafreigabe

Obs funktioniert hat, sieht man mit dem Befehl:

# groups mailuser

Da sollte jetzt mailuser und sambafreigabe stehen.

  1. UMASK Die UMASK regelt systemweit, mit welchen Rechten eine Datei erstellt wird, standardmäßig ist dies 022. Das bedeutet, dass bei jeder Datei von den maximalen Rechten 777 jetzt 022 abgezogen wird, also 755 dabei rauskommt, was wiederum heißt, dass die Gruppe lediglich Lesezugriff hat. Ich möchte aber, dass die Gruppe, im speziellen jetzt sambafreigabe, gilt aber natürlich auch für alle anderen, Lese - und Schreibrechte bekommt. Oder anders ausgedrückt: alle neue Dateien sollen mit den Rechten 775 erstellt werden. Dies muss man sich in einem echten Mehrbenutzersystem natürlich gut überlegen, bei mir ändert es an der Datensicherheit nichts. also: den Wert für UMASK von 022 auf 002 bei folgenden Dateien ändern:
  • /etc/profile
  • /etc/login.defs
  • /root/.bashrc

Anschließend muss der Server neu gestartet werden.

  1. Besitzer und Rechte für /archiv anpassen, um die bereits angelegten Daten zu reorganisieren:
# chmod -R 0775 /archiv
# chown -R sambafreigabe:sambafreigabe /archiv
  1. SUID - Bit in /archiv setzen Das SUID Bit ermöglicht es, dass die Gruppe für eine neu zu erstellende Datei vom übergeordneten Ordner übernommen wird. Für mich bedeutet das, dass es egal ist, welcher Nutzer gerade eine Datei anlegt, sie gehört der Gruppe sambafreigabe. Da mailuser jetzt auch zur Gruppe sambafreigabe gehört, ist es also kein Problem mehr, wenn er jetzt eine Datei erzeugt, denn diese wird mit den Rechten 775 erstellt, d.h. ich kann sie auch unter Windows wieder loswerden.
# chmod -R g+s /archiv

Freigabe auf den Clients einrichten

Windows XP

Im Explorer wählt man unter Extras “Netzlaufwerk verbinden”. Dort wählt man sich einen Laufwerksbuchstaben, trägt als Adresse \192.168.100.1 ein, wobei die Adresse der IP des Servers entsprechen sollte und hakt die Checkbox “Verbindung bei Anmeldung wiederherstellen” an. Anschließend gibt man in den Passwortdialog als Benutzername sambafreigabe und als Passwort das oben gewählte ein. Bei Bedarf kann es auch gespeichert werden.

Linux (getestet unter Debian)

Man installiere sich folgendes Paket:

# apt-get install smbfs

Dann legt man sich den Mountordner an, in den die Freigabe eingehängt werden soll:

mkdir /mountordner

Bevor man den entfernten Ordner allerdings mounten kann, muss man sich noch um seine zukünftigen Besitzverhältnisse kümmern. Damit später auch mehrere Nutzer auf den Samba Share zugreifen können habe ich eine neue Gruppe angelegt, die alle zugriffsberechtigten User aufnimmt:

# groupadd sambagruppe

Anschließend fügte ich den Nutzer, mit dem ich den Samba Share erreichen möchte, der Gruppe hinzu:

# addgroup paul sambagruppe

Sollte es später nötig werden, so kann ich problemlos weiteren Nutzerkonten die Zugriffsberechtigung für den entfernten Ordner erteilen, indem ich sie ebenfalls der Gruppe hinzufüge. Dass eine Gruppe Vollzugriff auf den Share hat, wurde bereits weiter oben bei der Einrichtung auf dem Server beschrieben.

Nun kann man die Netzwerkfreigabe in den Ordner “mountordner” einhängen. Neben Username und Passwort müssen auch die UID (UserID) und GID (GroupID) angegeben werden. Damit überschreibt man den Besitzer des Mountordners und macht Paul lokal zum Owner. Würde man UID und GID weglassen, so würde der Ordner mit den entfernten Besitzerrechten des Servers gemountet werden. Je nach Konfiguration hätte der lokale Benutzer Paul dann entweder gar keinen oder lediglich Lesezugriff, da er ja nicht mit dem Owner des Ordners übereinstimmt. Diese Rechteanpassung geschieht allerdings ausschließlich lokal auf dem notebook, auf dem Server ist “sambafreigabe” nach wie vor der Inhaber jeder neu erstellten Datei, egal von welchem Rechner aus diese angelegt wurde.

# mount -t cifs -o uid=paul,gid=sambagruppe,username=sambafreigabe,password=PASSWORT //192.168.100.1/archiv /mountordner

Damit der Samba Share immer gleich beim Starten des Rechners eingehängt wird, ergänzt man noch dies in der Fstab:

nano /etc/fstab
...
# samber share on server
//192.168.100.1/archiv  /mountordner  cifs  defaults,uid=paul,gid=sambagruppe,credentials=/etc/serverarchiv.smbpass  0  0

Um das Samba Passwort nicht im Klartext in eine für Jeden einsehbare Datei wie Fstab speichern zu müssen, erstellt man sich noch die gerade bereits unter “credentials” angegebene Datei serverarchiv.smbpass und speichert die Logindaten dort:

# nano /etc/serverarchiv.smbpass
username=sambafreigabe
password=PASSWORT

Nun noch die Dateirechte anpassen, um sie ausschließlich root zugänglich zu machen:

# chmod 600 /etc/serverarchiv.smbpass
# chown root:root: serverarchiv.smbpass

Nach einem Neustart des Servers sollten alle Einstellungen übernommen worden und der Vollzugriff für Paul gewährleistet sein.

Dies kann man beispielsweise so ermitteln:

paul@pc:~$ ls -la /mountordner

Taucht in der Ausgabe als Owner bzw. Gruppenname statt einer Zahl (z.B. 1001) der Name des aktuellen Users (Paul) auf, so hat alles funktioniert.

Beispiel:

...
drwxrwsr-x  19 paul sambagruppe     0 28. Okt 23:24 musik

Quellen: