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

Автоматизация резервных копий

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

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

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

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

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

Я хотел бы улучшить безопасность, ограничив команды, которые пользователь резервного копирования может выполнить, добавив список команд в файл authorized_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 -mu:rsync-backup:rx /mnt/Backups-Rsync-Readonly/ sudo setfacl -mu:rsync-backup:rx /mnt/Backups-Rsync-Readonly/MySQL-Backups sudo setfacl -mu: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 

  • Предложить или нажать меню для пользователей ssh
  • Расширение переменной в ssh_config
  • Имя пользователя отображается как «bash-3.0» в оболочке SSH
  • Не удается ssh из Интернета, но может с localhost
  • Сценарий удаленного резервного копирования SSH
  • Туннелирование через несколько компьютеров в Red Hat с различными пользователями и ключами
  • Как настроить глобальный интервал между попытками входа в систему SSH?
  • Классы DSA / RSA работают с Linux, но не HP-UX
  • One Solution collect form web for “Разрешить ограниченный скрипт rsync (rrsync) для произвольных каталогов с авторизованными ключами”

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

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

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

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

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

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

    Затем настройте пользователя резервного копирования для запуска rsync в /somewhere/backup-views .

    Interesting Posts

    Установка Kali 2.0 на виртуальной коробке

    Использование Rsync совместно с Find

    Как избежать пробелов и т. Д. В переданной переменной, для системного вызова cp в awk

    Как монтировать файловую систему ufs при тестировании Debian?

    Как удалить дублируемую строку без сортировки?

    Почему тильда (~) не расширяется внутри двойных кавычек?

    Kickstart с использованием только SAN-дисков

    Использование mutt и thunderbird вместе

    Является ли `bash –posix` необходимым для bash 4, когда передается опция` set` для подсетей?

    Как я могу получить / bin / login для таймаута

    Остановить все процессы пользователем: дети супервизора все еще работают

    Как проверить, поддерживает ли `wget` определенную функцию программно?

    Невозможно использовать почтовые защищенные порты

    Нужна помощь для решения проблемы обхода экрана для просроченной учетной записи пользователя

    Переменная с двоеточием, тире в if-then-else: `if `

    Linux и Unix - лучшая ОС в мире.