我希望备份主机能够从远程主机提取备份。
备份主机使用 ssh 密钥身份验证作为远程主机上的受限用户进行身份验证,该用户被限制为rsync
使用该authorized_key
文件的命令。
/etc/sudoers
允许用户以超级用户身份执行 rsync。
备份主机在逻辑上应该只能从远程主机读取文件/复制文件,而不是向远程主机写入文件/复制文件,因为它很容易通过覆盖/etc/passwd
或篡改文件来破坏远程主机。本身。
我怎样才能做到这一点?我已经阅读了关于rrsync
,但没有看到允许这样做的选项。
的
-ro
标志rrsync
确保使用该--sender
选项调用 rsync,根据rrsync
文档,该选项应确保只能读取文件 - 但是,我找不到证实这一点的权威来源(又名 rsync 文档)。在我的测试中,阻止写入服务器就足够了。看看authprogs - 我将它用于非常相似的场景(通过 ssh 备份)
这接近死灵法,但我还是先发现了这个问题,觉得这是不完整的,因为它依赖于外部程序。
因此,在拉模式下,在接收方方面,只读模式以信任为前提。作为一种备份方法,只要只有正确配置的客户端请求数据,上述命令就可以很好地工作。如果你想限制 rsync over ssh 可以做什么,一个远程设置
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 站点上已结束了一个具有良好答案的相关问题。
[披露:我写了下面描述的 sshdo]
如上所述,rrsync 可用于控制 rsync 可以通过 ssh 执行的操作,但与大多数 ssh 强制命令的使用一样,它仅限于每个授权密钥的单个 rsync 命令。
另一种控制 rsync 可以通过 ssh 执行的操作的方法是对 ssh 使用通用命令白名单控制。
有一个名为 sshdo 的程序可以做到这一点。它控制哪些命令可以通过传入的 ssh 连接执行。可在以下位置下载:
它有一个训练模式来允许所有尝试的命令,以及一个 --learn 选项来生成永久允许学习命令所需的配置。然后可以关闭训练模式,并且不会执行任何其他命令。
它还有一个 --unlearn 选项来停止允许不再使用的命令,以便在需求随时间变化时保持严格的最低权限。
它对它允许的内容非常挑剔。它不允许带有任何参数的命令。只能允许完整的 shell 命令。
但它确实支持简单的模式来表示类似的命令,这些命令仅在命令行上出现的数字(例如序列号或日期/时间戳)中有所不同。
它就像 ssh 命令的防火墙或白名单控制。