Home.

Technik-Blog

Willkommen auf meinem
Notiz - Blog
Blog

Kmoser's Tech-Blog

Sonntag
18
Mai 2014

Samba installieren und einrichten

Samba stellt das SMB Protokoll für die Freigabe von Laufwerken und Verzeichnissen insbesondere für Windows Umgebungen zur Verfügung. Aber auch Linux kann auf diese Freigaben zugreifen. Für meine Standard-Freigaben werde ich Samba nutzen.

Installation

Einrichtet ist samba schnell. Um die Pakete zu installieren folgenden Befehl ausführen:

sudo apt-get install samba

Konfiguration

Jetzt folgt noch die Konfiguration, welche in der Datei /etc/samba/smb.conf vorgenommen wird. Für eine ausführliche Beschreibung einfach mal den folgenden Befehl ausführen:

man smb.conf

Die Konfiguration erfolgt über das Editieren einer Text-Datei. Wer lieber eine grafische Oberfläche zur Konfiguration mag, der kann  z.B. system-config-samba benutzen.

 sudo system-config-samba 

Grundsätzlich sind einige wenige Einstellungen zu tätigen, damit die Freigabe von Verzeichnissen funktioniert.

Grundeinstellungen

Wichtig ist z.B. die Arbeitsgruppe festzulegen innerhalb der der Server zu sehen sein soll. Diese muss bei allen Rechnern in der Arbeitsgruppe die Selbe sein.

workgroup = MYHOME

Verzeichnis freigeben

Um ein Verzeichnis freizugeben reicht folgender Eintrag:

[public]
   comment = Daten
   path = /media/public
   browseable = yes
   read only = no
   guest ok = no

Rechtevergabe

Für die Berechtigungen eines Samba Shares stehen folgende Optionen zur Verfügung:

create mask = 0660
force create mode = 0660
security mask = 000
force security mode = 660
directory mask = 0770
force directory mode = 0770
directory security mask = 000
force directory security mode = 0770
force group = private
force user = maxmuster

Das Zusammenspiel der einzelnen Optionen ist nicht ganz trivial. Verstanden habe ich das noch nicht so ganz. Werde den Beitrag aktualisieren, wenn ich es geschnallt habe.

Zum prüfen der Konfiguration führt man folgenden Befehl aus:

testparm

Falls testparm den folgenden Fehler meldet:

rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)

Kann man das Limit gleichzeitig geöffneter Dateien mit

ulimit -n 16384

erhöhen. Um sich das aktuelle Limit anzeigen zu lassen führt man folgenden Befehl aus:

ulimit -n

Um dieses Limit dauerhaft einzurichten muss die Datei /etc/security/limits.conf um eine weitere Zeile erweitert werden.

nano /etc/security/limits.conf

Folgende zusätzliche Zeile einfügen:

* - nofile 16384

Wie sich die Zeile zusammensetzt erfährt man mit

man limits.conf

Benutzerauthentifikation

Solange wir für die Authentifikation kein LDAP verwenden, haben wir bisher noch keinen Zugriff auf die freigegebenen Verzeichnisse. Da Samba seine Benutzer separat verwaltet, müssen wir noch die entsprechenden Benutzer anlegen. Das geht mit

sudo smbpasswd -a <username>

Oder

sudo pdbedit -a -u myusername

Das muss für jeden Benutzer gemacht werden.

Um sich alle Benutzer anzeigen zu lassen, kann man folgenden Befehl verwenden:

sudo pdbedit -L -v

Automatische Benutzersynchronisierung

Alternativ kann man auch das Paket  libpam-smbpass installieren, welches die Benutzer aus pam und samba synchronisiert.

In Ubuntu 14.04 verursacht dieses Paket aktuell leider noch einen Fehler

no talloc stackframe at ../source3/param/loadparm.c:4864, leaking memory

Für die Synchronisation muss in der Datei /etc/pam.d/samba folgende Zeile angefügt werden:

@include common-password

In der Datei /etc/samba/smb.conf muss noch folgendes stehen:

