rysnc arquivos e pastas em um local sem alterar as permissões

1
  • Estou usando o rsync para implantar alguns HTML estáticos que serão exibidos pelo nginx.
  • O usuário que está executando o rysnc é "jenkins"
  • O nginx está usando o grupo www-data para acessar a pasta.
  • jenkins é membro do www-data

Eu ssh no servidor Ubuntu 14.04 em questão e executo

sudo chown -R jenkins:www-data /home/jenkins/thesite

depois de outra máquina eu corro

rsync -rtzh --delete --omit-dir-times _site/ jenkins@the_server.com:/home/jenkins/thesite

Quando isso terminar, alguns (mas não todos) os arquivos agora terão seu grupo configurado para jenkins. Então nginx não pode acessá-los.

Não parecem ser apenas os arquivos que eu mudei que têm o problema de permissão, mas estou gerando os arquivos usando o Jekyll, o que pode afetar ou pode ser apenas um grande arenque vermelho.

No mundo do Windows, eu defini as permissões na pasta pai e digo para que as crianças herdem. Existe um equivalente no Linux ou estou fazendo algo bobo com rsync ?

    
por Paul D'Ambra 27.01.2015 / 22:18

1 resposta

3

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

  1. O proprietário é jenkins (suponho que você não possa mudar isso)
  2. O grupo é www-data (para que possamos garantir que o nginx possa ler os arquivos)
  3. 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
por 27.01.2015 / 23:18