Должен ли я включить учетную запись root для rsync?

10

Как я могу включить учетную запись root? Я знаю, что это обычно не рекомендуется, но я бы хотел настроить неинтерактивный скрипт для резервного копирования моего сервера с помощью rsync. Я мог бы использовать, --rsync-path="sudo rsync"но тогда мне нужно было бы хранить свой пароль sudo в открытом виде, что кажется намного хуже, чем включение учетной записи root.

Оливье Лалонд
источник

Ответы:

10
  1. Создание новых отдельных mybackupучетных записей пользователей на клиенте и сервере.
  2. Заблокируйте пароли sudo passwd -l mybackupдля этих учетных записей, чтобы предотвратить прямой вход
  3. Разрешить через sudoэти новые учетные записи , чтобы получить очень специфичное /usr/bin/rsync/ --some-long-command /from/here /to/thereкоманду как корень с NOPASSWD:в /etc/sudoersиспользованииsudo visudo
  4. Создайте новые пароли SSH без пароля для локального удаленного хоста, используя sudo -u mybackup ssh-keygen
  5. Добавьте к sudo -u crontab -eодному или другому концу для запуска удаленного rsyncиспользования sshи ключи в качестве транспорта

Таким образом, единственная команда, которая может быть запущена от имени пользователя root, - это та, которую вы явно разрешили, и единственный удаленный пользователь, который может активировать ее, - это владелец другой половины установленной пары ключей ssh, которая также заблокирована паролем. может быть только кто-то с правами доступа sudo или crontab, который вы настроили.

Сладен
источник
Это именно то, что я не думал о разрешении очень специфической команды в sudoers (я разрешил 'rsync'). Отличное предложение!
Оливье Лалонд
2
+1 за замечание "очень специфическая ... команда". В противном случае предоставление пользователю права на запуск sudo rsyncи разрешение пользователю выбирать параметры, передаваемые rsync, означает, что пользователь может использовать rsync для чтения / записи /etc/sudoersфайла, например, и предоставить себе полный доступ sudo.
Сюзанна Дюперон
7
  1. Вы можете отредактировать, /etc/sudoersчтобы любой пользователь, выполняющий команду (или все пользователи), запускал ее rootбез пароля (возможно, это немного опасно при использовании rsync).

  2. Разве вы не можете просто запустить всю команду / скрипт / что угодно как root? Я предполагаю, что это будет работать через cron, поэтому просто добавьте rootработу через:

    sudo crontab -e
    

    Примечание: вы можете сделать довольно сложные вещи, заключив команду cron в bash -e "..."фигурную скобку или просто сделать это в отдельном скрипте. Предполагая, что это не setuid'd, если rootон проходит (через cron), он будет работать rootтак, чтобы решить вашу проблему с разрешениями.

Оли
источник
Проблема заключается в том, что если я установлю скрипт на своем локальном компьютере и запусту его как root, у него будут проблемы с разрешениями на сервере. Если я настрою сценарий на моем сервере и запусту его с правами root, то на локальном компьютере будут проблемы с разрешениями. Другими словами, мне нужно иметь привилегии root как на локальном, так и на серверном компьютере.
Оливье Лалонд
Вы можете написать скрипт на каждом конце и позволить его запускать sudoобычным пользователям. Это было бы безопаснее, чем просто позволить rsync.
Оли
Судо это отличная идея. Вы можете точно указать, какой пользователь может выполнить какую команду. Сделай это.
Фрэнк
6

Вы можете (но не должны) дать пользователю root пароль с помощью

sudo passwd root

Редактировать: бит Setuid не работает для скриптов. В противном случае вы можете использовать бит setuid в программе резервного копирования.

sudo chown root backup
sudo chmod u+s backup

Может быть, вы даже хотите запустить резервное копирование как задание cron?

Фрэнк
источник
1
Вам не нужно указывать «корень» , поскольку пробегов SUDO как Рута ENV его пользователь является корнем. ( sudo whoamiвозвращает, root), так что просто sudo passwdнеобходимо.
Марко Чеппи
setuid не работает для скриптов
enzotib
Правильно, сценарии выполняются оболочкой, названной в строке she-bang. Извините за дезинформацию.
Фрэнк