Comme le souligne Gilles, les setfaclautorisations par défaut spécifient les autorisations maximales, remplaçant essentiellement le umask. Ainsi, les fichiers nouvellement créés le seront rwsauf 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 gccpour les exécutables et cpsi 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 setfaclpermet Xexactement 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 setfaclne 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 '{}' ';'