rsync 配置文件的核心要点是:服务端路径多数放在 /etc/rsyncd.conf,模块里必须写对 path、uid/gid、hosts allow,密码文件权限要设为 600,否则认证会直接失败。
rsync 配置文件位置与基础结构
服务端真正的配置文件叫 rsyncd.conf,大多数 Linux 发行版默认放在 /etc/ 目录下,客户端一般不需要单独的 rsyncd.conf,但密码文件也算一种轻量配置,通常用 –password-file 参数指定。
国内 Linux 服务器 rsync 配置文件放哪里
CentOS、Rocky Linux、AlmaLinux 用 yum/dnf 安装 rsync 后,/etc/rsyncd.conf 可能不存在,需要手动创建,Ubuntu、Debian 安装后同样没有默认文件,手动建立即可,部分国产系统如统信 UOS、麒麟,只要基于 RPM 或 DEB 包管理,路径通用 /etc/rsyncd.conf,若用源码编译安装,可以在编译时通过 –sysconfdir 指定配置目录,默认常落在 /usr/local/etc 下。
rsync 配置文件怎么写才不报错
先给出一份最小可用配置:
uid = nobody
gid = nobody
use chroot = yes
max connections = 10
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
[backup]
path = /data/backup
comment = backup module
read only = yes
list = yes
auth users = backupuser
secrets file = /etc/rsyncd.secrets
hosts allow = 192.168.1.0/24
日常写配置文件最容易报错的地方有这么几类:
- path 指向的目录不存在,或者 rsync 启动用户没有访问权限。
- secrets file 权限不是 600,rsync 会直接拒绝加载。
- hosts allow 写成单一 IP,但客户端实际出口是 NAT 后的地址。
- 模块名重复或包含特殊字符。
- 修改配置后没有重启 rsync 服务。
想快速看报错原因,可以前台启动:
rsync --daemon --config=/etc/rsyncd.conf --no-detach
这样错误信息会直接输出到终端。
rsync 服务端配置文件关键参数详解
配置文件里的参数分为全局参数和模块参数,模块参数只对某个模块生效,常见参数如下:
| 参数 | 作用 | 常见设置 |
|---|---|---|
| uid/gid | 模块传输时使用的本地用户身份 | nobody 或专用 rsync 用户 |
| use chroot | 把模块路径锁在根目录内 | yes |
| max connections | 最大并发连接数 | 5-20 |
| timeout | 连接空闲超时时间 | 300 |
| read only | 是否只允许读取 | yes 仅允许下载,no 允许上传 |
| auth users | 允许认证的用户名列表 | 与 secrets file 对应 |
| secrets file | 密码文件路径 | /etc/rsyncd.secrets |
| hosts allow/deny | 按 IP/网段限制客户端 | 内网网段 |
| list | 是否允许客户端列出模块 | yes/no |
| ignore errors | 传输遇到单文件错误不提前中断 | 备份场景常加 |
ignore errors 适合大目录备份,遇到个别文件损坏或权限不够时,不会让整个同步任务停掉。
rsync 密码文件配置与权限问题
服务端密码文件格式是“用户名:密码”,每行一个:
backupuser:123456
客户端密码文件只需要密码本身:
123456
权限务必设置为 600:
chmod 600 /etc/rsyncd.secrets
chmod 600 /home/user/rsync.pass
常见错误就三个:
- 服务端 secrets file 权限是 644,会报 secrets file must not be other-accessible。
- 客户端密码文件里多写了用户名,认证也会失败。
- 密码含特殊字符时没有用引号,可能导致解析不一致。
rsync 和 scp 备份对比:哪个更适合你的同步任务
rsync 和 scp 都可以通过 SSH 通道传输文件,但 rsync 配置文件让服务端模块化管理更清晰,scp 没有配置文件概念,两者对比:
| 对比项 | rsync | scp |
|---|---|---|
| 增量传输 |
支持,只传变化部分 |
不支持,全量复制 |
| 断点续传 | 支持 –partial | 不完整 |
| 服务端配置文件 | /etc/rsyncd.conf 模块化 | 无 |
| 认证方式 | 模块密码或 SSH | 仅 SSH |
| 过滤规则 | –exclude/–include | 不支持 |
| 带宽控制 | –bwlimit | 无内置 |
| 定时备份场景 | 合适 | 只适合一次性复制 |
结论很清楚:需要固定目录备份、增量传输、限制内网访问时,rsync 配置文件方案更省心。
rsync 定时备份目录到另一台服务器配置步骤
场景:A 服务器的 /data/web 每天凌晨备份到 B 服务器的 /data/backup/web。
B 服务器先做三件事:
- 创建目录 /data/backup/web。
- 编辑 /etc/rsyncd.conf 增加 [webbackup] 模块,path 指向该目录,read only = no,auth users = backup,secrets file 指向密码文件。
- 启动 rsync –daemon,并设置开机自启。
A 服务器再配置客户端:
- 创建密码文件 /etc/rsync_client.pass,内容仅为密码,chmod 600。
- 加入 crontab:
30 2 rsync -avz --delete /data/web/ backup@192.168.1.20::webbackup --password-file=/etc/rsync_client.pass
这里要注意源路径末尾的斜杠:/data/web/ 表示同步目录内容本身,不加斜杠会多出一层 web 目录。
rsync 免费方案与商业同步工具成本对比
rsync 本身是 GPL 开源协议,不需要购买授权,国内服务器同样可以直接用 yum/dnf/apt 安装,没有任何授权费用,商业备份软件通常按节点数或容量付费,对于多台服务器长期同步,成本会明显增加,业内专家指出,中小团队用 rsync 做服务器间文件同步,技术门槛并不高,主要成本只在首次配置和日常日志巡检。
rsync 配置文件安全加固建议
行业共识认为,直接把 rsync 端口暴露到公网风险较高,至少要做三层限制:
- 服务端模块设置 hosts allow 仅允许内网网段。
- 防火墙只放行指定源 IP 到 873 端口。
- 若必须跨公网,优先走 SSH 隧道:rsync -e ‘ssh -p 22’,不开放 873 端口。
- secrets file 权限保持 600,模块目录属主与 uid/gid 保持一致。

