凌峰创科服务平台

CentOS rsync服务器如何配置?

目录

  1. Rsync 简介
  2. 环境准备
  3. 第一步:安装 Rsync
  4. 第二步:配置 Rsync 服务器 (/etc/rsyncd.conf)
    • 配置文件详解
    • 一个完整的配置示例
  5. 第三步:创建备份目录和设置权限
  6. 第四步:配置用户认证(可选但推荐)
    • 创建密码文件
    • 设置密码文件权限
  7. 第五步:启动并设置开机自启 Rsync 服务
  8. 第六步:配置防火墙和 SELinux
    • 防火墙设置
    • SELinux 设置
  9. 第七步:客户端连接测试
    • 列出模块
    • 上传文件(推送到服务器)
    • 下载文件(从服务器拉取)
  10. 安全加固建议
  11. 常见问题与排错

Rsync 简介

Rsync (Remote Sync) 是一个快速、多功能、远程(或本地)文件复制工具,它以其增量传输和高效的算法而闻名,只传输源文件和目标文件之间不同的部分,非常适合文件备份和同步。

CentOS rsync服务器如何配置?-图1
(图片来源网络,侵删)

服务器模式 (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 服务器的核心配置文件,它默认可能不存在,你需要手动创建。

CentOS rsync服务器如何配置?-图2
(图片来源网络,侵删)
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 userssecrets 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
分享:
扫描分享到社交APP
上一篇
下一篇