Come sottolinea Gilles, le setfacl
autorizzazioni predefinite specificano le autorizzazioni massime, sostanzialmente sostituendo il umask
. Quindi i file appena creati saranno a rw
meno che l'applicazione che ha creato il file non abbia richiesto espressamente l'esecuzione.
$ 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--
Nota i permessi effettivi sopra. (Esistono solo alcuni programmi che chiederanno di impostare il bit di esecuzione sui file che crea, ad esempio gcc
per gli eseguibili e cp
se il file da copiare era eseguibile.)
O intendevi dire che il primo comando setfacl funzionava come volevi, ma il secondo no? In altre parole, stai cercando di sistemare le autorizzazioni sui vecchi file, assicurandoti che le directory siano percorribili, senza dare ad altri file regolari autorizzazioni di esecuzione?
La mia versione di setfacl
consente X
esattamente come vuoi, ad esempio:
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
Se la tua versione di setfacl
non lo supporta, perché non utilizzarla find
?
sovrascrivere le autorizzazioni, impostandole su rw per i file e rwx per le directory
$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)
imposta le autorizzazioni ACL mygroup in base alle autorizzazioni di gruppo esistenti
$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)
Probabilmente vorrai verificare che la maschera di gruppo fornisca autorizzazioni efficaci. In caso contrario, dovrai eseguire anche questo:
$ find . -type d -exec chmod g+rwX '{}' ';'