Um programa pode acessar um arquivo se qualquer um dos itens a seguir for verdadeiro para esse arquivo, bem como quaisquer diretórios que precisem ser atravessados:
- o usuário que o programa está executando como tem acesso;
- qualquer um dos grupos que o programa está executando como tem acesso;
- todo mundo tem acesso.
(Isso não é verdade em todos os casos, mas é uma boa aproximação aqui).
Observe quais usuários são membros de quais grupos não aparecem. Essas informações são usadas apenas quando um usuário efetua login: faz com que os programas nessa sessão de login sejam executados como esses grupos. Assim, adicionar um usuário a um grupo não pode resolver seu problema.
Você precisa conceder ao usuário rslsync
acesso ao diretório resilio
, bem como toda a cadeia de diretórios que leva até lá. Para acessar /home/liam/sync/resilio
, o programa precisa da permissão de passagem de diretório ( x
attribute, que significa "executar" para arquivos regulares) em /
, /home
, /home/liam
, /home/liam/sync
e /home/liam/sync/resilio
, como bem como a permissão de leitura em /home/liam/sync/resilio
.
Você pode fazer isso com uma lista de controle de acesso :
setfacl -m u:rslsync:x /home/liam /home/liam/sync
setfacl -R -m u:rslsync:rx /home/liam/sync/resilio
setfacl -R -d -m u:rslsync:rx /home/liam/sync/resilio
A primeira linha garante que o rslsync possa atravessar os diretórios principais.
A segunda linha fornece acesso rslsync a toda a árvore de diretórios com raiz em /home/liam/sync/resilio
. A terceira linha com o -d
flag define a ACL padrão para arquivos recém-criados - sem isso, o rslsync não seria capaz de ler qualquer arquivo recém-criado.
Alguns aplicativos podem criar arquivos com uma ACL mais restritiva que a ACL padrão. Isso pode acontecer especialmente quando os arquivos são copiados de outro local. Nesse caso, o rslsync não conseguirá ler esses arquivos. Há uma abordagem diferente que garante que o rslsync sempre possa ler os arquivos, que é criar uma visualização alternativa da árvore em /home/liam/sync/resilio
com permissões diferentes. Você pode fazer isso com bindfs . Note que você tem que fazer a montagem como root para permitir que outro usuário acesse um sistema de arquivos bindfs. Você pode usar a seguinte linha em /etc/fstab
:
bindfs#/home/liam/sync/resilio /var/lib/rslsync/resilio fuse ro,force-user=rslsync,perms=u+rD:go=