Предоставьте пользователю разрешения на все файлы и папки

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. Файлы / каталоги, которые терпят неудачу, являются такими, /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.

Джордж М
источник
Хорошо, я следую, я думаю. Добавление этой директивы в файл authorized_keys позволит вам запустить удаленную команду с правами суперпользователя, верно? Как бы я изменил команду rsync -e ssh -az backups@domain.com:/home /location/of/local/folder, чтобы она работала с правами суперпользователя на удаленной машине? Или это будет сделано автоматически? Спасибо за ваше время и помощь. :)
Томас Клэйсон
1
Директива не позволяет автоматически запускать команду от имени суперпользователя. Когда этот конкретный ключ используется для аутентификации, он ограничивает пользователя ТОЛЬКО указанной командой. Права суперпользователя происходят от "sudo". Технически, вы можете поместить всю команду «rsync» в файл author_keys и просто инициировать соединение ssh с резервного хоста. Весь процесс запускается автоматически после завершения аутентификации. Я бы начал соединение с чем-то вроде «ssh backups @ remotehost sudo rsync»
Джордж М
Требуется немного времени, чтобы обернуть ваш мозг, но довольно круто, когда он, наконец, щелкает, и вы понимаете, что вы можете сделать.
Джордж М
2

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

В основном, создайте rsync.confс uid=rootпоследующим использованием rsync -az rsync://domain.com.

См. Http://pastebin.com/5hQx1mRV для примера, написанного кем-то другим, и Настройка демона rsync для ознакомления с некоторыми основами включения сервера в Ubuntu.

Обратите внимание, что вы должны рассмотреть безопасность этого. Лучше всего сделать удаленную систему доступной к вашей локальной системе.

Mikel
источник
Это выглядит довольно хорошо, спасибо. Будет ли это тогда rsync все из /backup/lcпапки на удаленном сервере? Я изменяю pathбит, чтобы быть, /homeчтобы заставить это работать?
Томас Клэйсон
Спасибо за редактирование чувак. Единственная проблема в том, что мы не можем гарантировать статический IP-адрес там, где мы находимся, и мы хотим сделать это через cron, чтобы это происходило постоянно. Если мы «нажмем», он может перестать работать, если наш IP-адрес изменится. : /
Томас Клэйсон
@ThomasClayson: для этого и нужен динамический DNS. :)
Уоррен Янг
1

Возможно, вы могли бы использовать ACL, если базовая файловая система поддерживает его.

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

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

Тогда у вас должно быть разрешение rx для всех существующих каталогов и чтение файлов. Вы можете сделать это с помощью 2 команд (без -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 nn номер параллельного процесса. Вы можете установить количество процессоров на вашем компьютере + 1.

Гюйгенс
источник
Параллельные xargs в этом случае не ускорят процесс, поскольку узким местом является ввод-вывод, а не процессор.
Микель
Linux использует кеши в памяти перед фиксацией изменений на диске, поэтому с точки зрения пользователя он работает быстрее. И даже небольшой жесткий диск ноутбука может справиться с нагрузкой установки нескольких ACL в параллелях. Это не так много ввода / вывода. Попробуйте :)
Huygens
Я только что прочитал здесь superuser.com/a/422954/53206, который вы можете просто использовать: sudo setfacl -Rm d:group:backup:r-X,group:backup:r-X /home:) гораздо проще!
Гюйгенс