Дайте користувачеві дозволи на всі файли та папки


9

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

На даний момент ми використовуємо користувача, backupsі хоча ми додали цього користувача до груп, sudoі adminrsync все ще повертає повідомлення типу:

rsync: opendir "/ location / to / folder" не вдалося: Дозвіл відхилено (13)

rsync: send_files не вдалося відкрити "/ location / to / file": Дозвіл відхилено (13)

Будь-яка ідея, як ми даємо користувачеві backupsдозвіл на доступ до всього (крім додавання користувача до всіх груп коли-небудь - віддалений сервер, який ми намагаємось зробити резервну копію, - це виділений сервер хостингу, де кожен обліковий запис має свого користувача в системі).

Дякуємо за будь-яку допомогу.


1
Чи можете ви навести приклади шляхів? Якщо це такі в /proc, /devі т. Д., Тоді слід очікувати помилок.
Філ

додати користувача backupsдо sudoі adminнічого не зміниться.
favadi

@Phil Я намагаюся створити резервну копію всього / домашнього каталогу. Файли / каталоги, які виходять з ладу, - це такі, /home/a/c/account/users/mail:usernameякі мають дозволи, як drwx------і належать їм mail:4096. Я припускаю, що через те, що користувач backupsперебуває в групі, sudoабо adminвін не має доступу, оскільки для дозволів для груп немає доступу? Я не знаю, але помилка в таких папках / файлах.
Томас Клейсон

@favadi Я вже це робив ... все ще не працює.
Томас Клейсон

Вам доведеться запустити rsyncкоманду з sudo.
Філ

Відповіді:


6

Просто додавання користувача backupsдо групи користувачів sudoавтоматично не надає обліковому запису доступ до всіх файлів у системі. Це дає користувачеві дозвіл на виконання sudoкоманди.

Оскільки ви використовуєте автентифікацію відкритих ключів (імовірно, без парольної фрази), я б підійшов до цього з урахуванням безпеки та простоти реалізації. Використання sshдозволяє обмежити користувача виконувати лише дуже конкретні команди. У цьому випадку ви можете дозволити користувачу backupsвиконувати rsyncз правами суперпользователя.

Ви вже здійснили обмін ключами і перевірена автентифікація пройшла успішно. У authorized_keysфайлі на віддаленому хості, /homeз якого ви створюєте резервну копію каталогу, ви можете додати command=директиву до ключа, який використовує користувач backups. Ця директива дозволить виконувати цю команду лише тоді , коли цей ключ використовується для автентифікації. Отже, перше поле ключа буде схожим на це:

command="/path/to/sudo /path/to/rsync -az /home /local/folder" ssh-rsa AAAAB3NzaC1yblahblahblah

Ви можете піти ще далі і додати більше параметрів до клавіші, наприклад from=myhost,no-pty,no-X11-forwarding.

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

Багато хорошої інформації в man sshd. Ви хочете спеціально прочитати розділ AUTHORIZED_KEYS FORMAT.


Гаразд, я слідую, я думаю. Якщо додати цю директиву до дозволеного файлу_keys, ви зможете запустити віддалену команду з правами суперпользователя? Як я можу змінити команду rsync -e ssh -az backups@domain.com:/home /location/of/local/folderдля того, щоб доручити їй працювати як суперпользователь на віддаленій машині? Або це зробить автоматично? Дякуємо за ваш час та допомогу. :)
Томас Клейсон

1
Директива не дозволяє автоматично запускати команду як суперпользователь. Коли цей специфічний ключ використовується для автентифікації, він обмежує користувача ТІЛЬКИ вказану команду. Дозволи дозволу на походження походять від "sudo". Технічно ви можете помістити всю команду "rsync" у файл санкціонованих_кілей і просто ініціювати ssh-з'єднання від хоста резервного копіювання. Потім весь процес розпочнеться автоматично після завершення автентифікації. Я розпочав би зв'язок із чимось на кшталт "ssh backup @ remotehost sudo rsync"
Джордж М

Це займе трохи, щоб обернути ваш мозок, але це дуже круто, коли він нарешті клацає і ти розумієш, що ти можеш зробити.
Джордж М

2

Один із варіантів - запустити сервер rsync у віддаленій системі.

В основному, створити rsync.confз uid=rootпотім використання rsync -az rsync://domain.com.

Див. Http://pastebin.com/5hQx1mRV для прикладу, який написав інший та Налаштування демона rsync для деяких основ включення сервера в Ubuntu.

Зауважте, що ви повинні врахувати безпеку цього. Кращий підхід - це, мабуть, змусити віддалену систему перейти до вашої локальної системи.


Це виглядає досить добре дякую. Чи буде це тоді rsync все з /backup/lcпапки на віддаленому сервері? Чи потрібно змінити pathшматочок, щоб він /homeпрацював?
Томас Клейсон

Дякую за редагування. Єдина проблема з цим полягає в тому, що ми не можемо гарантувати статичну IP-адресу там, де ми є, і ми хочемо це зробити за допомогою cron, щоб це просто відбувалося постійно. Якщо ми "натиснемо", це може перестати працювати, якщо наша IP-адреса зміниться. : /
Томас Клейсон

@ThomasClayson: Ось для чого динамічний DNS. :)
Warren Young

1

Можливо, ви можете використовувати ACL, якщо основна файлова система підтримує його.

Ви повинні додати групове резервне копіювання в ACL кожного файлу та каталогу. Але для автоматичного додавання для новостворених файлів і каталогів слід спочатку встановити ACL за замовчуванням для всіх існуючих каталогів. Отже, на віддаленому сервері:

sudo find /home -type d -print0 | xargs -0 setfacl -d -m group:backup:r-x

Тоді ви повинні мати дозвіл rx на всі існуючі каталоги та читати файли. Це можна зробити за допомогою двох команд (без цього -d цього разу)

sudo setfacl -R -m group:backup:r-- /home
sudo find /home -type d -print0 | xargs -0 setfacl -m group:backup:r-x

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

Примітка: для прискорення знаходження | Команда xargs Ви можете додати наступну опцію до команди xargs: -P nз n числом паралельного процесу. Ви можете встановити його на кількість процесорних процесорів у вашій машині + 1.


Паралельні xargs не прискорять роботу в цьому випадку, оскільки вузьким місцем є I / O, а не процесор.
Мікель

Linux використовує кеші в пам'яті перед внесенням змін на диск, тому з точки зору користувача це відчувається швидше. І навіть невеликий hdd ноутбука міг би впоратися з навантаженням паралельних кількох ACL. Це не так багато вводу-виводу. Спробуйте :)
Гюйгенс

Я щойно прочитав тут superuser.com/a/422954/53206, що ви могли просто використовувати: sudo setfacl -Rm d:group:backup:r-X,group:backup:r-X /home:) набагато простіше!
Гюйгенс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.