Como Gilles aponta, as permissões padrão setfacl
especificam as permissões máximas, basicamente substituindo o umask
. Portanto, os arquivos recém-criados serão rw
, a menos que o aplicativo que criou o arquivo solicite especialmente que seja executável.
$ 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--
Observe os perms efetivos acima. (Existem apenas alguns programas que solicitarão para definir o bit de execução nos arquivos que ele cria, por exemplo, gcc
para executáveis e cp
se o arquivo que está sendo copiado for executável.)
Ou você quis dizer que o primeiro comando setfacl estava funcionando do jeito que você queria, mas o segundo não estava? Em outras palavras, você está procurando corrigir permissões nos arquivos antigos, certificando-se de que os diretórios sejam passíveis de serem executados, sem conceder permissões de execução a outros arquivos regulares?
Minha versão de setfacl
permite X
exatamente como você deseja, por exemplo:
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 a sua versão de setfacl
não der suporte a isso, por que não usar find
?
sobrescreve as permissões, configurando-as para rw para arquivos e rwx para dirs
$ find . \( -type f -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -type d -exec setfacl -m g:mygroup:rwx '{}' ';' \)
defina as permissões de mygroup ACL com base nas permissões de grupo existentes
$ find . \( -perm -g+x -exec setfacl -m g:mygroup:rw '{}' ';' \) \
-o \( -exec setfacl -m g:mygroup:rwx '{}' ';' \)
Você provavelmente desejará verificar se a máscara do grupo fornece permissões efetivas. Se não, você terá que executar isso também:
$ find . -type d -exec chmod g+rwX '{}' ';'