J'ai configuré le partage de fichiers SMB/CIFS sur un serveur OmniOS avec le module noyau Solaris qui utilise les ACL NFSv4 qui devraient fonctionner correctement avec les clients Windows.
Je veux créer un répertoire partagé avec les objectifs suivants : un utilisateur (disons alice
) doit pouvoir créer et modifier des fichiers, mais pas les supprimer. La création de sous-répertoires doit également être empêchée. L'accès en lecture doit être autorisé.
J'ai essayé l'ACL suivante, qui fonctionne en gros :
/usr/bin/chmod A=\
user:root:rwxpdDaARWcCos:fd-----:allow,\ # root has full access
user:alice:rwx---a-R-c--s:-------:allow,\ # dir: create files, read everything
user:alice:rwxp--aARWc--s:f-i----:allow \ # files: wpAW is needed for full file write access, everything is only inherited to files
/pool/share
Mais si alice
voit le Sécurité des fichiers nouvellement ajoutés dans l'Explorateur Windows, elle peut s'octroyer des droits d'accès complets et supprimer le fichier par la suite, même si elle ne dispose pas d'un droit d'accès. Co
droits.
Comment expliquer ce comportement ? Et comment puis-je le changer pour que les ACL ne puissent pas être modifiées ?
Edit : Sortie de ls
semble être normal :
# /usr/bin/ls -v
total 1
-rwx------+ 1 alice staff 3 2016-03-21 test.txt
0:user:root:read_data/write_data/append_data/read_xattr/write_xattr
/execute/delete_child/read_attributes/write_attributes/delete
/read_acl/write_acl/write_owner/synchronize:inherited:allow
1:user:alice:read_data/write_data/append_data/read_xattr
/write_xattr/execute/read_attributes/write_attributes/read_acl
/synchronize:inherited:allow
# /usr/bin/ls -V
total 1
-rwx------+ 1 alice staff 3 2016-03-21 test.txt
user:root:rwxpdDaARWcCos:------I:allow
user:alice:rwxp--aARWc--s:------I:allow
Sortie de ls
pour le répertoire lui-même :
# /usr/bin/ls -Vd
drwx------+ 3 root root 4 2016-03-21 .
user:root:rwxpdDaARWcCos:fd-----:allow
user:alice:rwx---a-R-c--s:-------:allow
user:alice:rwxp--aARWc--s:f-i----:allow
# /usr/bin/ls -vd
drwx------+ 3 root root 4 2016-03-21 .
0:user:root:list_directory/read_data/add_file/write_data
/add_subdirectory/append_data/read_xattr/write_xattr/execute
/delete_child/read_attributes/write_attributes/delete/read_acl
/write_acl/write_owner/synchronize:file_inherit/dir_inherit:allow
1:user:alice:list_directory/read_data/add_file/write_data
/read_xattr/execute/read_attributes/read_acl/synchronize:allow
2:user:alice:list_directory/read_data/add_file/write_data
/add_subdirectory/append_data/read_xattr/write_xattr/execute
/read_attributes/write_attributes/read_acl/synchronize
:file_inherit/inherit_only:allow
Le système de fichiers du partage est ZFS. Les propriétés par défaut les plus intéressantes sont les suivantes :
NAME PROPERTY VALUE SOURCE
pool/share type filesystem -
pool/share compression lz4 inherited from pool
pool/share atime off local
pool/share aclmode restricted local
pool/share aclinherit passthrough local
pool/share version 5 -
pool/share utf8only on -
pool/share normalization formD -
pool/share casesensitivity insensitive -
pool/share nbmand on local
pool/share sharesmb name=testshare local
Les autorisations de partage CIFS sont définies de manière à permettre à tout le monde un accès complet, donc seule l'autorisation de fichier devrait s'appliquer.
Mise à jour :
Ce fil est très similaire à mon problème, bien que la solution consistant à réduire les ACL en /pool/share/.zfs/shares/testshare
a modify_set
pour tout le monde (ou refuser aux utilisateurs des droits de suppression spécifiques) ne semble pas fonctionner dans mon cas et je ne sais pas pourquoi.