不安全示范

1
2
3
4
5
6
7
uid = root
gid = root

[files]
path = /path/to/files/
read only = no
list = true

如果这样配置,匿名用户也可以直接操作 files 模块,并且list = true,执行一下命令就可以直接列出模块:

1
2
$ rsync rsyncServerIp::
files

知道模块名后,就可以任意对这个目录进行一些增删改了


安全设置

设置别的端口

/etc/rsyncd.conf的全局配置中配置,port = 873,将端口改为其他的

隐藏module信息

在单独模块定义处设置list = false,让直接执行rsync rsyncServerIp::不显示:

1
2
[files]
list = false

只读设置

不需要写入权限的module的设置为只读read only = true

1
2
[files]
read only = true

IP限制

白名单限制,只允许必要访问的主机访问。

1
hosts allow = 123.123.123.123

基本用户验证

只允许指定的用户利用指定的密码使用rsync服务。
服务端配置:

1
2
auth users = sqzr
secrets file = /etc/rsyncd.secrets

而文件/etc/rsyncd.secrets中写入使用的帐号密码,格式为每行username:password。这里password是明文。
而客户端使用时,可以利用 --password-file=/etc/rsyncd.secrets 参数,在/etc/rsyncd.secrets中写入密码。
rsync -av --password-file=/etc/rsyncd.secrets test.host.com::files /des/path
以上提到的/etc/rsyncd.secrets密码文件,用户用户组必须和使用者一致,且权限必须是600

ssh

rsync并没有直接支持加密传输。也就是说,它是直接明文传输的。如果需要rsync重要性很高的数据,自然想到了ssh。
rsync同步有两种模式:当源路径或目的路径的主机名后面包含一个冒号分隔符时,rsync使用ssh传输;当源路径或目的路径的主机名后面包含两个冒号,或使用rsync://URL时,rsync使用TCP直接连接rsync daemon。
所以还是这样用吧,在配置好ssh后:

1
rsync -av test.host.com:/path/to/files /des/path

配置文件

rsync的配置文件的键值用等号连接。但是如果手抖漏了这个等号,它是不会报错的,它只会把语法出错的一行直接忽视.所以配置时,务必进行测试,对没有权限的情况进行特别的测试。

其他

对ip和端口利用ipfilter或iptables进行更低层级的限制。