当前位置: 首页 > news >正文

深入解析linux 的 rsyncd服务

rsyncdrsync守护进程 (daemon) 模式,是 rsync 的两种核心工作模式之一。

  1. Shell 模式 (ad-hoc)rsync -avz /src user@host:/dest

    • 原理:通过 SSH 隧道传输。
    • 优点:简单、安全(复用SSH)。
    • 缺点:每次同步都需要 SSH 登录握手,同步大量小文件时,开销巨大,速度较慢。
  2. Daemon 模式 (rsyncd)rsync -avz /src user@host::module (注意双冒号 ::)

    • 原理:一个服务器(Server B)以后台服务形式常驻运行 rsyncd 守护进程(默认 873 端口)。客户端(Server A)直接连接此端口。
    • 优点极快。省去了 SSH 的开销,非常适合高频、大量的文件同步(如Web服务器的uploads目录、日志、数据备份)。
    • 缺点:需要额外配置;默认数据明文传输(但在可信的内网中,这是为了速度而做的权衡)。

这份文档将详细指导你如何配置 rsyncd,实现从 Server A 到 Server B 的高效文件同步。


🗄️ rsyncd 守护进程模式使用文档

1. 目标场景

我们设定一个典型的 Web 服务器备份场景:

  • Server A (源/Client)

    • IP: 192.168.1.10
    • 角色: 客户端 (Client),数据发送方。
    • 同步目录: /data/www/uploads/ (PHP应用的用户上传目录)
  • Server B (目标/Server)

    • IP: 192.168.1.20
    • 角色: rsyncd 守护进程 (Daemon),数据接收方。
    • 备份目录: /backup/web_uploads/

2. (核心) 步骤一:配置 Server B (数据接收方)

Server B 是“服务端”,需要启动 rsyncd 服务并配置“模块”(Module)。

2.1 安装 rsync

(大部分 Linux 发行版已自带)

# CentOS/RHEL
sudo yum install rsync# Debian/Ubuntu
sudo apt install rsync
2.2 创建 rsyncd.conf 配置文件

这是 rsyncd灵魂
创建并编辑 /etc/rsyncd.conf 文件:

sudo vi /etc/rsyncd.conf

粘贴以下配置:

# /etc/rsyncd.conf - rsyncd 守护进程配置
# --- 全局配置 (Global Settings) ---
uid = nobody         # 进程运行的用户 (重要:用低权限用户)
gid = nobody         # 进程运行的用户组
use chroot = no      # 不锁定到 chroot (配置更简单)
max connections = 10 # 最大连接数
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
transfer logging = yes
log format = %t %a %m %f %b# --- 模块定义 (Module Definition) ---
# 定义一个名为 [web_uploads] 的模块
# 客户端将通过这个“模块名”来访问
[web_uploads]# 模块的注释comment = Web Server Uploads Backup# 模块在 Server B 上的“真实”文件路径path = /backup/web_uploads/# 是否只读 (no = 客户端可以写入)read only = no# 是否只写 (yes = 客户端只能写入,不能读取)# write only = yes# 允许连接的客户端 IP (用空格或逗号分隔)# (为了安全,强烈建议设置)hosts allow = 192.168.1.10# (可选) 拒绝的 IP,* 代表所有# hosts deny = *# 认证用户名 (这是“虚拟”用户名,不是系统用户)auth users = rsync_backup_user# 存放“虚拟用户名:密码”的文件secrets file = /etc/rsyncd.secrets
2.3 创建 rsyncd.secrets 认证文件

此文件用于 auth users 中定义的用户。

sudo vi /etc/rsyncd.secrets

粘贴以下内容 (格式为 username:password):

rsync_backup_user:Your_Secret_Password_Here

⚠️ 关键安全步骤: 必须设置严格的权限,只允许 root 读取此文件!

sudo chmod 600 /etc/rsyncd.secrets
2.4 确保备份目录存在且权限正确

rsyncd.confuid = nobody,这意味着 nobody 用户需要有写入 path 目录的权限。

# 创建备份目录
sudo mkdir -p /backup/web_uploads/# 将目录的所有权交给 nobody
sudo chown -R nobody:nobody /backup/web_uploads/
2.5 启动 rsyncd 服务

方式一 (推荐:使用 systemd)
如果你的发行版提供了 rsyncd.service 文件(CentOS 7+ 通常有):

# 启动服务
sudo systemctl start rsyncd# 设置开机自启
sudo systemctl enable rsyncd

方式二 (手动启动)
如果 systemctl 找不到服务,你可以手动启动守护进程:

sudo rsync --daemon
2.6 配置防火墙 (重要)

rsyncd 默认使用 TCP 873 端口。

使用 firewalld (CentOS/RHEL):

sudo firewall-cmd --add-port=873/tcp --permanent
sudo firewall-cmd --reload

使用 ufw (Ubuntu/Debian):

sudo ufw allow 873/tcp
sudo ufw reload

Server B 配置完成!


3. 步骤二:配置 Server A (数据发送方)

Server A 是“客户端”,负责发起同步命令。

3.1 创建密码文件 (为了自动化)

为了不在 cron 或脚本中暴露密码,我们将密码存在一个文件中。

# 在你希望执行同步的用户下(比如 www-data 或你自己的用户)
vi ~/.rsync_pass

