В настоящее время я столкнулся со следующей проблемой:
Я настроил rdiff-backup
на резервной машине под управлением Ubuntu и хотел бы иметь возможность делать резервную копию моей производственной машины под управлением CentOS; Моя установка выглядит следующим образом:
authorized_keys
: command="rdiff-backup --server --restrict-read-only /",from="{backup machine's IP}",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa [KEY HERE]
rdiff-backup --include-globbing-filelist "${INCLUDE_LIST}" --exclude '**' --remote-schema 'ssh -C %s sudo rdiff-backup --server' ${REMOTE_USER}@${REMOTE_HOST}::/ "${TARGET_DIR}"
backup ALL=(root) NOPASSWD: /usr/bin/rdiff-backup --server --restrict-read-only /
Я надеялся, что смогу максимально ограничить количество пользователей резервного копирования, но сохранив привилегию «читать все». Когда я запускаю свой сценарий резервного копирования, я получаю ListErrors
:
ListError etc/httpd/conf/.ssl/[...] [Errno 13] Permission denied: '/etc/httpd/conf/.ssl/[...]'
Я не совсем понимаю, почему пользователю резервного копирования, выполняющему все команды с sudo, не разрешено читать некоторые файлы. Был бы так счастлив, если бы кто-нибудь указал мне правильное направление.
Я узнал одну вещь: ssh <remote_host> 'sudo whoami'
дает мне следующее сообщение об ошибке: sudo: sorry, you must have a tty to run sudo
. Я не уверен, связано ли это как-то с проблемой rdiff-backup.
Заранее большое спасибо!
Только что нашел кое-что интересное на справочная страница authorized_keys:
command = "команда"
Указывает, что команда выполняется всякий раз, когда этот ключ используется для аутентификации. Команда, предоставленная пользователем (если есть), игнорируется.
Так что я в основном добавил sudo
к пользовательской команде, указанной в authorized_keys, чтобы она выглядела так: command="sudo rdiff-backup --server --restrict-read-only /",from="{backup machine's IP}",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa [KEY HERE]
Следующая проблема заключалась в том, что CentOS по умолчанию требует tty для удаленных команд sudo (см. Defaults requiretty
в вашем файле sudoers); Я не уверен, что это блестящая настройка, но я закомментировал эту часть. Это в основном не позволяет пользователю вводить ssh <hostname> 'sudo <cmd>'
вместо этого вам нужно выделить tty, используя ssh -t <hostname> 'sudo <cmd>'
. Если кто-то найдет лучшее решение, дайте мне знать.