Ich hab ein bisschen gebraucht um mein in einem LXC Container gemountetes ZFS (Zol - ZFS on Linux) Dataset per Samba mit Schreibrechten für einen Benutzer einzurichten...
Aber was waren jetzt die Ausschlaggebenden Dinge, die wirklich funktioniert haben? Es war eine Kombination aus ZFS Dataset und Samba Einstellungen.
Ein einfaches zfs set sharesmb=on wie unter Solaris geht leider wegen der fehlenden Gesamtintegration unter Linux nicht...
Erst mal müssen auf dem Dataset ACLs aktiviert werden:
zfs set acltype=posixacl [zfs-dataset-path] zfs set aclinherit=passthrough [zfs-dataset-path] zfs set xattr=sa [zfs-dataset-path]
Die dazu passende smb.conf Datei:
[global] vfs objects = acl_xattr map acl inherit = yes store dos attributes = yes [Test] comment = Test Share path = /mnt/test valid users = user1 user2 admin users = user1 public = yes writable = yes inherit permissions = yes inherit acls = yes
Und einen Samba User, keinen Linux User, anlegen:
smbpasswd -a [BENUTZER]
Aber was bedeutet das ganze?
Mit der Option acltype=posixacl werden die Extended Attributes für das Dateset aktiviert. Ohne diese, können keine NTFS Berechtigungen im Dataset gespeichert werden.
Allerdings gibt es mit der ZoL Implementierung ein Problem: Die Berechtigungen werden standardmäßig in einem versteckten Ordner im Dataset gespeichert. So muss mit JEDEM Zugriff noch zusätzlich die Datei für die Berechtigungen gelesen werden. Für die Performance nicht gerade gut...
xattr=sa verhindert das und lässt die Berechtigungen in die inodes schreiben. Leider ist diese Einstellung nicht Standard, der Performancegewinn aber immens! Rückwirkend kann diese Einstellung nicht gesetzt werden. Existieren für eine Datei oder einen Ordner schon die Rechte als Datei, bleiben diese bestehen. Nur neue Dateien profitieren von der Einstellung.
Alle global Optionen der smb.conf werden benötigt, um NTFS ACLs in die Extended Attributes des Dateisystems schreiben zu können.
vfs objects = acl_xattr aktiviert das Samba Modul vfs_acl_xattr.
Mit diesem Modul werden die Berechtigungen in den Extended Attributes gespeichert.
map acl inherit = yes geht sicher, dass neue Dateien / Ordner die Berechtigungen des übergeordneten Objektes übernehmen, so wie es bei Windows üblich ist.
Diese Option wird mit dem VFS Modul acl_xattr automatisch aktiviert, ist hier nur nochmal aufgeführt, damit man sich bewusst wird, dass es aktiv ist.
store dos attributes = yes sorgt dafür, dass zuerst die DOS Attribute (SYSTEM, HIDDEN, ARCHIVE, READ-ONLY) aus den Extended Attributes gelesen bevor sie auf UNIX Berechtigungen gemappt werden. DOS Attribute werden ebenfalls in den Extended Attributes auf dem Dateisystem gespeichert.
Der Rest sind quasi standard Einstellungen für einen Samba Share.
Nachdem das alles gemacht ist, lassen sich NTFS Permissions bequem und wie gewohnt vom Windows Explorer aus verwalten. ZFS bietet Extended Attributes an und Samba nutzt diese um alle relevanten ACL Informationen dort ablegen zu können, mit dem selben Vererbungsverhalten das man von Windows gewohnt ist.