rsync 配置文件常见问题排查思路
rsync: failed to connect 怎么处理
先检查服务端 873 端口是否监听:
ss -tlnp | grep 873
再检查防火墙和云安全组是否放行,最后看 /var/log/rsyncd.log 是否提示 hosts allow 拒绝。
rsync: auth failed on module 怎么处理
大概率是密码文件权限或密码内容问题,先确认服务端 secrets file 权限 600、格式 user:password,再确认客户端 –password-file 只含密码且权限 600,最后确认 auth users 中的用户名在服务端密码文件里存在。
rsync 配置文件修改后不生效
修改 /etc/rsyncd.conf 后不会自动热加载,需要重启服务:
systemctl restart rsyncd
或手动结束 rsync 进程后重新 rsync –daemon 启动。
把服务端路径、模块 path、hosts allow、secrets file 权限这四项写对,rsync 配置文件基本不会出现大的故障。 日常维护只需要关注日志和定时任务执行结果。
rsync 配置文件常见问题问答
rsync 配置文件里 secrets file 怎么设置?
服务端 secrets file 每行写“用户名:密码”,文件权限必须设置为 600,客户端密码文件只写密码本身,同样权限 600,若权限过宽,rsync 会拒绝认证。
rsync 客户端需要配置文件吗?
通常不需要服务端那样的 rsyncd.conf,但使用密码认证时,客户端需要一个只含密码的密码文件,并通过 –password-file 参数指定,该文件也属于 rsync 配置的一部分。
rsync 配置文件中的 uid 和 gid 起什么作用?
uid 和 gid 决定 rsync 守护进程在读写模块目录时使用的本地用户身份,例如设置 uid = nobody、gid = nobody,实际文件操作权限就等于 nobody 用户对目标目录的权限。


