В разрешении rsync запрещено резервное копирование удаленного каталога на мою локальную машину

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 для резервного копирования в локальную папку?

MountainX
источник
не могли бы вы показать нам что-то вроде ssh me@myserver.com "cat /var/www/webapp/securestuff/install.php"> localfile?
Флоренц Клей
@Florenz Kley: я не понимаю ваш комментарий
MountainX
покажи мне, что ты можешь прочитать файл, и я покажу тебе команду rsync, которая работает :-). Вариант № 2 от Grawity, вероятно, ваш лучший выбор.
Флоренц Клей
@Florenz Kley: ssh me@myserver.com "echo mypassword | sudo -S cat /var/www/webapp/securestuff/install.php"> localfile
MountainX
Я получил rsync: send_files failed to open "/cygdrive/...": Permission denied (13). Таким образом, мой исходный компьютер был Windows Cygwin. Немного другая ситуация, но для потомков моим решением было щелкнуть правой кнопкой мыши cmd.exe и запустить от имени администратора .
Боб Стейн

Ответы:

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
    
user1686
источник
Спасибо. Хорошие предложения. Любой из них, вероятно, будет работать для меня. Я также рассматриваю возможность использования решения по адресу superuser.com/questions/270911/…, если я смогу выяснить его возможные побочные эффекты.
MountainX
Кстати, я имел в виду любой из последних 2 вариантов. Вход в систему как root через SSH не разрешен на сервере.
MountainX
@MountainX: я выделил "rsync через sudo" как отдельный выбор. Это может также сработать.
user1686
Спасибо! "rsync через sudo" будет моим предпочтительным выбором. Я попробую ваше предложение. Похоже, мне нужно реализовать это с помощью visudo на Ubuntu на сервере. Я не сильно испортил visudo, но ты дал мне достаточно, чтобы начать. Еще раз спасибо.
MountainX
5

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

корень uid

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

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

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

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

altmas5
источник
0

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

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

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

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

BillThor
источник
Существуют способы предоставления корневого доступа к rsync. Я просто не знаю их. Я спрашиваю, как предоставить root-доступ rsync для резервного копирования этих файлов. Возможно, мне нужно вернуться к ответу «Запустить rsync с правами root на удаленном компьютере» и посмотреть, смогу ли я это выяснить ...
MountainX