permissões de arquivo rsync no windows

31

Eu tenho um serviço de rsync que sincroniza arquivos da máquina remota para uma máquina que os coloca em uma unidade de rede.

Eu preciso dos arquivos copiados para aceitar as permissões nativas da pasta de destino.

O processo de sincronização é executado corretamente, mas depois de concluído, não consigo acessar algumas das pastas - Permissão negada.

Estou logado como administrador de domínio; Ele também não me permite modificar nenhuma permissão nas pastas mencionadas. O que dá?

comando de execução:

rsync.exe  -v -rlt -z --delete "src_path" "dst_path"
    
por avguchenko 12.11.2009 / 18:01

6 respostas

24

(de link )

Em resumo: para fornecer aos arquivos de destino (antigos e novos) as permissões de origem, use --perms .

Para conceder aos novos arquivos as permissões de destino padrão (mantendo os arquivos existentes inalterados), certifique-se de que a opção --perms esteja desativada e use --chmod=ugo=rwX (que garante que todos os bits não mascarados sejam ativados).

Se você gostaria de tornar este último comportamento mais fácil de digitar, você poderia definir um alias popt para ele, como colocar esta linha no arquivo ~ / .popt (o seguinte define a opção -Z e inclui - -no-g para usar o grupo padrão do diretório de destino):

    rsync alias -Z --no-p --no-g --chmod=ugo=rwX
    
por 12.11.2009 / 22:32
18

A segurança "posix" do Cygwin causou-me muitos problemas com as permissões de arquivo do Windows NTFS - mesmo usando --no-perms com o rsync.

Descobri que os arquivos / pastas recém-criados não herdam adequadamente as permissões padrão, mas todos os arquivos / pastas acabam com muitas <not inherited> entradas na guia de segurança Advnanced / de arquivos / pastas do Windows. (E esse problema não é apenas relacionado ao rsync).

Eu encontrei esta postagem relacionada e este link ambos muito úteis em como resolver esses problemas usando o noacl opção no arquivo /etc/fstab do cygwin. A desvantagem dessa solução é que o cygwin perde a capacidade de definir permissões de arquivo / pasta, mas em muitos casos isso não é importante.

(pesquisando neste tópico você provavelmente encontrará referências para configurar a variável de ambiente CYGWIN = NONTSEC, mas isso é para o cygwin v1.5 e não funciona no cygwin v1.7 em diante.)

    
por 08.12.2011 / 00:31
8

No Windows com o DeltaCopy , consegui fazê-lo funcionar com:

rsync --perms --chmod=a=rw,Da+x ...

Funcionou mesmo com --recursive

    
por 18.09.2012 / 15:18
1

rsync, pelo menos no Cygwin tem a seguinte opção:

-A, --acls preservam ACLs (implica em --perms)

Minha versão do Cygwin é:

CYGWIN_NT-6.3 1.7.29 (0.272 / 5/3) 2014-04-07 13:46 x86_64 Cygwin

Espero que isso ajude!

    
por 26.04.2015 / 00:41
1

A resposta mais bem classificada só funciona se você estiver usando o rsync sobre o ssh no Windows. Se você estiver usando o daemon rsync cygwin apenas usando noacl em / etc / fstab não ajuda, por qualquer motivo ele não honra a herança, mesmo se você se livrar do usuário e tentar noacl, substituir, etc. Isso parece acontecer Se você estiver rsyncing em uma unidade de nível superior e usar path = / cygdrive / whatever em /etc/rsyncd.conf. Em vez disso, você precisa criar um ponto de montagem separado em / etc / fstab e usá-lo em seu rsyncd.conf:

D:\     /d_drive  ntfs    binary,posix=0,noacl,user,override      0 0

em /etc/rsyncd.conf, você teria algo assim:

use chroot = yes

[d_drive]
path = /d_drive
comment = d_drive
auth users = someUser
secrets file = /etc/rsyncd.secrets
read only = false
write only = false
list = false
uid = someUser

Então eu tive que reiniciar o sistema Windows, apenas reiniciando o serviço rsync sozinho não parecia ajudar, ele continuou lançando erros chroot e chdir (embora / d_drive foi montado e use chroot = false e eu poderia escrever para ele ). Então quando você rsync no sistema windows use:

cd /local/path/to/copy
rsync -rltD --no-p --no-g --no-o  ./ rsync://someUser@localhost:remotePort/d_drive/
    
por 20.07.2015 / 21:42
1

No passado, acabei de atribuir novamente as permissões do Windows ao meu usuário atual usando takeown em um prompt de comando elevado como:

takeown /f <NameOfFolder> /r /d Y

É claro que, se você usou as sinalizações rsync corretas em primeiro lugar, isso é desnecessário, mas se você não quisesse reexecutar rsync para arquivos que você já copiou, então eu recomendaria isso.

    
por 21.12.2016 / 11:09