【问题标题】:restricting rsync in daemon mode在守护进程模式下限制 rsync
【发布时间】:2013-11-18 10:41:04
【问题描述】:

我正在尝试在一台名为 node0 的机器上以守护程序模式运行 rsync。我希望机器只接受来自 node0(自身)或 node1(定义的其他机器)的连接

我想要使用它的唯一路径/tmp/。因此,对于任何原始机器,都应该禁止对任何其他路径的任何读/写操作。

我不希望用户限制,也不希望 rsync 通过 ssh 运行。

我已将 /etc/rsyncd.conf 设置如下:

syslog facility = syslog
max verbosity = 3
log file = /var/log/mylog.log
port = 873

[Proj1]
path = /tmp/
include = /tmp/
exclude = *
comment = some comment
hosts allow = node0, node1
hosts deny = *
max verbosity = 3
log file = /var/log/filedistributer.log

我比使用以下命令在守护程序模式下执行 rsync:

/usr/bin/rsync --daemon --config=/etc/rsyncd.conf --verbose

比从 node1 我运行: rsync -a test.out node0:/tmp/ 并且可以正常工作。

但如果我运行:rsync -a max.out node0:/someOtherDir,它也可以工作 - 它不应该。

如果我转到另一台机器并运行:

rsync -a someFile.out root@node0.MYHOSTNAME:/someOtherDir

它要求我授权 ssh 密钥,并输入 root 密码,然后我复制文件......它不应该。

我错过了什么?我的要求都没有得到满足:

  1. Rsync 在不应该使用 SSH 时使用 SSH
  2. Rsync 不限制主机。
  3. Rsync 不限制文件夹

日志文件,尽管 3 级详细程度只有一行(每个守护进程启动),格式为:

2013/11/18 12:32:35 [22289] rsyncd 版本 3.0.6 开始,正在监听 在 873 端口上

另外我遇到的另一个问题是,如果我从 node0 到 node1 运行 rsync 命令,它仍然成功,即使我没有在 node1 上以守护程序模式启动 rsync。

感谢您的帮助。

谢谢, 最大。

【问题讨论】:

  • rsync 联系远程系统有两种不同的方式:使用 remote-shell 程序作为传输(如 ssh 或 rsh)或直接通过 TCP 联系 rsync 守护进程。因此,当您从 node0 到 node1 联系它时,这可能就是您所做的,在这种情况下,远程 shell 会调用 node1 上的 rsync 服务器(使用任意端口 - 您可以检查它以验证我的假设)
  • 使用双冒号直接连接到 rsync 守护进程,而不是让 ssh 启动它。 rsync -a test.out node0::Proj1/(主机 :: 分享)

标签: linux ssh rsync


【解决方案1】:

所以经过一番挖掘,我想出的是:

  1. 默认情况下,当运行 rsync 时,它会尝试使用 ssh 作为其传输,因此它会 ssh 到目标机器并在那里调用 rsync。 要使用它,它需要目标机器上的有效凭据。没有办法避免这种情况——除了从目标机器中删除 ssh 守护程序。 为了限制 rsync 在这种模式下工作,实际上需要限制 ssh 或 rsh(或任何用作传输的 shell)接受来自不相关主机的连接。然而,在这种模式下,强制“白名单”主机只对所需的文件夹进行操作仍然是不可能的。

  2. 我在守护进程模式下使用 rsyncd.conf 对 rsync 的限制是正确的并且它们可以工作,但是为了使用 tcp 而不是 ssh 作为传输层,需要以不同的方式使用 rsync

    rsync rsync://node0/Proj1

这实际上会使 rsync 通过 tcp 连接并连接到目标上的 rsync 守护进程。

可以在以下链接中找到有关 rsyn 工作原理的非常有价值的信息来源: http://rsync.samba.org/how-rsync-works.html

【讨论】:

    【解决方案2】:

    您是否确保配置文件在启动时被守护程序实际显示为红色? 例如,尝试拒绝所有主机并检查规则是否适用。

    【讨论】:

    • 它被读取 - 因为如果我使用 rsync 从另一个节点连接到这个节点,使用: rsync rsync://node0 我看到我在配置文件中公开的模块。问题是,即使我限制所有主机,问题中的语法也会以某种方式起作用。根据我的挖掘,这可能是由于 rsync 通过 SSH 隧道,而不是直接进入 rsync 守护进程......我只是不确定如何防止这种情况
    • 当前版本的 rsync 默认使用 ssh,所以这里没有什么可以阻止的,如果你想将远程 shell 更改为其他东西,当然可以使用 -e 标志
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 2012-02-07
    • 2013-10-07
    • 1970-01-01
    • 2018-03-17
    相关资源
    最近更新 更多