permissões de arquivo rsync no windows

32

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

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

O processo de sincronização funciona bem, mas depois de concluído, não consigo acessar algumas das pastas - permissão negada.

Estou logado como administrador de domínio; também não permitirá que eu modifique nenhuma permissão nas pastas mencionadas. O que da?

comando de execução:

rsync.exe  -v -rlt -z --delete "src_path" "dst_path"
avguchenko
fonte
qual comando você está usando atualmente para sincronizar?
John T

Respostas:

24

(de http://www.samba.org/ftp/rsync/rsync.html )

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

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

Se você quiser facilitar a digitação desse último comportamento, defina um alias popt para ele, como colocar essa 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
avguchenko
fonte
thx muito. Eu não conseguia lembrar as bandeiras certas para usar ...
Vokuhila-Oliba
2
Isso é relevante para o rsync no Linux, mas nem sempre resolve o problema ao fazer o rsync'ing em uma unidade Windows, que é o que a postagem original está perguntando.
Simon East
18

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

Descobri que os arquivos / pastas recém-criados não herdam corretamente as permissões padrão, mas cada arquivo / pasta termina com muitas <not inherited>entradas na guia Segurança avançada de arquivos / pastas do Windows. (E esse problema não é apenas relacionado ao rsync).

Eu encontrei este post relacionado e este link, ambos muito úteis em como resolver esses problemas usando a noaclopção no cygwin's/etc/fstab arquivo . A desvantagem desta 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 no Google, provavelmente você encontrará referências para definir a variável de ambiente CYGWIN = NONTSEC, mas isso é para o cygwin v1.5 e não funciona no cygwin v1.7 em diante.)

microfonar
fonte
A edição do arquivo / etc / fstab o corrigiu para mim. Eu tive que usar o rsync no cygwin em vez de outra implantação, como o DeltaCopy, para fazer isso.
Matt Connolly
Se você está apenas usando o pacote cwrsync (e não o cygwin), onde coloca o arquivo fstab?
Simon East
Eu não uso cygwin. Pego uma unidade NTFS comum, montada no OS X, e arquivos rsync. Em seguida, esses arquivos no Windows alteraram completamente as permissões. Procurando uma solução.
Steven Lu
Parece que eu tenho usado o método "arriscado" de montar o NTFS no macOS usando o driver interno, que deveria ser muito menos estável do que os drivers paragon / tuxera e FUSE. Portanto, lembre-se disso se você estiver no mesmo barco
Steven Lu
8

No Windows com DeltaCopy, eu poderia fazê-lo funcionar com:

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

Funcionou mesmo com --recursive

Wernight
fonte
No entanto, isso funcionou principalmente, tive que alterar a opção --chmod para incluir a = rwx, para que os arquivos em lotes etc. fossem executados corretamente.
Taylor Gerring
11
Esta é a única opção que funcionou para mim. Tentei o --no-perms sugerido acima e o fstab sem sucesso. Este me deu apenas algumas permissões <não herdadas>, que eram o tipo de permissão que eu queria e não incluía permissão Negar para o usuário em execução. Obrigado!
AronVanAmmers 17/10/12
DeltaCopy também contém um executável chmod que pode fixar as permissões depois, por exemplo, chmod -R 777 / cygdrive / g
jnnnnn
11
--perms é o que estava faltando para mim, resolver a cópia como um problema somente de leitura.
Tyler S. Loeper
1

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

-A, --acls preserva ACLs (implica --perms)

Minha versão do Cygwin é:

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

Espero que isto ajude!

Vipul
fonte
11
Bem-vindo ao Super Usuário! Embora isso possa, teoricamente, responder à pergunta, para melhorar, seria preferível incluir detalhes de como isso responde à pergunta (citar uma fonte para fazer backup de sua reivindicação é uma vantagem).
G-Man Diz 'Reinstate Monica'
1

A resposta mais votada só funciona se você estiver usando o rsync over ssh no Windows. Se você estiver usando o daemon cygwin rsync, apenas usar noacl no / etc / fstab não ajuda, por qualquer motivo, 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 sincronizando novamente em uma unidade de nível superior e use path = / cygdrive / o que quer que seja em /etc/rsyncd.conf. Em vez disso, você precisa criar um ponto de montagem separado no / etc / fstab e usá-lo no seu rsyncd.conf:

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

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

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 reiniciar o serviço rsync por si só não parecia ajudar, ele continuava lançando erros chroot e chdir (mesmo que / d_drive tenha sido montado e use chroot = false e eu possa escrever nele). Então, quando você sincronizar novamente no sistema Windows, use:

cd /local/path/to/copy
rsync -rltD --no-p --no-g --no-o  ./ rsync://someUser@localhost:remotePort/d_drive/
sabujp
fonte
1

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

takeown /f <NameOfFolder> /r /d Y

Obviamente, se você usou os rsyncsinalizadores corretos em primeiro lugar, isso é desnecessário, mas se você não deseja executar novamente os rsyncarquivos que você já copiou, eu recomendaria isso.

CodingLumis
fonte
11
Bem-vindo ao Super Usuário! Por favor, leia a pergunta novamente com atenção. Sua resposta não responde à pergunta original.
DavidPostill
Dado que a pergunta é "o que dá?" Eu diria que a resposta não é nem uma solução, mas uma explicação, para que a maioria das respostas aqui não responda à pergunta. Essa ainda é uma adição útil e contextualmente apropriada ao problema, mas posso movê-lo para um comentário, se mais apropriado.
precisa saber é o seguinte
Ah, espere, não posso adicionar comentários porque não tenho uma reputação de mais de 50 anos, portanto, isso terá que ficar aqui.
precisa saber é o seguinte
correct rsync flags> e quais seriam esses?
oldmud0
@ oldmud0 veja as respostas que precederam as minhas para combinações apropriadas de sinalizadores que definem as permissões durante a cópia. Minha solução é ideal para quem já copiou os arquivos e não queria excluí-los e copiá-los novamente para garantir que as permissões estejam corretas.
CodingLumis
0

Eu tive esse problema com rsnapshot, que usa o rsync para backup. I overrided que a remoção --relativede rsync_long_args. Depois que a pasta cpara o próprio disco com permissões estranhas não cria.

user3132194
fonte