Rsync 服务端配置及常见错误
前面我们介绍过 rsync 有三种常用的使用方式,其中之一是 rsync 作为守护进程启动时,其默认监听在 873 端口,接收 rsync 客户端的请求。
在这种模式下,我们需要给 rsync 守护进程提供一个配置文件,告诉 rsync 提供哪些目录访问,允许哪些 IP 访问等。
Rsync 配置文件格式
rsync 配置文件由全局参数和一个或多个模块组成,全局参数写在文件头部,模块的定义则是由中括号开始,下方定义模块参数。
模块参数也可以定义在全局参数中,这表示给模块参数提供默认值。
配置示例
uid = nobody
gid = nobody
use chroot = yes
max connections = 4
syslog facility = local5
pid file = /var/run/rsyncd.pid
[ftp]
path = /var/ftp/pub
comment = whole ftp area
[www]
path = /var/www
comment = web file
Rsync 配置参数
全局参数
全局参数写在配置文件的头部,同时rsync还允许使用“[global]”模块名称来定义全局参数部分。
你还可以在配置文件的全局部分中包含任何模块参数,在这种情况下,则是为模块提供默认值。
参数 | 说明 |
---|---|
motd file | 需要客户端连接时显示的内容 |
pid file | pid文件路径,默认为空 |
port | 监听端口,默认为 873 |
address | 监听在哪个地址上,默认为 0.0.0.0 |
socket options | 套接字选项 |
listen backlog | 默认为5 |
模块参数
模块参数定义在全局参数下方,以方括号[module]中指定模块名称开始,直到下一个方括号前或文件结尾结束。
参数 | 说明 |
---|---|
path | 必填参数,指定路径 |
comment | 指定客户端获取可用模块列表时显示在模块名称旁边的描述字符串。默认为空 |
use chroot | 值为true,false,yes,no之一,如果为true,则在文件传输之前,rsync守护程序将chroot到“path”。这可以提高安全性,但它需要root权限运行守护进程。同步软链接时,软链接指向的文件不能是绝对路径,且不能是path路径之外的路径。默认为true |
daemon chroot | 执行守护进程前chroot,默认为不配置 |
numeric ids | 使用该选项后,rsync将传输gid和uid,而不是字符格式的username和groupname然后将其映射到两端 |
munge symlinks | 意思是改写软连接,值为true,false,yes,no之一,如果为false,则允许创建软链接,默认为true 如果munge symlinks=false,且use chroot=false,那么软链接会把前面的"/"或"../"删除。也就是说软链接不能链接至同步目录之外的文件 如果munge symlinks=false,且use chroot=true,那么rsync将不干预软链接的行为 |
charset | 设定字符集 |
max connections | 指定允许的最大并发连接数,默认为0,表示没有限制 |
log file | 日志文件路径 |
syslog facility | 定义此项,日志将发往syslog |
syslog tag | 给syslog日志打标签 |
max verbosity | 详细日志等级 |
lock file | 锁文件路径 |
read only | 设为只读,默认为true |
write only | 设为只写,默认为false |
list | 在客户端请求可用模块列表时是否列出此模块,默认为true |
uid | 指定从该模块上传或下载文件时的用户名或用户ID,结合“gid”参数,它确定了可用的文件权限。当root用户运行守护进程时,默认设置是切换到系统的“nobody”用户。为root用户默认设置是不更改用户 |
gid | 指定组名或组ID |
daemon uid | 指定守护进程使用哪个用户的身份运行 |
daemon gid | 指定守护进程使用哪个组的身份运行 |
fake super | 如果启用了该选项,rsync将通过对附加在每个文件上的扩展属性(根据实际需要)的保存/恢复来模拟super user。 扩展属性包括:文件的owner、group、文件的设备信息(设备文件和特殊文件被创建为空文本文件)以及所有特殊权限位(suid/sgid/sbit)。 在不使用super user备份数据时但又想保存ACL属性时,该选项很有用 |
filter | 该选项可以让你添加规则,以便从待传输的文件列表中有选择性地排除某些文件 |
exclude | 该选项是"--filter"选项的简化格式,默认为排除(exclude)规则,并且它将禁止对普通的筛选规则进行解析 |
include | 该选项是"--filter"选项的简化格式,默认为包含(include)规则,并且它将禁止对普通的 筛选规则进行语法解析 |
exclude from | 该选项和"--exclude"选项类似,但是它是从包含了排除规则的文件中读取排除规则(每行一个规则)。空行以及";"或"#"开头的行为注释行 |
include from | 该选项和"--exclude"选项类似,但是它是从包含了排除规则的文件中读取排除规则(每行一个规则)。空行以及";"或"#"开头的行为注释行 |
incoming chmod | 将影响传入文件的权限,语法解析规则:加上一个前缀"D"来指定该权限规则只对目录有效,或者加上前缀"F"指定该权限规则只对普通文件有效。 例如,下面的例子保证了所有目录都标记了sgid权限,其它人对文件都不可写,所有者和所属组都可写,且所有人都有执行权限:Dg+s,ug+w,Fo-w,+X |
outgoing chmod | 将影响传出文件的权限 |
auth users | 指定客户端连入时需要验证,除了用户名匹配,你还可以通过“@”前缀指定组名匹配。使用组名匹配时,身份验证用户名必须是系统上的真实用户,否则将被假定为没有组的成员。可以在用户后面加冒号指定用户的权限,格式:joe:deny @guest:deny admin:rw @rsync:ro susan joe sam |
secrets file | 仅在指定“auth users”参数时才查询此文件,该文件每行表示一条记录(用户名:密码) |
strict modes | 是否检测secrets file文件的权限,默认为true,表示该文件的权限必须只有rsync运行身份的用户能访问 |
hosts allow | 允许哪些IP访问,格式为x.x.x.x或x.x.x.x/mask,多个用空格分开,默认为允许所有 |
hosts deny | 不允许哪些IP访问,默认没定义 |
reverse lookup | 是否反向解析主机名,当hosts allow或hosts deny填写了主机名时,此项可能要设为true,默认为true |
forward lookup | 是否解析主机名,默认为true |
ignore errors | 指示rsyncd在决定是否运行传输的删除阶段时忽略守护程序上的I / O错误,默认为false |
ignore nonreadable | 这告诉rsync守护进程完全忽略用户无法读取的文件 |
transfer logging | 使用类似ftp日志格式保存日志 |
log format | 在使用transfer logging可以自己定制日志文件的字段,默认为%o %h [%a] %m (%u) %f %l %h 远程主机名 %a 远程IP地址 %l 文件长度字符数 %p 该次rsync会话的进程id %o 操作类型:"send"或"recv" %f 文件名 %P 模块路径 %m 模块名 %t 当前时间 %u 认证的用户名(匿名时是null) %b 实际传输的字节数 |
timeout | 定义超时时间,默认为0,表示不超时 |
refuse options | z指定禁用的选项,比如要将禁用checksum和delete,使用 refuse options = c delete |
dont compress | 不压缩 |
pre-xfer exec | 传输前执行命令,如果命令执行失败,则传输中止 |
post-xfer exec | 传输后执行命令 |
常见故障
@ERROR: auth failed on module xxxxx
rsync: connection unexpectedly closed (90 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)- 检查一下 secrets file 中的密码, 二端是否一致?
- 检查 rsync 客户端命令中是否指定了连接用户名?
password file must not be other-accessible
continuing without password file
- 这表示 secrets file 文件的权限属性不对,应设为 600
@ERROR: chroot failed
rsync: connection unexpectedly closed (75 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(150)
- 只有使用 root 用户运行守护进程,才能使用 chroot 功能
- 检查模块 path 路径是否存在且有权限
@ERROR: access denied to www from unknown (x.x.x.x)
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(359)
- 检查 hosts allow 和 hosts deny
rsync: failed to connect to x.x.x.x: No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(104) [receiver=3.0.6]
- 网络不可达,检查网络设置
rsync: failed to connect to 192.168.4.23: Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(124) [receiver=3.0.6]
- 检查 rsync 守护进程是否已经运行
- 检查 rsync 监听的端口是否修改过,如果不是默认的 873,则命令行要使用
--port=PORT
参数指定端口
rsync: recv_generator: mkdir "xxxx" failed: No space left on device (28)
*** Skipping any contents from this failed directory ***
- 磁盘空间满了
rsync: opendir "xxxx" (in dtsChannel) failed: Permission denied (13)
- 检查目录权限
rsync: unable to open configuration file "/etc/rsyncd.conf": No such file or directory
- 配置文件不存在,默认会找 /etc/rsyncd.conf,如果配置文件不在这个目录,则使用
--config=FILE
选项指定配置文件路径
- 配置文件不存在,默认会找 /etc/rsyncd.conf,如果配置文件不在这个目录,则使用