在服务器管理和数据备份领域,rsync 是一款不可或缺的强大工具,它以其高效的增量传输算法而闻名,能够只同步文件中发生变化的部分,极大地节省了网络带宽和传输时间,当 rsync 以守护进程(rsyncd)模式运行时,它便化身为一个功能丰富的文件同步服务器,允许客户端随时连接并进行数据拉取或推送,尽管 CentOS 6 已进入生命周期结束(EOL)阶段,但在许多遗留系统中,理解并掌握 rsyncd 的配置与使用依然具有重要的现实意义,本文将详细介绍在 CentOS 6 系统上搭建、配置和管理 rsyncd 服务的完整流程。

安装与基础配置
在 CentOS 6 上,rsync 软件包通常默认已安装,若未安装,可以通过 yum 命令轻松完成。
sudo yum install rsync -y
rsyncd 的核心配置文件是 /etc/rsyncd.conf,该文件默认可能不存在,需要手动创建,一个典型的配置文件分为两部分:全局参数和模块参数,全局参数定义了整个 rsyncd 守护进程的行为,而模块参数则定义了可供客户端访问的具体共享目录。
以下是一个基础的 /etc/rsyncd.conf 示例:
# 全局参数
uid = nobody
gid = nobody
use chroot = yes
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
timeout = 300
# 模块定义
[public_files]
    path = /data/public
    comment = Public file sharing area
    read only = yes
    list = yes
[private_backup]
    path = /data/backup
    comment = Private backup area for authorized users
    read only = no
    list = yes
    auth users = backup_user
    secrets file = /etc/rsyncd.secrets
全局参数解析:
uid/gid: 指定rsyncd守护进程运行时所使用的用户和组,出于安全考虑,通常使用nobody。use chroot: 是否在传输前将chroot到模块的path目录,这是一个重要的安全特性,可以防止用户访问模块目录之外的文件系统。max connections: 允许的最大并发连接数。pid file/lock file: 指定进程 ID 文件和锁文件的位置。log file: 指定日志文件路径,便于排查问题。timeout: 设置空闲连接的超时时间(秒)。
定义同步模块与用户认证
模块是 rsyncd 服务的核心,它代表一个共享的目录,在上述示例中,我们定义了两个模块:[public_files] 和 [private_backup]。
模块参数解析:
[module_name]: 方括号内的名称是客户端连接时使用的模块标识符。path: 指定共享目录的绝对路径,确保该目录存在且uid/gid指定的用户有相应的读写权限。comment: 对模块的描述性文字,当客户端列出所有模块时会显示。read only: 设置为yes表示客户端只能下载(拉取)文件,设置为no则允许上传(推送)。list: 控制该模块是否在客户端请求模块列表时被显示。auth users: 指定允许访问该模块的用户,多个用户用逗号分隔,如果未设置此选项,则为匿名访问。secrets file: 指定存储用户名和密码的文件路径。
对于需要认证的模块,如 [private_backup],我们需要创建一个密码文件 /etc/rsyncd.secrets,该文件的格式非常简单,每行一个“用户名:密码”对。
sudo vim /etc/rsyncd.secrets
示例:
backup_user:your_strong_password
安全提示: 密码文件的安全性至关重要,必须将其权限设置为只有 root 用户可读写,否则 rsyncd 服务将拒绝启动。
sudo chmod 600 /etc/rsyncd.secrets
启动与管理 rsync 服务
配置完成后,即可启动 rsyncd 服务,在 CentOS 6 中,rsync 并未预设为标准的系统服务,但我们可以轻松地将其添加并管理。
手动启动守护进程以测试配置是否正确:

sudo rsync --daemon --config=/etc/rsyncd.conf
如果没有错误输出,并且进程已经启动(可通过 ps aux | grep rsync 查看),说明配置文件语法无误,我们可以将 rsyncd 设置为开机自启动服务。
CentOS 6 使用 SysV init,我们需要为 rsync 创建一个启动脚本,幸运的是,rsync 软件包通常已经提供了一个模板,位于 /usr/share/doc/rsync-x.x.x/rsyncd.conf 或类似路径,更简单的方法是直接使用 service 和 chkconfig 命令。
# 将 rsync 添加为系统服务 sudo chkconfig --add rsync # 设置开机自启 sudo chkconfig rsync on # 启动服务 sudo service rsync start # 停止服务 sudo service rsync stop # 重启服务 sudo service rsync restart
防火墙配置:
rsyncd 默认使用 TCP 端口 873,如果服务器的防火墙(iptables)开启,必须放行此端口。
sudo iptables -I INPUT -p tcp --dport 873 -j ACCEPT sudo service iptables save
客户端连接与使用
服务端配置就绪后,客户端就可以通过各种方式与之交互了。
列出服务器上所有可用的模块:
rsync rsync://your_server_ip/
如果配置正确,你将看到类似以下的输出:
public_files   Public file sharing area
private_backup Private backup area for authorized users
从服务器拉取(下载)文件:
- 匿名拉取:
rsync -avz rsync://your_server_ip/public_files/ /local/public/
 - 认证拉取:
