29.4Netzwerkverzeichnisse
Im vorigen Abschnitt habe ich erklärt, welche Voraussetzungen erfüllt sein müssen, damit sich ein Benutzer bei Samba anmelden kann – kurz zusammengefasst: Ein Linux-Account und ein Samba-Passwort müssen vorhanden sein. Jetzt stellt sich nur noch die Frage, welche Ressourcen ein angemeldeter Benutzer sieht und verwenden kann. Entscheidend hierfür sind die [resourcename]-Abschnitte in smb.conf.
Die Definition eines Verzeichnisses, auf das ein bestimmter Benutzer zugreifen kann, sieht so aus:
Mit dieser Einstellung können der Benutzer peter sowie alle Benutzer, die diesem Linux-Account durch smbusers zugeordnet sind, das Verzeichnis /data/verz1 lesen und verändern. Im Dateimanager hat diese Ressource den Namen verzeichnis1, also die in eckigen Klammern angegebene Zeichenkette.
Die Bedeutung der Schlüsselwörter ist leicht verständlich: valid users gibt den Benutzernamen an. Es ist zulässig, mehrere durch Komma getrennte Benutzernamen anzugeben.
path gibt an, welches Verzeichnis des Servers freigegeben wird. Wenn path nicht explizit angegeben wird, gibt Samba standardmäßig das Heimatverzeichnis des angegebenen Benutzers frei. writeable = yes erlaubt Veränderungen im Verzeichnis. Ohne diese Option hat der Benutzer nur Lesezugriff.
Grundsätzlich gelten für alle Zugriffe die Linux-Zugriffsrechte. Wenn es in /data/verz1 also eine Datei gibt, die root gehört, dann darf der Linux-Benutzer peter diese Datei normalerweise nur lesen, aber nicht verändern. Diese Einschränkung gilt ebenso für alle Benutzer des Netzwerkverzeichnisses.
SELinux kann den Zugriff auf Verzeichnisse verhindern
Wenn Sie Ihren Samba-Server unter CentOS, Fedora oder RHEL einrichten, sollten Sie auch an das schon erwähnte Sicherheitssystem SELinux denken! Sie müssen dem freizugebenden Verzeichnis das Attribut samba_share_t zuordnen, damit der Zugriff klappt:
root# semanage fcontext -a -t samba_share_t "/data/verz1(/.*)?"
root# restorecon -R /data/verz1
Wenn ein Datei-Server für viele Benutzer eingerichtet wird, ist es das Einfachste, dass jeder angemeldete Samba-Benutzer direkt sein Linux-Heimatverzeichnis sieht und bearbeiten darf. Anstatt smb.conf nun durch unzählige Einträge der Form
aufzublähen, sieht smb.conf die folgende Kurzschreibweise vor, die bei manchen Distributionen (z.B. Fedora) auch gleich standardmäßig in smb.conf enthalten ist:
Damit wird das Heimatverzeichnis des gerade aktiven Benutzers unter dessen Namen sichtbar. Die Option browseable = no bewirkt nicht, wie man vielleicht glauben könnte, dass der Benutzer sein Verzeichnis nicht sieht. Sie verhindert nur, dass das Verzeichnis doppelt sichtbar ist: einmal unter dem jeweiligen Benutzernamen (etwa peter) und einmal als homes.
Nochmals SELinux!
Die Standardkonfiguration von SELinux unter CentOS, Fedora und RHEL erlaubt die Freigabe der Heimatverzeichnisse nur, wenn der boolesche Parameter samba_enable_home_dirs gesetzt ist:
root# setsebool -P samba_enable_home_dirs on
Benutzer- und Heimatverzeichnisse ermöglichen es dem Benutzer, seine Dateien zentral auf dem Server zu speichern, bieten aber keine Möglichkeit zum Datenaustausch. Die Verzeichnisse sind für andere Benutzer unsichtbar und unerreichbar. Abhilfe schaffen Gruppenverzeichnisse, die alle Mitglieder einer Gruppe verwenden dürfen. Die Gruppenzuordnung erfolgt durch die Linux-Benutzerverwaltung. Die Gruppe wird mit dem Schlüsselwort user in der Schreibweise @gruppenname angegeben.
Beim Zugriff auf Gruppenverzeichnisse ist die richtige Einstellung der Zugriffsrechte von Dateien und Verzeichnissen besonders wichtig. Das gilt auch für Dateien und Verzeichnisse, die neu erstellt werden. force group = +sales bewirkt, dass neu erzeugte Dateien oder Verzeichnisse der Gruppe sales zugeordnet werden und nicht wie sonst üblich der Standardgruppe des Benutzers. Wenn ein Benutzer nicht Mitglied der Gruppe sales ist, darf er nicht auf das Verzeichnis zugreifen.
Vorsicht vor »force group«
Verwenden Sie im obigen Fall auf keinen Fall die Einstellung force group = sales, also ohne vorangestelltes Plus! Das hätte zur Folge, dass Samba jeden Zugriff auf das Verzeichnis so durchführt, als wäre der gerade aktive Benutzer Mitglied der Gruppe sales – und zwar selbst dann, wenn der Benutzer auf Linux-Ebene gar kein Mitglied dieser Gruppe ist! Mit anderen Worten: Mit force group = sales geben Sie Benutzern, die der Gruppe sales gar nicht angehören, Lese- und Schreibrechte für das Verzeichnis. Bei Gruppenverzeichnissen ist das selten beabsichtigt und kann ein großes Sicherheitsproblem sein!
Die Parameter create mask und directory mask stellen sicher, dass von Gruppenmitgliedern neu erstellte Dateien und Verzeichnisse von allen anderen Gruppenmitgliedern gelesen und verändert werden können. Die oktale Zahl entspricht dem chmod-Wert – siehe man chmod. Wenn neue Dateien bzw. Verzeichnisse von anderen Gruppenmitgliedern nur gelesen, aber nicht verändert werden dürfen, verwenden Sie die Werte 0440 und 0550.
Noch liberaler ist der Zugriff auf das share-Verzeichnis: Jeder Benutzer, der sich bei Samba authentifizieren kann, kann Dateien aus diesem Verzeichnis lesen. Der Schreibzugriff ist in diesem Beispiel deaktiviert:
Sie können selbstverständlich auch frei zugängliche Verzeichnisse mit Schreibzugriff einrichten (writable = yes). Standardmäßig können alle Benutzer die von anderen Benutzern erzeugten Dateien lesen, aber nicht verändern. Abhilfe schafft die Einstellung von force group und der beiden mask-Parameter. Uneingeschränkte gegenseitige Schreib- und Leserechte erzielen Sie mit create mask = 0666 und directory mask = 0777.
Alle vorangegangenen Beispiele setzten voraus, dass sich der Benutzer bei Samba authentifizieren kann. Bei entsprechender Konfiguration sieht Samba auch einen Verzeichniszugriff für nicht authentifizierte Benutzer vor. Derartige Benutzer werden im Samba-Jargon als Gäste (guest-Benutzer) bezeichnet. Für den Umgang mit Gästen sind die im folgenden Listing zusammengefassten globalen Einstellungen verantwortlich:
map to guest = bad user bewirkt, dass Login-Versuche mit einem nicht existenten Benutzernamen automatisch dem virtuellen Samba-Benutzer guest zugeordnet werden. Standardmäßig gibt es allerdings keine Netzwerkverzeichnisse oder andere Ressourcen, die guest nutzen darf.
guest account gibt an, welchem Linux-Benutzer Gäste zugeordnet werden. Bei den meisten Linux-Distributionen inklusive Debian und Ubuntu ist hierfür der Benutzer nobody vorgesehen.
Verzeichnisse, die für Gäste benutzbar sein sollen, kennzeichnen Sie durch guest ok = ok. In aller Regel werden Sie solche Verzeichnisse mit dem Attribut read only = yes vor Schreibzugriffen schützen. Denken Sie daran, dass Gäste generell nur solche Dateien lesen bzw. verändern dürfen, die auch der Linux-Benutzer nobody lesen bzw. verändern darf.
Eine Variante zu guest ok ist guest only = yes: Mit dieser Einstellung kann das Verzeichnis nur von Gästen, nicht aber von authentifizierten Benutzern verwendet werden. Wenn Sie Gästen generell keinen Zugang zu Samba-Ressourcen gewähren möchten, verwenden Sie im [global]-Abschnitt die Einstellung map to guest = never.
Samba bietet gewöhnlichen Benutzern ohne root-Rechte die Möglichkeit, selbst Verzeichnisse, sogenannte User Shares, freizugeben. Die entsprechenden Konfigurationsdateien werden üblicherweise im Verzeichnis /var/lib/samba/usershares gespeichert, wobei jedes freigegebene Verzeichnis seine eigene Datei erhält. Die folgenden Zeilen geben dafür ein Beispiel:
Details der User-Share-Konfiguration werden im globalen Abschnitt von smb.conf durch diverse usershare-Anweisungen gesteuert. usershare allow guests erlaubt die Freigabe von User Shares zur Benutzung durch den guest-Account, also ohne Passwortschutz. Das erfordert die Angabe von guest ok oder guest only bei der Definition des Verzeichnisses. usershare max shares limitiert die Anzahl der User Shares.
Wenn Dateien in Netzwerkverzeichnissen gelöscht werden, sind sie in der Regel für immer verloren. Die Papierkorb-Funktionen, die Linux, Windows oder OS X anbieten, gelten jeweils nur für lokale Dateien. Um den ungewollten Verlust von Dateien zu vermeiden, können Sie aber auch auf Samba-Ebene einen Papierkorb einrichten. In der einfachsten Konfiguration reicht dazu eine einzige Zeile in smb.conf:
Damit wird das Samba-VFS-Erweiterungsmodul recycle aktiviert, wobei VFS für Virtual File System steht. Gelöschte Dateien landen nun standardmäßig im Verzeichnis .recycle (relativ zum Share-Verzeichnis). Dieses Verzeichnis ist allerdings in den meisten Dateimanagern unsichtbar. Um den Vorgang transparenter zu machen, können Sie mit recycle:repository einen anderen Verzeichnisnamen für den Papierkorb angeben, z.B. so:
Wirklich gelöscht werden Dateien nun erst, wenn sie auch im Papierkorb gelöscht werden. Unter Umständen kann es zweckmäßig sein, auf dem Samba-Server ein Script auszuführen, das alte Dateien nach einer gewissen Zeit automatisch aus dem Papierkorb löscht. Damit das funktioniert, müssen Sie aber das Änderungsdatum beim Verschieben in den Papierkorb aktualisieren (Option recycle:touch = Yes).
Diverse weitere recycle:xxx-Optionen können Sie mit man vfs_recycle nachlesen.
Netzwerkverzeichnisse in Gnome und KDE freigeben
Wenn Desktop-Anwender rasch und unkompliziert ein Verzeichnis per Samba freigeben möchten, haben sie in der Regel keine Lust, manuell Änderungen an smb.conf durchzuführen. Deswegen sehen die Dateimanager von Gnome und KDE Dialoge vor, um Verzeichnisse freizugeben.
Hinter den Kulissen nutzen sowohl Nautilus (Gnome) als auch Dolphin (KDE) den User-Share-Mechanismus von Samba: Die Parameter für jedes freigegebene Verzeichnis werden dazu jeweils in einer eigenen Konfigurationsdatei im Verzeichnis /var/lib/samba/usershares gespeichert. Die Zugriffsrechte dieses Verzeichnisses sind so eingestellt, dass alle Benutzer, die einer bestimmten Gruppe angehören (bei Ubuntu sambashare), darin neue Dateien anlegen dürfen.
Im Folgenden setze ich voraus, dass der Samba-Server installiert ist, also zumeist das Paket samba. Falls eine Firewall aktiv ist, müssen Sie dort die Samba-Ports öffnen.
Wenn Sie SUSE oder openSUSE verwenden, müssen Sie vor der Freigabe des ersten Verzeichnisses unter KDE oder Gnome eine Samba-Basiskonfiguration durchführen. Dazu können Sie das YaST-Modul Netzwerkdienste • Samba-Server verwenden. Als Server-Typ wählen Sie Kein Domain Controller. Die anderen Varianten sind nur dann von Interesse, wenn Samba auch Login-Daten für Windows-Accounts verwalten soll. Im Dialogblatt Start wählen Sie nun die Option Beim Systemstart, um den Samba-Server in Zukunft automatisch zu starten. Damit andere Rechner im lokalen Netzwerk auf die Netzwerkverzeichnisse zugreifen können, müssen Sie außerdem die Option Firewall-Port öffnen aktivieren.
Sofern die Pakete nautilus-share* installiert sind, können Sie im Gnome-Dateimanager Verzeichnisse freigeben. Dazu klicken Sie das Verzeichnis mit der rechten Maustaste an und führen das Kontextmenükommando Freigabeoptionen aus (siehe Abbildung 29.1).
Abbildung 29.1Verzeichnisfreigabe unter Ubuntu
Fedora- und RHEL-Anwender müssen auf nautilus-share leider verzichten, vermutlich weil diese Nautilus-Erweiterung nicht zur Red-Hat-spezifischen SELinux-Konfiguration kompatibel ist. Zur bequemen Konfiguration können Sie stattdessen das Programm system-config-samba aus dem gleichnamigen Paket einsetzen.
Unter KDE können Sie in den Dateimanagern Dolphin und Konqueror im Freigabe-Blatt des Eigenschaftsdialogs ein Netzwerkverzeichnis einrichten. Dazu muss das Paket kdenetwork4-filesharing installiert sein.
Bleibt noch die Frage zu klären, wer die freigegebenen Verzeichnisse benutzen darf. Wenn Sie die Option Gastzugriff aktiviert haben, hat jeder ohne Anmeldung Zugriff auf Ihr Netzwerkverzeichnis. Wenn Sie die Option dagegen nicht aktivieren, muss sich der Benutzer mit Name und Passwort anmelden. Das funktioniert aber nur für Benutzer, für die es auf dem aktuellen Rechner einen Account gibt, und nur dann, wenn für diese Benutzer mit smbpasswd oder via libpam-smbpass ein Samba-Passwort definiert wurde. Weder KDE noch Gnome kümmert sich darum. Gegebenenfalls müssen Sie Ihr Samba-Passwort mit smbpasswd in einem Terminal-Fenster festlegen.