Разрешить ограниченный скрипт rsync (rrsync) для произвольных каталогов с авторизованным ключом

10

Автоматизация резервного копирования

Я хотел бы реализовать решение для резервного копирования с копированием данных из различных каталогов с веб-сервера (WebServer) на локальный сервер резервного копирования (BackupServer). Резервное копирование должно выполняться автоматически, и поэтому я хотел бы использовать аутентификацию на основе ключей с секретным ключом без пароля.

Привилегированный Rsync

Каталоги, которые я хочу сохранить, доступны для чтения только привилегированным пользователям. Я хотел бы использовать rsync для копирования файлов. Я создал выделенного пользователя-резервного копирования и позволил пользователю выполнять rsync с помощью sudo без запроса пароля с правилом visudo:

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

Вопросы безопасности

Я хотел бы улучшить безопасность, ограничивая команды, которые может выполнять пользователь резервного копирования, добавляя список команд в файл author_keys WebServer. Я установил Rrsync, как указано в этом посте .

command="/usr/bin/rrsync",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa AAAA134143NzaC1yc...

Rrsync ожидает подкаталог

В отличие от обычного rsync, rrsync ожидает, что подкаталог будет предоставлен в файле авторизованного ключа, как описано в этом сообщении в блоге.

command="/usr/share/rsync/rrsync  /var/backup/client1/",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa 

Это ограничение работает, но оно позволяет мне создавать резервные копии только одного конкретного каталога, а именно / var / backup / client1 /

Я хотел бы предоставить каталоги, которые я хочу сделать из BackupServer, в команде rsync. Есть ли возможность использовать rrsync точно так же, как rsync, например:

rsync -avze ssh --rsync-path='sudo rrsync' backupuser@111.222.33.44:/media/data  /backups/Server/

Дополнительное уточнение

Я знаю, что часть command = "..." в authorized_hosts действительно ограничивает исполняемые команды для этого пользователя точно предоставленными, но с обычным rsync я могу сделать что-то вроде этого, чтобы указать путь, который я хочу сохранить как параметр:

command="/usr/bin/rsync --server --sender -vlogDtpre.is . ${SSH_ORIGINAL_COMMAND//* \//\/}"

Это не работает с Rrsync.

Принятое решение

Хотя технически это не однозначный ответ на вопрос, я думаю, что решение, опубликованное Жилем, является очень хорошим подходом. Я создал корневую папку для всех представлений фактического каталога, который я хочу сделать резервную копию. По этой причине я могу безопасно ограничить аутентификацию только 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

Создание просмотров (после перезагрузки)

    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

Версия 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
Стефан
источник
А вопрос такой? command=опция в authorized_keysпринимает только одну команду, которая выполняется. Вот и все.
Jakuje
Я попытался уточнить вопрос
Стефан

Ответы:

6

Одной из возможностей может быть создание представления каталогов, доступного только для чтения, для которого этот выделенный пользователь сможет выполнять резервное копирование с помощью bindfs . Не используйте sudo вообще; сделать rrsyncединственную команду, которая разрешена для этого пользователя. Единовременная настройка:

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

Настройка после каждой загрузки:

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

Или соответствующие строки в /etc/fstab:

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

Затем установите резервный пользователю работать rsyncна /somewhere/backup-views.

Жиль "ТАК - перестань быть злым"
источник