rsync -avz backup_user@your_server_ip::private_backup /local/backup/
执行此命令后,系统会提示输入
backup_user的密码,注意,这里使用双冒号 来指定连接rsyncd守护进程的特定模块。 
向服务器推送(上传)文件:
推送操作需要模块的 read only 参数设置为 no。
rsync -avz /local/data_to_backup/ backup_user@your_server_ip::private_backup
同样,系统会要求输入密码。-a 选项表示归档模式,它相当于 -rlptgoD 的集合,能保留文件的各种属性;-v 表示详细模式,显示传输过程;-z 表示在传输过程中进行压缩,以节省带宽。

高级配置与安全考量
为了进一步增强 rsyncd 的安全性和灵活性,还可以利用以下高级配置:
- 
IP 访问控制: 在全局参数或模块参数中,可以使用
hosts allow和hosts deny来限制允许或拒绝访问的客户端 IP 地址或网段。hosts allow = 192.168.1.0/24, 10.0.0.5 hosts deny = *
这条规则表示只允许
168.1.0/24网段和0.0.5这台主机访问,拒绝其他所有连接。 - 
use chroot的权衡: 虽然use chroot = yes增强了安全性,但如果模块路径中存在符号链接指向chroot监狱之外的目录,同步可能会失败,在某些特定场景下,可能需要将其设置为no,但这会降低安全性,需谨慎评估。 
相关问答FAQs
问题1:连接 rsyncd 时提示 “auth failed on module XXX”,该如何排查?
解答: “认证失败”是 rsyncd 使用中最常见的错误之一,排查步骤如下:
- 检查 
secrets file路径: 确认/etc/rsyncd.conf中secrets file指定的路径是否正确,文件是否存在。 - 检查文件权限: 确认密码文件的权限必须是 
600(chmod 600 /etc/rsyncd.secrets),权限过高会导致rsyncd出于安全考虑拒绝读取。 - 检查用户名和密码: 确认客户端输入的用户名与 
auth users中定义的一致,密码与/etc/rsyncd.secrets文件中存储的密码完全匹配,注意密码文件中不要有多余的空格。 - 检查 
auth users配置: 确认模块中auth users参数已正确配置,并且包含了你尝试登录的用户名。 - 重启 rsyncd 服务: 修改任何配置后,务必重启 
rsyncd服务 (service rsync restart) 使更改生效。 
问题2:通过 rsyncd 守护进程同步和通过 SSH 远程执行 rsync 有什么区别?
解答: 两者都是利用 rsync 算法进行数据同步,但在工作方式、安全性和适用场景上有显著区别,如下表所示:
| 特性 | rsyncd (守护进程模式) | 
rsync over SSH (远程 shell 模式) | 
|---|---|---|
| 端口 | 默认使用 873 端口 | 使用 SSH 端口(默认 22) | 
| 认证方式 | 使用独立的密码文件 (secrets file),可匿名访问 | 
使用系统用户和 SSH 密钥或密码认证 | 
| 数据加密 | 传输过程默认不加密(数据是明文的) | 整个传输过程(包括认证和数据)由 SSH 加密,安全性高 | 
| 配置复杂度 | 需要在服务端配置 rsyncd.conf,管理守护进程 | 
服务端无需额外配置,只需确保 SSH 服务正常运行和用户权限 | 
| 防火墙 | 需要放行 873 端口 | 需要放行 SSH 端口 | 
| 适用场景 | 适合内网环境、频繁的自动化备份任务、公开文件分发、无需系统账户的场景 | 适合跨公网同步、对安全性要求高的场景、一次性或临时的同步任务 | 
如果是在可信的内网环境中进行大量、自动化的数据备份,rsyncd 效率更高且配置灵活,如果需要穿越不可信的网络(如互联网)进行同步,或者不想为同步任务创建额外的系统账户和配置文件,rsync over SSH 是更安全、更便捷的选择。