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:






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.
Schreibe einen Kommentar