# If you are using encrypted passwords, Samba will need to know what
# password database type you are using.
passdb backend = tdbsam

obey pam restrictions = yes

# This boolean parameter controls whether Samba attempts to sync
# the Unix password with the SMB password when the encrypted SMB
# password in the passdb is changed.
unix password sync = yes

# For Unix password sync to work on a Debian GNU/Linux system,
# the following parameters must be set (thanks to Ian Kahan
# <kahan@informatik.tu-muenchen.de> for sending the correct chat
# script for the passwd program # in Debian Sarge).
passwd program = /usr/bin/passwd %u
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .

# This boolean controls whether PAM will be used for password changes
# when requested by an SMB client instead of the program listed in
# 'passwd program'. The default is 'no'.
pam password change = yes

Netzwerk-Papierkorb

Ein Feature, das mich schon oft vor Datenverlust bewahrt hat ist der Netzwerk-Papierkorb, der in Samba ab Version 3 zur Verfügung steht. Dabei werden beim Löschen von Dateien diese nicht direkt endgültig gelöscht, sondern in einen konfigurierbaren Ordner verschoben.

Um den Netzwerk-Papierkorb zu aktivieren muss man die [global] Sektion um folgende Einträge erweitern:

# Papierkorb einrichten
vfs object = recycle

# Verzeichnisrechte
recycle:directory_mode = 0770

# Pfad zum Papierkorb
recycle:repository = /media/data/Papierkorb

# Pfadangaben beibehalten
recycle:keeptree = yes

# Zeitstempel beim Verschieben setzen
recycle:touch = yes

# Gleichnamige Dateien nicht überschreiben
recycle:versions = yes

# Keine Größenbeschränkung
recycle:maxsize = 0'

# Sofort zu löschende Dateien
recycle:exclude = *.tmp,*.temp,~$*,*.$$$,Thumbs.db

# Auszuschließende Verzeichnisse
#recycle:exclude_dir = /

Löscht man jetzt eine Datei, wird diese nach /media/data/Papierkorb verschoben. Gibt man diesen noch als Share frei, hat man einen wunderbaren Mülleiner auf dem Samba Server.

Damit die Dateien im Papierkorb auch für die entsprechenden Papierkorb Benutzer verwaltbar sind legt man eine Gruppe recycler an und weist dieser die Benutzer zu die den Mülleimer pflegen dürfen.

Jetzt setzt man die Verzeichnisrechte so, dass neue Dateien und Verzeichnisse im Papierkorbverzeichnis automatisch die recycler Gruppe bekommen und somit alle Benutzer der Gruppe recycler Zugriff auf die Dateien im Papierkorb bekommen.

sudo chmod g+s /media/data/Papierkorb

Das geht natürlich nur für Umgebungen, mit wenigen Benutzer. Bei komplexen Umgebungen würde man eine Konfiguration bevorzugen die allen Benutzern gerecht wir und deren Rechte schützt. Aber für zu Hause ist das gut so.

Wenn man den Papierkorb als Share freigibt, muss man auf dem Share den Papierkorb deaktivieren. Dazu einfach folgende Option an die Konfiguration des Shares "Papierkorb" anfügen:

[Papierkorb]
...
# Papierkorb deaktivieren
vfs objects =

Damit kann ich auf dem Share "Papierkorb" Dateien und Verzeichnisse ganz normal löschen.

Alternativ kann man auch einen relativen Pfad als Papierkorb angeben. Dann hat man für jedes Share einen separaten Papierkorb:

recycle:repository = .recycler

Man könnte auch einen Papierkorb pro Benutzer einrichten:

recycle:repository = /media/data/Papierkorb/%U

Egal welche Variante  man bevorzugt, der Papierkorb lohnt sich auf jeden Fall, da eine Datei schnell mal aus Versehen gelöscht ist. Und die Datei von einem Backupmedium wiederherzustellen dauert oft länger als diese schnell aus dem Papierkorb zu fischen.

Änderungen anwenden

Um die Einstellungen anzuwenden, müssen die Dienste von samba neu gestartet werden.

sudo service smbd restart
sudo service nbmd restart