Eu tenho tentado sem sucesso superar isso por semanas e não consegui (pelo menos não para minha satisfação). Estou usando setfacl
para pré-autorizar um diretório para que grupos e usuários específicos continuem podendo acessá-lo de determinadas maneiras. O problema é que, embora setfacl -Rm user:me:rwX,default:user:me:rwX my-dir
deixe arquivos indevidamente executáveis, ele os prepara para serem executados na próxima vez que setfacl
for executado.
Veja como se reproduzir:
# First, make a clean testing directory with some stuff in it
mkdir -p test/{one,two}.d
touch test/{one,two}.md
touch test/{one,two}.d/{a,b}.md
# Then create a target, experimental directory (using sudo, so the
# permissions matter) and permission it
sudo mkdir targ
# Deny world
sudo setfacl -Rm other::---,default:other::--- targ
# Give yourself read and traversal by default
sudo -E setfacl -Rm user:$USER:rX,default:user:$USER:rX targ
# Now sudo-copy the test contents into the directory
sudo cp -R test/* targ/
O comportamento esperado é que os arquivos one.md
e two.md
devem ser legíveis por mim, mas não executáveis, e de fato esse é o caso. MAS, é apenas o caso porque eles estão temporariamente mascarados:
$ sudo getfacl targ/one.md
# file: targ/one.md
# owner: root
# group: root
user::rw-
user:me:r-x #effective:r--
group::r-x #effective:r--
mask::r--
other::---
Agora, se você tentar dar a si mesmo o acesso write além disso, após o fato, de repente todos os arquivos regulares se tornarão executáveis:
$ sudo -E setfacl -Rm user:$USER:rwX,default:user:$USER:rwX targ
$ sudo getfacl targ/one.md
# file: targ/one.md
# owner: root
# group: root
user::rw-
user:kael:rwx
group::r-x
mask::rwx
other::---
Extremamente frustrante. Se alguém tiver alguma indicação sobre como fazer isso funcionar da maneira esperada, adoraria ouvi-los. (Nota: Usar o sinalizador -n
para evitar recalcular a máscara simplesmente faz com que a nova permissão de gravação não entre em vigor.)
Tags permissions acl