前面我们介绍过 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 filepid文件路径,默认为空
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 optionsz指定禁用的选项,比如要将禁用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 选项指定配置文件路径

标签: rsync

添加新评论