Permitir o script rsync (rrsync) restrito para diretórios arbitrários com authorized_keys

8

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
    
por Stefan 13.04.2016 / 16:25

1 resposta

5

Uma possibilidade seria criar uma visualização somente leitura dos diretórios que você deseja que o usuário dedicado possa fazer backup, com bindfs . Não use sudo a todos; Torne o rrsync o único comando permitido para esse usuário. Configuração única:

mkdir /somewhere/backup-views /somewhere/backup-views/dir1 /somewhere/backup-views/dir2
chmod 700 /somewhere/backup-views
setfacl -m u:rx:backup-user /somewhere/backup-views

Configuração após cada inicialização:

bindfs -o perms=a+r-w /actual/dir1 /somewhere/backup-views/dir1
bindfs -o perms=a+r-w /actual/dir2 /somewhere/backup-views/dir2

Ou linhas correspondentes em /etc/fstab :

/actual/dir1 /somewhere/backup-views/dir1 bindfs perms=a+r-w
/actual/dir2 /somewhere/backup-views/dir2 bindfs perms=a+r-w

Em seguida, configure o usuário de backup para executar rsync on /somewhere/backup-views .

    
por 14.04.2016 / 01:02