Comme le souligne Gilles, les setfacl
autorisations par défaut spécifient les autorisations maximales, remplaçant essentiellement le umask
. Ainsi, les fichiers nouvellement créés le seront rw
sauf si l'application qui a créé le fichier a demandé spécialement qu'il soit exécutable.
$ mkdir test
$ touch test/oldfile
$ getfacl test/oldfile
# file: test/oldfile
# owner: myuser
# group: myuser
user::rw-
group::r--
other::r--
$ setfacl -m d:g:mygroup:rwx test
$ touch test/newfile
$ getfacl test/newfile
# file: test/newfile
# owner: myuser
# group: myuser
user::rw-
group::r-x #effective:r--
group:mygroup:rwx #effective:rw-
mask::rw-
other::r--
Notez les perms effectifs ci-dessus. (Il n'y a que quelques programmes qui demanderont de définir le bit d'exécution sur les fichiers qu'il crée, par exemple gcc
pour les exécutables et cp
si le fichier copié était exécutable.)
Ou vouliez-vous dire que la première commande setfacl fonctionnait comme vous le vouliez, mais pas la seconde? En d'autres termes, vous cherchez à corriger les autorisations sur les anciens fichiers, en vous assurant que les répertoires sont traversables, sans donner à d'autres fichiers réguliers des autorisations d'exécution?
Ma version de setfacl
permet X
exactement ce que vous voulez, par exemple:
setfacl g:mygroup:rwX
$ setfacl --version
setfacl 2.2.49
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ find test -ls
107513 4 drwxr-xr-x 3 myuser myuser 4096 Dec 22 01:56 test
107539 0 -rw-r--r-- 1 myuser myuser 0 Dec 22 01:56 test/oldfile
107529 4 drwxr-xr-x 2 myuser myuser 4096 Dec 22 01:56 test/olddir
$ setfacl -Rm g:somegroup:rwx test
$ find test -ls
107513 4 drwxrwxr-x 3 myuser myuser 4096 Dec 22 01:56 test
107539 0 -rw-rwxr-- 1 myuser myuser 0 Dec 22 01:56 test/oldfile
107529 4 drwxrwxr-x 2 myuser myuser 4096 Dec 22 01:56 test/olddir
$ rm -r test
$ mkdir test
$ mkdir test/olddir
$ touch test/oldfile
$ setfacl -Rm g:somegroup:rwX test
$ find test -ls
107513 4 drwxrwxr-x 3 myuser myuser 4096 Dec 22 01:56 test
107539 0 -rw-rw-r-- 1 myuser myuser 0 Dec 22 01:56 test/oldfile
107529 4 drwxrwxr-x 2 myuser myuser 4096 Dec 22 01:56 test/olddir
Si votre version de setfacl
ne prend pas en charge cela, pourquoi ne pas l'utiliser find
?
remplacer les autorisations, en les définissant sur rw pour les fichiers et rwx pour les répertoires
$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)
définir les autorisations ACL mygroup en fonction des autorisations de groupe existantes
$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)
Vous voudrez probablement vérifier que le masque de groupe fournit des autorisations effectives. Sinon, vous devrez également exécuter ceci:
$ find . -type d -exec chmod g+rwX '{}' ';'