文件内容(注意:只有密码,没有用户名):

Your_Secret_Password_Here

⚠️ 关键安全步骤: 同样设置严格的权限。

chmod 600 ~/.rsync_pass
3.2 运行 rsync 命令

这是最终的同步命令。

  • -a (archive): 归档模式,等于 -rlptgoD。保留权限、时间戳、递归等。
  • -v (verbose): 显示详细过程。
  • -z (compress): 压缩传输(如果文件是文本,效果好;如果是图片/zip,可以去掉)。
  • -P (progress/partial): 显示进度条,并支持断点续传。
  • --delete: (危险但常用) 删除 Server B 上有、但 Server A 上没有的文件,保持两侧完全一致
  • --password-file: 指定我们刚创建的密码文件。

测试 (Dry Run):
在正式执行前,强烈建议先用 -n (或 --dry-run) 进行模拟运行。它只会显示将要发生什么,不会真的传输文件。

rsync -avzPn \/data/www/uploads/ \rsync_backup_user@192.168.1.20::web_uploads

正式执行命令:

rsync -avzP \--password-file=~/.rsync_pass \/data/www/uploads/ \rsync_backup_user@192.168.1.20::web_uploads

(带删除的完全镜像):

rsync -avzP --delete \--password-file=~/.rsync_pass \/data/www/uploads/ \rsync_backup_user@192.168.1.20::web_uploads

4. 命令详解与“陷阱”

4.1 “双冒号” ::

rsync_backup_user@192.168.1.20::web_uploads

  • rsync_backup_user: rsyncd.confauth users 定义的虚拟用户
  • 192.168.1.20: rsyncd 服务器的 IP。
  • :: (双冒号): 告诉 rsync 客户端“我要使用 daemon 模式,连接 873 端口”。(如果是单冒号 :,它会走 SSH 模式)。
  • web_uploads: rsyncd.conf 中定义的模块名 [web_uploads]
4.2 “斜杠” / (最重要的陷阱)

rsync 命令对源路径末尾的斜杠 / 极其敏感

  • 场景 1 (带斜杠): rsync -av /data/www/uploads/ ...

    • 含义:同步 /uploads/ 里面的内容 (content) 到目标目录。
    • 结果/backup/web_uploads/file.jpg
  • 场景 2 (不带斜杠): rsync -av /data/www/uploads ...

    • 含义:同步 /uploads 这个文件夹本身 (folder) 到目标目录。
    • 结果/backup/web_uploads/uploads/file.jpg (多了一层目录)

99% 的情况下,你想要的都是场景 1(带斜杠)。

5. 自动化 (Cron Job)

将命令加入 crontab 即可实现自动备份。

crontab -e

(每天凌晨 3:00 执行一次完全同步)

0 3 * * * rsync -a --delete --password-file=/home/user/.rsync_pass /data/www/uploads/ rsync_backup_user@192.168.1.20::web_uploads > /var/log/rsync_backup.log 2>&1

(注意:-v-P 已被移除,因为在 cron 中不需要看进度条,-a 更安静)

http://www.dtcms.com/a/553885.html

相关文章:

  • 长沙做旅游网站多少钱建设厅网站用户名和密码
  • 设计网站推广公司网页制作怎样做安居客网站
  • Python快速入门专业版(五十五):Requests库入门:HTTP请求实战与Header伪装(避坑403反爬)
  • 软件设计师重点笔记-4
  • rabbitmq-k8s下双架构镜像+手动sts部署完全文档(上)
  • 如何使用 C# 将 CSV 数据轻松转换为 PDF
  • 【每天一个知识点】数据湖(Data Lake)与数据仓库(Data Warehouse)
  • 深入理解外边距重叠与 BFC —— 为什么粉色背景多出一块?
  • 网站开发学什么数据库网站建设美工百度百科
  • 怎样制作网站站点免费的网站认证
  • 使用cvx工具箱求解svm的原问题及其对偶问题
  • 国内免费无版权视频素材网站泉州做网站设计公司
  • CVPR-2025 | 端到端导航智能体的推理能力探究:动态系统学习、规划能力与记忆使用
  • 百度网盘下载怎么免费提速?2025最新教程分享
  • 一个交易网站开发的成本是多少钱上海市中学生典型事例网站
  • 网站 验证码错误本地南京网站建设
  • 如何通过右键实现音视频/PDF/Office 一键格式转换?
  • 深入理解 Python 的 __init_subclass__ 方法:自定义类行为的新方式 (Effective Python 第48条)
  • 用遗传算法求解“旅行商问题(TSP)”
  • 蜜桃汇免费的wordpress账号网站文章来源seo
  • 嘉立创EDA四层板PCB学习记录(44小点)
  • 使用yolov8训练自己的数据集
  • 中高端社交网站建设服务商织梦个人网站模板
  • 走进Linux的世界:冯诺依曼体系结构
  • 免费外贸网站在线今天重大新闻摘抄
  • IT运维的365天--035 Ubuntu密码忘了没?
  • 在Ubuntu20.04下安装iperf3
  • 网站上的图是怎么做的外包工是临时工吗
  • 《Python 中的陷阱与真相:深入理解 `is` 与 `==` 的区别及实战 Bug 解析》
  • 网站建设是必须的吗东莞高端网站建设收费标准