Zugriffsrechte auf geteilte Dateien und Ordner mit AFP und NAS4Free

FreeNAS 7 wird seit einiger Zeit nicht mehr unter diesem Namen weiterentwickelt. Das Projekt NAS4Free hat sich dem Sourcecode angenommen. Ich hatte zwar zwischenzeitlich einen Sprung auf FreeNAS 8 gewagt. Jedoch war ich von der Administrationsoberfläche und der Stabilität (zumindest auf meiner Hardware) nicht überzeugt.

Daher erfolgte am letzten Wochenende der Sprung zurück auf das ehemals FreeNAS 7 getaufte Projekt. Das Erkennen meines ZFS Pools machte keinerlei Schwierigkeiten. Mittels des Befehls zpool import 1 können spezifische Pools importiert werden. Vorteilhaft ist zuvor das Exportieren des Pools mit zpool export. Das hatte ich vergessen. Hat aber trotzdem funktioniert.

Das eigentliche Problem war im Anschluss das Bereitstellen und Teilen meiner ZFS Datasets über AFP zwischen verschiedenen Benutzern. Legt ein Benutzer A einen Ordner oder eine Datei an, der für das Teilen vorgesehen ist, kann ein zweiter Benutzer B nicht schreibend auf den Ordner zugreifen. Die voreingestellten Zugriffsrechte, die AFP nutzt, sehen dies nicht vor.

Die Dokumentation von netatalk beschreibt, wie man mit Hilfe der Parameter perm, dperm und fperm die Standardzugriffsrechte für neue Dateien und Ordner anpassen kann. Das geschieht in der Datei AppleVolumes.default, die unter NAS4Free unter /var/etc liegt. Leider bietet NAS4Free in der GUI keinerlei Einsellungsmöglichkeiten für die Zugriffsrechte. Ein manuelles Ändern der Zugriffsrechte in der Datei AppleVolumes.default ist möglich. Jedoch werden die Änderungen nach einem Neustart des AFP-Dienstes überschrieben.

Einen Workaround habe ich beim Probieren gefunden. In den Einstellungen eines AFP-Shares können am Ende des Eingabefeldes „Read/Write Access“ die benötigten Parameter angehangen werden. Diese werden in die AFP-Konfiguration übernommen. Wenn also Benutzer A, der einen Ordner oder eine Datei erstellt, und Benutzer B Zugriff auf den Ordner oder die Datei haben sollen, kann dies beispielsweise mit

Read/Write Access: userA,userB perm:0770

erreicht werden. Eine nicht besonders elegante Lösung. Sie funktioniert jedoch.