Дозвіл rsync заборонено створювати резервну копію віддаленого каталогу на моїй локальній машині


11

Я отримую помилку, згадану в заголовку.

Я знайшов подібне питання: Запустіть rsync з дозволом root на віддаленій машині . Це не відповідає на моє запитання.

Я адміністратор на віддаленому сервері і хочу використовувати rsyncрезервне копіювання файлів у моєму вікні. Ось моя команда rsync:

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

В основному це працює. Вхід здійснюється через ключ. Я не можу і не можу використовувати пароль (EDIT: для входу через 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, щоб створити резервну копію до місцевого вікна?


Ви можете, будь ласка, показати нам щось на кшталт 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/...
    
  • Створіть спеціальний обліковий запис "резервного копіювання веб-сайтів" на сервері. Змініть дозволи файлів, щоб зробити їх читабельними в обліковому записі "резервне копіювання веб-сайтів"; ви можете використовувати 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
    

Дякую. Гарні пропозиції. Будь-яка з них, мабуть, працює для мене. Я також розглядаю можливість використання рішення на веб-сайті superuser.com/questions/270911/…, якщо я можу з’ясувати його потенційні побічні ефекти.
MountainX

До речі, я мав на увазі будь-який з останніх 2 варіантів. Вхід у систему як root через SSH заборонено на сервері.
MountainX

@MountainX: Я окремо виділив "rsync через sudo". Це може також працювати.
користувач1686

Дякую! "rsync via sudo" був би моїм кращим вибором. Я спробую вашу пропозицію. Схоже, мені потрібно реалізувати це за допомогою visudo на Ubuntu на сервері. Я багато не заплутався з візуалом, але ти мені дав достатньо, щоб розпочати мене. Знову дякую.
MountainX

5

У віддаленому хості можна запустити демон rsync

uid корінь

у /etc/rsyncd.confфайлі.

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

Якщо вам потрібно просто створити резервну копію, це найкраща практика встановити rsync на режим лише читання:

читати лише = правда


0

Якщо файли доступні лише для читання, rootвам потрібно мати rootдоступ до резервної копії файлу, читаючи його з файлової системи. rsyncчитає файли з файлової системи, а не з необробленого пристрою.

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

У більшості випадків вам потрібно довіряти своєму програмному забезпеченню резервного копіювання, щоб воно могло прочитати всі ваші дані. Це також означає, що вам потрібно довіряти своєму резервному копію всіх даних. У деяких випадках ви можете виключити деякі файли із резервної копії та використовувати альтернативний метод для резервного копіювання їх вмісту.

РЕДАКТУВАННЯ. Під час архівації даних (копіювання всіх дозволів) вам знадобиться кореневий доступ на обох серверах. Якщо ви робите це як резервне копіювання, ви можете переглянути рішення типу BackupPC, яке використовує rsync для читання файлів, але зберігає файли у власному дереві каталогів.


Існують способи надання доступу до корінця rsync. Я просто не знаю їх. Мене просять, як надати кореневому доступу rsync для створення резервної копії цих файлів. Можливо, мені потрібно переглянути відповідь на "Запустити rsync з дозволом root на віддаленій машині" і подивитися, чи зможу я це зрозуміти ...
MountainX
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.