rsync 服务端的风险
rsync 以守护进程模式运行时默认监听 873 端口,模块由 /etc/rsyncd.conf 定义。如果没有配置认证用户,模块会对任何可达主机开放列表与读写:轻则数据被同步走,重则可写模块被覆盖甚至写入后门文件。问题基本都来自配置疏漏——只写 hosts allow 不写认证、忘记 list = no、read only 未开启。这类服务常用于备份与分发,往往跨网段可达。
基本信息
| 组件 | rsync daemon(独立服务模式),不是 ssh 通道模式 |
|---|---|
| 默认端口 | 873 TCP |
| 配置文件 | /etc/rsyncd.conf,口令文件常为 /etc/rsyncd.secrets |
| 主要风险 | 无认证模块、允许列出模块、可写模块、来源未限制 |
| 加固项 | auth users、secrets file、hosts allow 与 deny、read only、list |
| 权限要求 | 口令文件权限 600,属主 root |
| 检查方式 | ss 查看端口监听,rsync 列出模块确认是否受限 |
配置项与作用
| 配置项 | 作用 | 建议值 |
|---|---|---|
| read only | 禁止客户端在此模块写入 | yes,除非确实需要接收数据 |
| list | 是否允许列出模块名 | no,减少枚举面 |
| auth users | 允许连接的用户清单 | 明确列出用户名,不用通配 |
| secrets file | 用户名与口令文件 | 权限 600,属主 root |
| hosts allow | 来源白名单 | 只写业务需要的网段 |
| hosts deny | 来源黑名单 | 0.0.0.0/0 作为兜底 |
加固要点(rsyncd.conf)
加固要点(rsyncd.conf)
uid = nobody
gid = nobody
[backup]
path = /data/backup
read only = yes
list = no
auth users = rsyncuser
secrets file = /etc/rsyncd.secrets # 权限 600,属主 root
hosts allow = 10.0.0.0/24
hosts deny = 0.0.0.0/0核查命令
核查命令
ss -ltnp | grep 873
# 授权范围内的连通性确认:能列出模块说明未限制列表
rsync rsync://<目标IP>/
# 列出指定模块,正常应要求认证
rsync rsync://<目标IP>/backup/
# 检查口令文件权限是否为 600
ls -l /etc/rsyncd.secrets典型使用场景
- 备份通道上线前的配置评审
- 季度巡检中的文件共享服务暴露面核查
- 渗透测试报告里未授权同步问题的整改
- 迁移备份方案时与现有配置做对照
- 应急时确认是否存在异常同步记录
- 审计举证:说明哪些主机可读写哪些模块
read only 与 list = no 是低成本高收益的两个配置项。绝大多数分发场景只需要「只读 + 认证 + 来源限制」这三项。
可写模块配合弱认证风险最高:攻击者可以覆盖目标目录文件,甚至替换脚本或配置实现持久化,影响不止数据泄露。