Existem pelo menos algumas maneiras de resolver esse problema. Mas primeiro, deixe-me tentar explicar como o mundo de permissões Linux / Unix corresponde ao mundo do Windows.
o windows possui permissões herdáveis; Os sistemas Linux tradicionalmente não (mas podem com ACLs, que eu ignorarei por enquanto). As permissões do Linux são divididas em três: proprietário, grupo e todos os outros ("outros"). Cada um pode ler, escrever e executar (arquivos) / pesquisa (pastas). O proprietário de um arquivo é seu criador. O grupo pode ser definido pelo proprietário para qualquer grupo do qual o proprietário seja um membro.
Com o rsync, o que você precisa tentar alcançar é o seguinte
- O proprietário é jenkins (suponho que você não possa mudar isso)
- O grupo é www-data (para que possamos garantir que o nginx possa ler os arquivos)
- As permissões no destino dos arquivos são usuário: ler + escrever, grupo: ler, outro: ler e para pastas usuário: ler + escrever + pesquisar ("executar"), grupo: ler + pesquisar, outro: ler + procurar. Podemos remover outras permissões se você preferir
Vamos supor que os arquivos existentes correspondam aos critérios, porque você pode corrigir os que estão assim:
chown -R jenkins:www-data /home/jenkins/thesite
chmod -R u+rw,g=u,g+s,o=u /home/jenkins/thesite
Agora, para o comando rsync, precisamos ignorar as permissões de arquivo do Windows e aplicar nossos próprios critérios:
rsync -rptzh --delete --omit-dir-times --chmod=u+rw,go=rX,Dg+s _site/ jenkins@the_server.com:/home/jenkins/thesite
Os chmod
sinalizadores para o rsync são os seguintes:
-
u=rw
- owner ("user") é ter (pelo menos) permissões de leitura e gravação -
go-rX
- group e todos os outros ("outros") devem ter permissão de gravação removida -
Dg+s
- adicione o bit group-setgid às pastas ("Diretórios") para que o nome do grupo seja herdado da raiz da árvore