Problema nº 1: o Rsync está descartando ACLs
Depois de aplicar as permissões de ACL, você precisa ter o cuidado de, quando executar o rsync
, usar a opção -A
ou --acls
. Isso instrui rsync
a ter certeza de preservá-los ao fazer a sincronização.
excerto da página de manual do rsync
-A, --acls preserve ACLs (implies -p)
Problema nº 2: sem permissões de ACL
Ao analisar seu exemplo, ele contém permissões da seguinte forma.
perms tradicionais
# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x
ACLs
default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Mas essas ACLs são para a criação de novos objetos e não funcionam exatamente da maneira que você pensa. Você precisa ainda criar uma entrada para o usuário www-data
além dos perms padrão da ACL.
Exemplo
$ pwd
/tmp/somedir
$ mkdir data
$ setfacl -R -d -m u:gopher:7 data
$ getfacl data
# file: data
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:gopher:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Uma experiência
Agora vamos tentar escrever um arquivo no diretório data
como usuário gopher
.
$ sudo -u gopher touch /tmp/somedir/data/afile
touch: cannot touch '/tmp/somedir/data/afile': Permission denied
Parece familiar?
Adicionando permissões adicionais de ACL
É porque você precisa adicionar uma ACL para o usuário www-data
, as regras padrão não são para acesso, elas são para criar novos arquivos / diretórios.
$ setfacl -R -m u:gopher:7 data
Agora, verifique novamente o diretório data
:
$ getfacl data
# file: data
# owner: root
# group: root
user::rwx
user:gopher:rwx
group::r-x
mask::rwx
other::r-x
default:user::rwx
default:user:gopher:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
A única diferença é que agora temos uma ACL dizendo que o usuário gopher
tem rwx
access:
user:gopher:rwx
Repita a experiência
Tente gravar os dados no diretório novamente:
$ sudo -u gopher touch /tmp/somedir/data/afile
$
Funcionou !!! Verifique novamente o arquivo resultante:
$ ls -l /tmp/somedir/data/afile
-rw-rw-r--+ 1 gopher gopher 0 Oct 7 21:36 /tmp/somedir/data/afile