Я настраиваю сервер резервного копирования с помощью Dirvish, который будет выполнять резервное копирование нескольких серверов Ubuntu через Интернет.
В рамках нашей политики безопасности мы не разрешаем входить в систему по ssh с правами root на наших серверах.
Как я могу использовать Dirvish для резервного копирования моих серверов, не входя в систему как root и не предоставляя пользователю dirvish NOPASSWORD в sudoers?
Идеальное решение должно включать минимальную настройку на резервных целевых машинах.
Для всех, кто ищет, вот решение, с которым я пошел.
Ключевые моменты:
Dirvish не поддерживает запуск rsync через sudo (почему, я не знаю)
В AUTHORIZED_KEYS вы можете ограничить условия авторизации ключа, включая указание одной разрешенной команды и единственного IP-адреса источника.
В sshd_config вы можете указать, что вход в систему ssh root разрешен только тогда, когда указан флаг -command и команда совпадает с командой в AUTHORIZED_KEYS
PermitRootLogin forced-commands-only
Полная процедура находится здесь: http://apt-get.dk/howto/backup/
Вы на правильном пути, запретив входить в систему с правами root через SSH. Однако ваше предварительное условие относительно sudo необоснованно.
Однако sudo позволяет очень точно контролировать то, что может и что не может быть выполнено данным пользователем. Вы можете разрешить пользователю dirvish выполнять ТОЛЬКО один двоичный файл без пароля.
Совместите это с аутентификацией на основе ключей для этого пользователя, и вы получите решение для резервного копирования.
Я добавляю второй ответ с другим решением в свете более подробной информации о проблеме. По-видимому dirvish
использует rsync на бэкэнде, и @Rich совершенно прав, указывая, что разрешение доступа sudo даже только к этой одной команде дает полный контроль над корневой файловой системой.
В свете этого я бы посоветовал поработать с группами пользователей, чтобы пользователь dirvish работал, имея доступ на чтение к файлам, для которых требуется резервное копирование, в силу того, что он находится в нужной группе пользователей. Таким образом можно избежать уязвимостей корневого уровня.
Можно ли использовать флаг sshd «PermitRootLogin без пароля»? Тогда вы могли войти только с соответствующим открытым ключом. Для большей безопасности вы можете включить второй ssh-сервер на другом порту и разрешить keyauth только там.