我正在尝试在一台名为node0的计算机上以守护进程模式运行rsync。我希望机器只接受来自node0(self)或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密码,之后我复制文件......不应该。
我错过了什么?我的要求都没有得到满足:
日志文件,尽管级别3详细程度只有一行(每个守护程序启动),但形式为:
2013/11/18 12:32:35 [22289] rsyncd 3.0.6版开始,正在听 在873号港口
另外我遇到的另一个问题是,如果我从node0运行rsync命令到node1,它仍然会成功,即使我没有在node1上以守护进程模式启动rsync。
你的帮助非常适合。
谢谢, 最大
答案 0 :(得分:1)
所以在经过一番挖掘之后我得出的是:
默认情况下,当运行rsync时,它会尝试使用ssh作为其传输,因此它会ssh到目标计算机并在那里调用rsync。 要使用它将需要目标计算机上的有效凭据。除了从目标计算机中删除ssh守护程序之外,没有办法避免这种情况。 为了限制rsync在此模式下工作,实际上需要限制ssh或rsh(或任何用作传输的shell)接受来自不相关主机的连接。但是,仍然无法强制“白名单”主机仅在此模式下的所需文件夹上运行。
我使用rsyncd.conf在守护进程模式下对rsync的限制是正确的并且它们有效,但是为了使用tcp作为传输层而不是ssh,需要使用不同的rsync
rsync rsync:// node0 / Proj1
这实际上会使rsync通过tcp连接并连接到目标上的rsync守护程序。
有关rsyn如何工作的非常有价值的信息来源可以在以下链接中找到: http://rsync.samba.org/how-rsync-works.html
答案 1 :(得分:0)
启动后,您是否确保配置文件实际上是红色的守护程序? 例如,尝试拒绝所有主机并检查规则是否适用。