我希望备份主机能够从远程主机提取备份。
备份主机使用 ssh 密钥认证来认证为远程主机上的受限用户,该用户被限制rsync
使用该authorized_key
文件的命令。
/etc/sudoers
允许用户以超级用户身份执行 rsync。
备份主机在逻辑上应该只能从远程主机读取文件/复制文件,而不能写入文件/复制文件到远程主机,因为/etc/passwd
如果它本身受到威胁,它很容易通过覆盖或篡改文件来危害远程主机。
我该如何实现这一点?我已经阅读过rrsync
,但没有看到允许这样做的选项。
答案1
标志-ro
确保rrsync
使用选项调用 rsync --sender
,根据rrsync
文档,这应该确保文件只能被读取 - 但是,我找不到权威来源(即 rsync 文档)来证实这一点。在我的测试中,它足以阻止对服务器的写入。
答案2
看一下授权程序- 我曾经在一个非常相似的场景中使用它(通过 ssh 备份 PC)
答案3
这接近于死灵法术,但我仍然首先发现这个问题并觉得这是不完整的,因为它依赖于外部程序。
因此,在拉取模式下,在接收方,只读模式以信任为前提。作为备份方法,只要只有正确配置的客户端请求数据,上述命令可能效果很好。如果您想限制 ssh 上的 rsync 可以执行的操作,仅对ro
客户端进行一次远程设置可能不够。
如果您有权访问通过 SSH 提取数据的服务器,则需要进行一些简单的额外配置来限制登录用户可以执行的操作。SSH 与公钥和私钥一起使用,提供了这种额外的方法来确保客户端只能调用特定的客户端command
。
操作方法如下。在提取数据的服务器上,主目录~/.ssh/known_hosts
中有一个文件。该文件包含每台主机的一行,每台主机都有其对应的公钥,如下所示user
ssh-dss AAAAB3....o9M9qz4xqGCqGXoJw= user@host
在其前面加上command
你想要允许的
command="/bin/myscript.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-dss AAAAB3....o9M9qz4xqGCqGXoJw= user@host
使其user@host
只能/bin/myscript.sh
在远程执行。
一个有很好答案的相关问题是在 SO 网站上。
答案4
正如 Zulakis 上面提到的,未记录的--server
选项--sender
似乎以只读模式在发送方服务器上启动 rsync。
因此我在服务器上配置了一个 sudoers 文件:
backuppc ALL=NOPASSWD: /usr/bin/rsync --server --sender *
使用此命令我无法上传或覆盖服务器上的文件。不幸的是,它并不安全,因为客户端仍然可以通过在下载后删除文件来轻松地从服务器上删除文件,例如:
rsync -v -e ssh --remove-source-files --rsync-path="sudo /usr/bin/rsync --server --sender" server.to.backup:/etc/network/interfaces .
下载文件然后将其删除。
因此,劫持备份服务器的攻击者可以触发最终备份并从服务器中删除所有备份文件。
因此,我找不到 backuppc 的只读模式。
看https://unix.stackexchange.com/a/539173寻找使用“功能”的更好方法。