Eu tenho uma instalação do Dokuwiki localmente, que sincronizo regularmente com meu servidor com rsync. Também darei a um amigo uma conta ssh e hospedarei sua instalação pública no Dokuwiki. No entanto, estou tendo problemas com permissões de acesso - mesmo que o espelho seja somente leitura, o Dokuwiki ainda precisa de permissões de gravação no diretório de dados para cache, etc. O servidor Apache é executado como usuário www-data, e sempre que eu faço isso um rsync, ele redefine as permissões.
Com base em algumas outras respostas neste site, tentei usar setfacl para definir permissões padrão, mas parece não funcionar - getfacl indica que as permissões existem, mas o Dokuwiki não será executado e quando tento escrever um arquivo como usuário www-data, também não funciona. o que estou perdendo?
wiki/data$ sudo su www-data
$ pwd
/var/www/wiki/data
$ whoami
www-data
$ touch hi
touch: cannot touch `hi': Permission denied
$ getfacl /var/www/wiki/data
getfacl: Removing leading '/' from absolute path names
# file: var/www/wiki/data
# owner: stian
# group: admin
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:www-data:rwx
default:group::r-x
default:mask::rwx
default:other::r-x
Aqui está o comando que usei para definir as permissões:
setfacl -R -d -m u:www-data:7 /var/www/*
Responder1
Problema nº 1: Rsync está descartando ACLs
Depois de aplicar as permissões ACL, você precisa tomar cuidado para que, ao executar o procedimento, rsync
esteja usando a opção -A
ou --acls
. Isso instrui você rsync
a preservá-los ao fazer a sincronização.
trecho da página de manual do rsync
-A, --acls preserve ACLs (implies -p)
Problema nº 2: sem permissões ACL
Observando seu exemplo, ele contém as permissões a seguir.
permanentes 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 servem para a criação de novos objetos e não funcionam exatamente como você pensa. Você ainda precisa criar uma entrada para o usuário www-data
além das permissões 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
Um experimento
Agora vamos tentar gravar um arquivo no data
diretório como user gopher
.
$ sudo -u gopher touch /tmp/somedir/data/afile
touch: cannot touch `/tmp/somedir/data/afile': Permission denied
Parece familiar?
Adicionando permissões ACL adicionais
É porque você precisa adicionar uma ACL para o usuário www-data
, as regras padrão não são para acesso, são para criação de novos arquivos/diretórios.
$ setfacl -R -m u:gopher:7 data
Agora verifique o data
diretório novamente:
$ 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
acesso:
user:gopher:rwx
Repita o experimento
Tente gravar 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