ZFS unter Solaris/OpenIndiana kann mehr als einfache SMB-Freigaben — man kann Windows-Berechtigungen (NTFS-ACLs) direkt auf dem ZFS-Dataset setzen. Dateien und Ordner lassen sich dann vom Windows-Client aus genauso berechtigen wie auf einem Windows-Server. Das funktioniert über NFSv4-ACLs, die ZFS nativ unterstützt.

Voraussetzung: Der Kernel-SMB-Server muss laufen und in eine Workgroup eingebucht sein. Die Einrichtung ist im Beitrag ZFS SMB-Freigaben mit sharesmb beschrieben — hier geht es nur um die ACLs.

Dataset mit Windows-Kompatibilität anlegen

Windows unterscheidet nicht zwischen Groß- und Kleinschreibung. Damit das auf ZFS korrekt funktioniert, setzt man casesensitivity=mixed. Für gleichzeitige NFS-Nutzung empfiehlt sich zusätzlich nbmand=on (Non-Blocking Mandatory Locking):

zfs create -o casesensitivity=mixed -o nbmand=on fileserver/daten

Freigabe mit benutzerdefiniertem Namen und Beschreibung erstellen:

zfs set "sharesmb=name=DatenShare,description=Der Testdaten Share" fileserver/daten

ACL-Vererbung konfigurieren

Damit Berechtigungen korrekt an neue Dateien und Unterordner vererbt werden, braucht man zwei ZFS-Properties:

# ACL-Vererbung: Berechtigungen werden 1:1 an Kind-Objekte weitergegeben
zfs set aclinherit=passthrough fileserver/daten

# ACL-Modus: chmod ändert nur die POSIX-Bits, nicht die ACLs
zfs set aclmode=passthrough fileserver/daten

Benutzer und Besitz setzen:

useradd -g cifsshare -s /bin/false -c TestUser -m test
passwd test
chown -R test:cifsshare /fileserver/daten

NFSv4-ACLs setzen

Jetzt kommt der entscheidende Schritt — die initialen ACLs für Owner, Group und Everyone setzen. Wichtig: Man muss das Solaris-/usr/bin/chmod verwenden, nicht das GNU-chmod:

/usr/bin/chmod A=\
owner@:rwxpdDaARWcCos:fd-----:allow,\
group@:rwxpdDaARWcCos:fd-----:allow,\
everyone@:rwxpdDaARWcCos:fd-----:allow \
/fileserver/daten

Die Buchstaben nach dem @ sind die NFSv4-ACL-Rechte — rwx (read/write/execute), p (append), d (delete child), D (delete), a (read attributes), A (write attributes), R (read named attrs), W (write named attrs), c (read ACL), C (write ACL), o (write owner), s (synchronize). Die Flags fd bedeuten: Vererbung auf Files und Directories.

Hier werden erstmal alle Rechte für alle vergeben — als Basis zum Testen. In der Praxis schränkt man die Rechte natürlich ein und setzt sie dann granular vom Windows-Client aus.

Berechtigungen vom Windows-Client setzen

Nach der Verbindung mit \\hostname\DatenShare lassen sich die Berechtigungen im Windows-Explorer über Rechtsklick → Eigenschaften → Sicherheit setzen — genau wie auf einem NTFS-Volume:

Windows Explorer: Netzlaufwerk verbinden mit dem ZFS-SMB-Share.
Windows Explorer: Dateien und Ordner auf dem ZFS-Share.
Windows Sicherheitsdialog: Berechtigungen auf dem ZFS-Share anzeigen.
Windows Sicherheitsdialog: Erweiterte Berechtigungen bearbeiten.
Windows: Detaillierte Berechtigungseinträge mit Vererbung.
Windows: Besitzer des ZFS-Shares ändern.

ACLs auf der Kommandozeile prüfen

Die vom Windows-Client gesetzten Berechtigungen sind auch auf Systemebene sichtbar — mit dem Solaris-ls -V:

ls -V /fileserver/daten
-rwxrwxrwx+  1 test  cifsshare  345088 Nov 20  2010 cmd.exe
                 owner@:rwxpdDaARWcCos:------I:allow
                 group@:rwxpdDaARWcCos:------I:allow
              everyone@:rwxpdDaARWcCos:------I:allow
drwxrwxrwx+  2 test  cifsshare      12 Mär 22 17:39 de-DE
                 owner@:rwxpdDaARWcCos:fd----I:allow
                 group@:rwxpdDaARWcCos:fd----I:allow
              everyone@:rwxpdDaARWcCos:fd----I:allow

Das I in den Flags zeigt an, dass die ACL vererbt wurde — genau das, was aclinherit=passthrough bewirkt. Dateien bekommen die ACL ohne fd (keine weitere Vererbung), Ordner mit fd (Vererbung an Kinder).

Mehr zu ZFS: ZFS SMB-Freigaben mit sharesmb, ZFS NFS-Freigaben und ZFS Compression. Details zu den ACL-Flags in der Oracle Solaris ZFS Administration Guide. Fragen? Einfach melden.