11

Я получаю ошибку, указанную в названии.

Я нашел этот похожий вопрос: Запустите rsync с правами root на удаленной машине. Это не отвечает на мой вопрос.

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

$ rsync -avz me@myserver.com:/var/www/ /backups/Sites/MySite/

Это в основном работает. Вход через пару ключей. Я не использую и не могу использовать пароль (РЕДАКТИРОВАТЬ: для входа через SSH). Несколько файлов не будут передаваться из-за разрешений. Я не хочу менять эти разрешения.

Вот ошибка:

receiving file list ... done
rsync: send_files failed to open "/var/www/webapp/securestuff/install.php": Permission denied (13)

Я не хочу менять разрешения для этого файла. Это (и другие как это) не должно быть читаемым (кроме корня).

Это должно выполняться в задании cron, и я предпочитаю простое однострочное решение, использующее только команду rsync. Следующим выбором будет сценарий оболочки, который я могу вызвать из задания cron. Ни в коем случае я не могу вручную войти в удаленную машину и стать пользователем root (потому что я буду спать, когда это запустится.

Как я могу использовать rsync для резервного копирования в локальную папку?

3 ответа3

8

Вы не можете создать резервную копию файла , который вы не можете прочитать иначе, так что разрешения должны быть либо изменены или перекрываться корня.

Ваши варианты более подробно:

  • Переопределите разрешения, напрямую rsync'ing от имени root@myserver.com . (

  • ... или сконфигурировав sudo на сервере, чтобы разрешить беспарольный запуск компонента rsync стороне сервера.

    me    ALL=(root) NOPASSWD: /usr/bin/rsync --server --sender -vlogDtprze.iLsf . /var/www/
    

    а также

    rsync --rsh="ssh me@myserver.com sudo" -avz /var/www/ /backups/...
    
  • Создайте на сервере выделенную учетную запись «резервная копия сайта». Измените права доступа к файлам, чтобы сделать их читаемыми для учетной записи «website-backup»; для этого вы можете использовать ACL и setfacl . Не используйте эту учетную запись для чего-либо еще.

    rsync -avz website-backup@myserver.com:/var/www/ /backups/sites/mysite/
    
  • Напишите на сервере скрипт, который будет помещать / var / www / в зашифрованный архив. Опять же, это можно сделать как root (через crontab) или сконфигурировав sudo, чтобы не требовать пароль для этого скрипта. Например:

    #!/bin/sh
    tar c /var/www/ | gpg -e -r mountainx@example.com
    

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

    ssh me@myserver.com "sudo /usr/sbin/dump-website" > /backups/sites/mysite.tar.gpg
    

    Требование пароля будет удалено путем редактирования sudoers:

    me     ALL=(root) NOPASSWD: /usr/sbin/dump-website
    
5

На удаленном хосте вы можете запустить демон rsync с помощью

корень uid

в файле /etc/rsyncd.conf .

Это позволит демону использовать возможность CAP_DAC_OVERRIDE и читать локальную файловую систему без изменения прав доступа / владельца.

Если вам нужно просто сделать резервную копию, рекомендуется установить rsync в режим только для чтения:

только чтение = правда

0

Если файлы доступны для чтения только пользователю root вас должен быть доступ с root для резервного копирования файла путем чтения его из файловой системы. rsync читает файлы из файловой системы, а не с необработанного устройства.

За исключением dump , dd и подобных резервных копий, которые копируют раздел, а не файлы, программы резервного копирования считывают файлы из файловой системы. Утилиты резервного копирования не смогут читать и создавать резервные копии файлов, для которых разрешения идентификатора пользователя, используемого для их запуска, препятствуют доступу. Это тот случай, когда вы сталкиваетесь.

В большинстве случаев вам необходимо доверять программному обеспечению для резервного копирования, чтобы оно могло считывать все ваши данные. Это также означает, что вам необходимо доверять своему носителю резервного копирования все свои данные. В некоторых случаях вы можете исключить некоторые файлы из резервной копии и использовать альтернативный метод для резервного копирования их содержимого.

РЕДАКТИРОВАТЬ: Поскольку вы архивируете данные (копируете все разрешения), вам понадобится root-доступ на обоих серверах. Если вы делаете это в качестве резервной копии, вы можете посмотреть на решение, такое как BackupPC, которое использует rsync для чтения файлов, но сохраняет файлы в своем собственном дереве каталогов.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .