Automatizando backups
Eu gostaria de implementar uma solução de backup com dados de cópias de vários diretórios de um servidor Web (WebServer) para um servidor de backup local (BackupServer). O backup deve ser executado de forma autônoma e, portanto, eu gostaria de usar uma autenticação baseada em chave com uma chave privada sem senha.
Rsync privilegiado
Os diretórios que eu quero fazer backup só podem ser lidos por um usuário privilegiado. Eu gostaria de usar o rsync para copiar os arquivos. Eu criei um usuário de backup dedicado e permiti que o usuário executasse o rsync com o sudo sem que fosse solicitada uma senha com a regra do visudo:
backup-user ALL = NOPASSWD: /usr/bin/rsync
Considerações de segurança
Eu gostaria de melhorar a segurança restringindo os comandos que o usuário de backup pode executar, adicionando uma lista de comandos ao arquivo authorized_keys do WebServer. Eu instalei o rrsync como mencionado em este post .
command="/usr/bin/rrsync",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAA134143NzaC1yc...
O Rrsync espera um subdiretório
Em contraste com o rsync normal, o rrsync espera que um subdiretório seja fornecido no arquivo de chaves autorizado, conforme descrito neste postagem no blog
command="/usr/share/rsync/rrsync /var/backup/client1/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa
Esta restrição funciona, mas só me permite fazer backup de um diretório específico, ou seja, o / var / backup / client1 /
Eu gostaria de fornecer os diretórios que eu quero fazer backup do BackupServer no comando rsync. Existe a possibilidade de usar o rrsync exatamente como o rsync, por exemplo:
rsync -avze ssh --rsync-path='sudo rrsync' [email protected]:/media/data /backups/Server/
Esclarecimento adicional
Estou ciente de que a parte command="..." em authorized_hosts limita os comandos executáveis para este usuário exatamente àqueles fornecidos, mas com o rsync normal, eu posso fazer algo assim para fornecer o caminho que eu quero para backup como um parâmetro:
command="/usr/bin/rsync --server --sender -vlogDtpre.is . ${SSH_ORIGINAL_COMMAND//* \//\/}"
Isso não funciona com o rrsync.
Solução aceita
Embora tecnicamente não seja a resposta definitiva para a pergunta, acho que a solução postada por Gilles é uma abordagem muito boa. Eu criei uma pasta raiz para todas as vistas do diretório real que eu quero fazer backup. Por esse motivo, posso restringir a autenticação com segurança apenas ao rrsync.
One time todo
sudo mkdir /mnt/Backups-Rsync-Readonly
sudo chown -R rsync-backup /mnt/Backups-Rsync-Readonly
sudo mkdir /mnt/Backups-Rsync-Readonly/VAR-WWW
sudo mkdir /mnt/Backups-Rsync-Readonly/MySQL-Backups
sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/
sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/MySQL-Backups
sudo setfacl -m u:rsync-backup:rx /mnt/Backups-Rsync-Readonly/VAR-WWW
Criar visualizações (desaparecidas após a reinicialização)
sudo bindfs -o perms=0000:u=rD,force-user=rsync-backup /var/www /mnt/Backups-Rsync-Readonly/VAR-WWW
sudo bindfs -o perms=0000:u=rD,force-user=rsync-backup /MySQL-Dumps /mnt/Backups-Rsync-Readonly/MySQL-Backups
Versão do Fstab
/home/stefan/Scans /mnt/Backups-Rsync-Readonly/VAR-WWW fuse.bindfs perms=0000:u=rD,force-user=rsync-backup 0 0
Authorized_keys
command="/usr/bin/rrsync -ro /mnt/Backups-Rsync-Readonly",from="192.168.0.10",no-pty,no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-rsa AAAAB