Execute um script de replicação rsync em um usuário diferente de root

1

Como posso executar um script de backup / replicação rsync em um usuário que não seja root enquanto preservo as permissões? Este é um servidor de arquivos multiusuário, onde cada usuário possui uma conta * nix para permissões.

A execução com o usuário root representa um risco de segurança óbvio - especialmente quando você está usando chaves ssh sem senha para fazer isso automaticamente.

Mas a execução em um usuário diferente de root (como um usuário de backup com permissões de grupo completo para os diretórios de dados), tem problemas ao definir permissões porque somente o proprietário ou o root podem alterar as permissões.

Em um mundo perfeito, o usuário do servidor de produção só teria acesso somente leitura.

Obrigado!

    
por Craig Younkins 29.07.2009 / 03:31

4 respostas

2

Você pode usar o fakeroot -s:

   -s save-file
          Save  the  fakeroot  environment to save-file on exit. This file
          can be used to restore the environment later using -i.  However,
          this  file will leak and fakeroot will behave in odd ways unless
          you leave the files touched inside the fakeroot alone when  out‐
          side the environment. Still, this can be useful. For example, it
          can be used with rsync(1) to back up and restore whole directory
          trees  complete  with user, group and device information without
          needing to be  root.  See  /usr/share/doc/fakeroot/README.saving
          for more details.
    
por 29.07.2009 / 03:59
1

Em vez de usar uma conta diferente, você considerou apenas permitir comandos forçados com sua chave ssh? Eu escrevi sobre como configurar isso para o rsync em meu blog atrás.

O que isso significa é que a chave ssh só pode ser usada para executar o comando rsync exato que você especificou, e nada mais.

Configurar um usuário de backup não é algo que eu já vi antes, mas espero que seja muito mais trabalhoso - também, já que este é um sistema multiusuário, como você garantiria que todos os arquivos eram legíveis por este usuário?

    
por 29.07.2009 / 03:37
1

Eu configuraria um servidor rsync no sistema de produção de forma que ele permitisse acesso somente leitura aos dados de produção.

Algo como isso resolveria isso:

# cat /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes
max connections = 4
syslog facility = local5
pid file = /var/run/rsyncd.pid

[prd_data]
  path = /path/to/prd_data
  comment = Production data
  read only
# grep rsync /etc/inetd.conf
rsync   stream  tcp     nowait  root   /usr/bin/rsync rsyncd --daemon
# grep rsync /etc/services
rsync           873/tcp

Em seguida, no lado do backup, você pode configurar um ambiente de fakeroot, se necessário, e executar:

# rsync -az --delete rsync://prod_server/prd_data /path/to/fakeroot
    
por 29.07.2009 / 04:08
0

Minha solução para não abrir servidores ao acesso root quando necessário para que o rsync opere e mantenha todas as posses / privs é ambos passarem do (s) servidor (es) ao vivo e puxar para os backups, usando um área intermediária em uma máquina extra.

Feito isso, os servidores de backup e ao vivo têm privilégios de acesso SSH e root na área de preparação, mas nunca precisam se comunicar diretamente , portanto não precisam de acesso privilegiado entre si. E o servidor intermediário não precisa de nenhum acesso para fazer conexões com máquinas ao vivo ou de backup.

Isso adiciona uma pequena complicação, mas significa que você não precisa ativar logins para contas com privilégios via SSH nos dois lados. Ele também adiciona um pouco de segurança extra útil através da separação - se você se certificar de que os servidores live e backup não compartilham credenciais, então se alguém conseguir hackear (ou apenas obter / adivinhar uma senha para) uma conta privilegiada no Ao vivo ou nos servidores de backup, eles não podem usar o acesso a um para obter acesso fácil ao outro.

    
por 29.07.2009 / 11:24