我目前面临以下问题:
我在运行 Ubuntu 的备份机器上进行了设置rdiff-backup
,并希望能够备份运行 CentOS 的生产机器;我的设置如下:
- 两台机器上的备份用户
- 有效的 ssh 密钥(我能够从备份机器连接到我的远程生产机器)
- 在生产服务器上,备份用户只能通过以下方式执行 rdiff-backup 命令
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}"
- 远程生产服务器上的备份用户获得了相应的 sudoers 条目:
backup ALL=(root) NOPASSWD: /usr/bin/rdiff-backup --server --restrict-read-only /
我希望可以尽可能地限制备份用户,但保留“读取所有内容的 root 权限”。当我运行备份脚本时,我得到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 问题有关。
提前谢谢您!
答案1
命令=“命令”
指定每当使用此密钥进行身份验证时执行该命令。用户提供的命令(如果有)将被忽略。
因此我基本上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>'
。如果有人找到更好的解决方案,请告诉我。