目录
- Rsync 简介
- 环境准备
- 第一步:安装 Rsync
- 第二步:配置 Rsync 服务器 (
/etc/rsyncd.conf)- 配置文件详解
- 一个完整的配置示例
- 第三步:创建备份目录和设置权限
- 第四步:配置用户认证(可选但推荐)
- 创建密码文件
- 设置密码文件权限
- 第五步:启动并设置开机自启 Rsync 服务
- 第六步:配置防火墙和 SELinux
- 防火墙设置
- SELinux 设置
- 第七步:客户端连接测试
- 列出模块
- 上传文件(推送到服务器)
- 下载文件(从服务器拉取)
- 安全加固建议
- 常见问题与排错
Rsync 简介
Rsync (Remote Sync) 是一个快速、多功能、远程(或本地)文件复制工具,它以其增量传输和高效的算法而闻名,只传输源文件和目标文件之间不同的部分,非常适合文件备份和同步。

服务器模式 (rsync-daemon) 允许 Rsync 在一个指定的端口(默认为 873)上监听连接,客户端可以像访问一个“共享文件夹”一样连接到它,并使用模块化的方式进行文件传输。
环境准备
- 操作系统: CentOS 7 / CentOS 8 / CentOS Stream 9
- 服务器IP: 假设为
168.1.100 - 客户端: 任何安装了
rsync的 Linux 或 Windows (通过 cwRsync) 机器
第一步:安装 Rsync
在 CentOS 服务器上,Rsync 通常已经预装,如果没有,可以使用 yum (CentOS 7/8) 或 dnf (CentOS 8/9) 进行安装。
# 对于 CentOS 7 和 8 sudo yum install -y rsync # 对于 CentOS 9 (使用 dnf) sudo dnf install -y rsync
安装完成后,检查版本:
rsync --version
第二步:配置 Rsync 服务器 (/etc/rsyncd.conf)
rsyncd.conf 是 Rsync 服务器的核心配置文件,它默认可能不存在,你需要手动创建。

sudo vi /etc/rsyncd.conf
配置文件详解
配置文件由全局参数和模块定义组成。
- 全局参数: 应用于整个 rsync 服务。
- 模块定义: 用
[ ]括起来的部分,定义了一个可被客户端访问的“共享目录”,每个模块都有自己的参数。
常用参数说明:
pid file: rsync 守护进程的 PID 文件位置。log file: rsync 的日志文件位置。port: 指定监听端口,默认为 873。lock file: 支持文件锁的文件路径。motd file: 消息文件,客户端连接后首先看到的内容。hosts allow: 允许连接的客户端 IP 地址,可以是单个 IP、网段或 (允许所有),多个用空格隔开。hosts deny: 禁止连接的客户端 IP 地址。max connections: 最大并发连接数。read only = yes/no: 模块是否为只读。yes表示客户端只能下载,no表示可以上传下载。write only = yes/no: 与read only相反,yes表示只能上传。list = yes/no: 客户端是否可以使用rsync rsync://<server>/命令列出所有可用模块。no更安全。uid: 传输文件时,文件所有者将为此用户 ID,通常设为nobody或一个专用的低权限用户。gid: 传输文件时,文件所属组将为此组 ID,通常设为nobody或一个专用的低权限组。secrets file: 指定存放用户名和密码的文件路径(用于认证)。auth users: 允许连接此模块的用户列表,多个用户用逗号隔开,如果此项为空,则不进行用户认证。path: 模块对应的实际文件系统路径。这是最重要的参数之一。
一个完整的配置示例
下面是一个配置文件示例,我们创建两个模块:web_backup 用于备份网站文件,data_sync 用于同步数据。
# /etc/rsyncd.conf
#############################################
# 全局参数
#############################################
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
lock file = /var/run/rsyncd.lock
motd file = /etc/rsyncd.motd
# 只允许 192.168.1.0/24 网段的客户端连接
hosts allow = 192.168.1.0/24
# 禁止所有其他连接
hosts deny = *
# 最大并发连接数
max connections = 5
# 使用一个专用的低权限用户和组来运行
uid = nobody
gid = nobody
use chroot = no # 是否将文件根目录锁定在 path 下,建议设为 no
#############################################
# 模块定义: web_backup
#############################################
[web_backup]
# 客户端可以列出这个模块
list = yes
# 可读写
read only = no
# 实际备份路径
path = /data/backup/web
# 认证用户
auth users = backup_user
# 密码文件路径
secrets file = /etc/rsyncd.passwd
#############################################
# 模块定义: data_sync (只读)
#############################################
[data_sync]
# 客户端不能列出这个模块,更安全
list = no
# 只读
read only = yes
# 实际数据路径
path = /data/share
# 不需要认证
# auth users =
# secrets file =
第三步:创建备份目录和设置权限
根据配置文件,创建对应的目录,并确保运行 Rsync 的用户(nobody)有正确的读写权限。
# 创建备份目录 sudo mkdir -p /data/backup/web sudo mkdir -p /data/share # 设置目录所有者和组为 nobody sudo chown -R nobody:nobody /data/ sudo chmod -R 755 /data/
第四步:配置用户认证(可选但推荐)
如果模块中使用了 auth users 和 secrets file,就需要创建密码文件。
创建密码文件
# 创建密码文件 sudo vi /etc/rsyncd.passwd
在文件中按照 username:password 的格式添加用户和密码。
# /etc/rsyncd.passwd 内容 backup_user:YourStrongPassword123!
设置密码文件权限
为了安全,密码文件的权限必须严格设置为 600,否则 Rsync 服务将拒绝加载。
sudo chmod 600 /etc/rsyncd.passwd
第五步:启动并设置开机自启 Rsync 服务
CentOS 7/8/9 使用 systemctl 来管理服务。
# 启动 rsync 服务 sudo systemctl start rsyncd # 设置开机自启 sudo systemctl enable rsyncd # 检查服务状态 sudo systemctl status rsyncd
第六步:配置防火墙和 SELinux
这是最容易被忽略但又至关重要的一步。
防火墙设置
默认情况下,防火墙会阻止 873 端口的连接,你需要为防火墙添加一个规则。
# 对于使用 firewalld 的系统 (CentOS 7/8/9) sudo firewall-cmd --permanent --add-service=rsync sudo firewall-cmd --reload # 或者直接开放端口 sudo firewall-cmd --permanent --add-port=873/tcp sudo firewall-cmd --reload
SELinux 设置
如果系统启用了 SELinux(默认是启用的),它可能会阻止 Rsync 写入文件,最简单的方法是为 Rsync 设置一个布尔值,允许它在公共目录中写入。
# 允许 rsync 写入公共目录 sudo setsebool -P rsync_client.allow off # 或者更通用的 sudo setsebool -P allow_rsync
