Eine Samba-Freigabe unter Unix einrichten...das kann schnell gehen, man kann damit aber auch einen Arbeitstag verbraten.
In meinem Fall war die Samba-Freigabe an sich recht schnell eingerichtet, das Ergebnis der von anderen Computern rüberkopierten Daten allerdings weitab von dem, was ich mir gewünscht hatte: Alle Dateien, die ich von einem Mac-Rechner über das Netzwerk auf den Unix-Server kopiert hatten, hatten auf dem Unix-Server – egal, was man machte – die Berechtigung 644.

Im Folgenden ein paar Erkenntnisse, die ich über Samba gesammelt hatte. Wer sich auch schon mit

create mode
,
create mask
,
force create mode
 & Co abgemüht hat, sich ganz sicher ist, dass er weiß, was er hier tat und trotzdem auf dem Unix-Server Dateien mit "falscher" Berechtigung hat, möge gleich zur Erkenntnis Nummer 4 "unix extensions" scrollen.

Szenario

Ich habe einen Ordner /tmp/freigabe auf einem Unix-Server, den ich im Netzwerk für PCs und Macs freigeben möchte.
Der Benutzer auf dem Unix-Server, der auch die meisten Dienste ausführt, lautet xdaemon.

Erkenntnis 1: Gruppenzugehörigkeit des freigegebenen Ordners

Wenn ich den "sticky bit" setze, werden alle auf die Freigabe kopierten Dateien derselben Gruppe angehören, wie der freigegebene Ordner selbst:

chown xdaemon:users /tmp/freigabe
chmod g+s /tmp/freigabe

ls /tmp
drwxrws---  9 xdaemon users  4096 Jun 10 13:40 freigabe

Das s in

drwxrws---
ist hierbei dieses "sticky bit". Alle hier per SMB erstellten Dateien werden der Gruppe users angehören.

Erkenntnis 2: Gastzugang

Um einen Gastzugang zu gewähren, also dass auch Benutzer ohne Eingabe von Benutzernamen und Passwort die Freigabe mounten können, müssen folgende Einstellungen in der
/etc/samba/smb.conf
getätigt werden (im Folgenden nur die hinzuzufügenden Zeilen unter
[global]
und
[freigabe]
).

/etc/samba/smb.conf
[global]
  guest account = xdaemon

[freigabe]
  public = yes
  guest ok = yes
  force user = xdaemon

Wobei

force user
den Benutzer-Account angibt, welchem die via Gastzugang kopierten Daten später gehören.

Erkenntnis 3: Dateiberechtigungen

Komplizierter, als man dachte. Folgende Einstellungen können je Share definiert werden, wobei einige in neueren Samba-Versionen nicht mehr vorkommen, einige für die höchstmögliche und einige für die mindeste Berechtigung stehen.
Keine Einstellung steht für "auf diese Freigabe kopierte Dateien werden folgende Dateirechte bekommen".

Ein

create mode = 0660
 bedeutet also nicht zwingend, dass auf die Freigabe kopierte Dateien nachher die Dateiberechtigung
rw-rw----
erhalten.
Keine der Anweisungen erzwingt für sich bestimmte Rechte. Auch nicht die mit einem "force" im Namen.
Und auf Anweisungen mit einem "security" im Namen verzichtet man besser komplett, da diese spätestens ab Samba 4 nicht mehr beachtet werden.

DATEIEN
create mask                    ! Maximal mögliches Recht
create mode                      Alias zu 'create mask'
force create mode              ! Minimal mögliches Recht
security mask                    Ab Samba 4 entfernt
force security mode              Ab Samba 4 entfernt

VERZEICHNISSE
directory mask                 ! Maximal mögliches Recht
directory mode                   Alias zu 'directory mask'
force directory mode           ! Minimal mögliches Recht
directory security mask          Ab Samba 4 entfernt
force directory security mode    Ab Samba 4 entfernt

Wichtig sind also eigentlich nur die vier mit ! markierten Anweisungen.

Um mit ihnen zu definieren, dass auf die Freigabe kopierte Dateien und Verzeichnisse immer die Berechtigung 660

rw-rw----
haben, wären folgende vier Zeilen in der Konfiguration notwendig:

/etc/samba/smb.conf
[freigabe]
  create mode = 0660
  force create mode = 0660
  directory mask = 0660
  force directory mode = 0660

Erkenntnis 4: unix extensions

So sehr ich mich auch mit den Dateiberechtigungen rumgeschlagen hatte – man findet im Internet ja die verschiedensten Tipps, welche Kombinationen man verwenden soll – hatte ich immer das Problem, dass Dateien, die ich von einem Windows-PC rüber kopierte genau die Berechtigungen hatten, die ich auch haben wollte (für Windows ungewöhnlich) und Dateien, die ich von einem Mac aus kopierte nicht (deren unsichtbarer Resource-Teil war allerdings schon etwas näher dran).

Laut smb.conf sollten alle Dateien die Berechtigung 660

rw-rw----
haben.
So sah es allerdings auf der Freigabe tatsächlich aus:

-rw-rw-r--  1 xdaemon users        4096 Jun 10 15:08 ._macfile.txt
-rw-r--r--  1 xdaemon users       43230 Jun 10 15:03 macfile.txt
-rw-rw----  1 xdaemon users       43230 Jun 10 15:03 winfile.txt

Abhilfe brachte hier nur die globale smb.conf-Einstellung

unix extensions = no

Durch das de-aktivieren mit
no
werden dann zwar keine symbolischen links und hard links mehr unterstützt, aber immerhin haben nun auch vom Mac aus kopierte Dateien genau die Dateiberechtigung, die man mit Hilfe von
create mode
und
force create mode
in der Konfiguration angegeben hatte.

/etc/samba/smb.conf
[global]
  unix extensions = no

Erkenntnis 5: Dateimüll

Je Freigabe kann man Dateien an Hand ihres Dateinamens ablehnen, um Dateimüll, wie die .DS_Store-Dateien des Macs oder die Thumbs.db-Dateien von Windows auf der Freigabe zu vermeiden.
Ich hatte auch versucht, sämtliche Mac-Resource-Dateien (Dateien, die mit einem ._ beginnen) abzulehnen, was dann allerdings am Mac bei Kopiervorgängen immer zu einer Fehlermeldung führt, dass nicht alle Daten kopiert werden konnten.

Alle abzulehnenden Dateinahmen sollten Zwischen einem / stehen, Der * Wildcard ist auch möglich.

/etc/samba/smb.conf
[freigabe]
  veto files = /.DS_Store/._.DS_Store/.AppleDouble/.bin/.AppleDesktop/Network Trash Folder/Thumbs.db/
  delete veto files = yes