Автоматизация резервного копирования
Я хотел бы реализовать решение для резервного копирования с копированием данных из различных каталогов с веб-сервера (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
принимает только одну команду, которая выполняется. Вот и все.