arquivos rsynced não recebendo a ACL apropriada

3

Eu uso rsync ( rsync-3.0.6-5.el6_0.1.x86_64 no Scientific Linux 6) para transferir arquivos de um disco VFAT para um sistema de arquivos ext3 montado em NFS. Eu tenho ACLs configurado no sistema ext3 e tudo funciona como esperado, ou seja, criando novos arquivos ou dirs (através da montagem NFS, via linha de comando ou Nautilus). Mas quando rsync-ing ou cp-ing, as ACLs não são criadas para os arquivos copiados na partição ext3.

O plano de fundo é o VFAT é de uma câmera, montado intermitentemente e não cria acls para diretórios ou arquivos. Existe uma maneira de rsync (ou mesmo copiar) que permite, por exemplo, as regras ACL padrão aplicarem ACLs a arquivos e diretórios rsync-ed ou cp-ed?

    
por Eric.chowanski 05.12.2012 / 00:51

3 respostas

5

Depois de uma pequena ajuda de meus amigos e muito ranger de dentes, eu percebi isso. Claro, a resposta estava nas man pages.

O problema decorre do fato de que (da página man acl): "modificação dos bits de permissão do arquivo resulta na modificação das entradas ACL associadas" e vice-versa. Porque sem o sinalizador adequado, o rsync usa as permissões de origem, o que altera as ACLs no destino.

A solução no rsync é usar a opção --chmod. Na página man do rsync (na seção --perms):

To give new files the destination-default permissions (while leaving existing files unchanged), make sure that the --perms option is off and use --chmod=ugo=rwX (which ensures that all non-masked bits get enabled).

No entanto, os direitos que se deseja usar dependem dos direitos de destino pretendidos. Como exemplo, no meu caso, os perms de origem eram 700, sem ACL. O subdiretório de destino tinha uma ACL padrão da seguinte maneira: d:u:user1:rwx,d:u:user2:rwx,u:user1:rwx,u:user2:rwx,d:m:rwx,m:rwx . Ou seja, tem dois usuários nomeados, uma máscara explícita, além de padrões idênticos. Isso equivale a 770.

Ao usar rsync (ou cp-ing), a permissão de origem de 700 substitui a máscara de ACL padrão, configurando-a como --- em vez de rwx .

Como esse caso de uso precisa de "usuário" e "grupo", mas não de "outras" permissões de origem, usei o seguinte sinalizador em rsync: --chmod=ug=rwx . As letras após o primeiro sinal de igual indicam que os seguintes perms se aplicam ao u (ser) e g (grupo). As letras após o segundo sinal de igual indicam as permissões que esses usuários recebem. Isso faz com que o rsync defina as perms no alvo para 770.

O comando atual é: rsync -av --chmod=ug=rwX /<source> /<destination>

Algumas coisas a serem observadas. Primeiro, o comportamento de permissão do rsync depende da versão no final do recebimento. Verifique as man pages para a resposta definitiva. Segundo, a ordem das bandeiras é importante: -a, -A e assim por diante podem, de fato, ser usadas, mas DEVE vir antes do sinalizador --chmod.

Por fim, não vejo nenhum sinalizador similar disponível para o cp fazer o rsync o único jogo da cidade para sincronizar arquivos E aplicar ACLs padrão no destino a arquivos com diferentes permissões de origem.

    
por 05.12.2012 / 10:00
1

Como exatamente você está chamando o rsync? Já que sua fonte não suporta ACLs, você certamente deve NÃO estar passando quaisquer opções que configurem para instruir o rsync a copiar as permissões.

Portanto, não use -a , -o , -g ou -A .

    
por 05.12.2012 / 01:30
0

Você está definindo o sinalizador -A em seu comando rsync?

    
por 05.12.2012 / 01:21