Permitir o script rsync (rrsync) restrito para diretórios arbitrários com o número_autorizado

10

Automatizando backups

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 sem supervisão 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ão legíveis apenas por um usuário privilegiado. Eu gostaria de usar o rsync para copiar os arquivos. Criei um usuário de backup dedicado e permiti que o usuário execute o rsync com o sudo sem ser solicitada uma senha com a regra de visudo:

backup-user ALL = NOPASSWD: /usr/bin/rsync

Considerações de segurança

Gostaria de melhorar a segurança restringindo os comandos que o usuário de backup pode executar, adicionando uma lista de comandos ao arquivo allowed_keys do WebServer. Eu instalei o rrsync conforme mencionado neste 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

Ao contrário do rsync normal, o rrsync espera que um subdiretório seja fornecido no arquivo de chave autorizado, conforme descrito nesta postagem do 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 

Essa restrição funciona, mas só me permite fazer backup de um diretório específico, a saber / var / backup / client1 /

Gostaria de fornecer os diretórios que 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/

Esclarecimentos adicionais

Estou ciente de que a parte command = "..." no autorizado_hosts limita os comandos executáveis ​​desse usuário exatamente aos fornecidos, mas com o rsync normal, posso fazer algo assim para fornecer o caminho que eu quero fazer 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 agradável. Criei uma pasta raiz para todas as visualizações do diretório real que eu quero fazer backup. Por esse motivo, posso restringir com segurança a autenticação 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 (removidas 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 Fstab

    /home/stefan/Scans    /mnt/Backups-Rsync-Readonly/VAR-WWW fuse.bindfs perms=0000:u=rD,force-user=rsync-backup 0   0

Teclas autorizadas

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
Stefan
fonte
E a questão é? command=A opção in authorized_keysaceita apenas um comando que é executado. É isso.
Jakuje
Tentei esclarecer a questão
Stefan

Respostas:

6

Uma possibilidade seria criar uma visualização somente leitura dos diretórios que você deseja que esse usuário dedicado possa fazer backup, com bindfs . Não use sudo; faça rrsynco ú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 backup para ser executado rsyncno /somewhere/backup-views.

Gilles 'SO- parar de ser mau'
fonte