873 匿名可读的代价
rsync 以守护进程方式运行且未配置认证时,任何能连到 873 端口的人都可以列出模块并下载文件,备份数据泄露事件里这是常见原因。加固靠三件套:auth users 指定认证账号、secrets file 保存口令(权限必须是 600)、hosts allow 限制来源白名单。
基本信息
| 适用平台 | Linux(rsyncd) |
|---|---|
| 默认端口 | 873 |
| 风险等级 | 高 |
| 基线要求 | 禁用匿名访问并限制来源 |
| 配置文件 | /etc/rsyncd.conf,口令文件权限 600 |
典型使用场景
- 备份服务器暴露到内网后的安全核查
- 排查谁可以匿名列出与下载备份数据
- 新增备份任务时配置认证与来源限制
- 把备份链路迁移到走 SSH 的 rsync 模式
- 例行巡检确认没有匿名模块
核查与加固
核查与加固
ss -tlnp | grep ':873 ' # 确认守护进程监听情况
rsync rsync://127.0.0.1/ 2>/dev/null | head # 本地尝试匿名列出模块
grep -E '^(auth users|secrets file|hosts allow|read only|uid|gid)' /etc/rsyncd.conf # 查看关键配置项
ls -l /etc/rsyncd.secrets # 口令文件权限必须为 600
systemctl restart rsyncd # 改完配置重启服务走 SSH 模式的替代
走 SSH 模式的替代
rsync -avz -e ssh /data/ user@backup:/backup/data/ # 复用 SSH 认证与加密,不需要常驻守护进程
rsync -avz -e "ssh -i ~/.ssh/id_ed25519" /data/ user@backup:/backup/ # 需要免密时使用密钥配置项读法
| 配置项 | 含义 | 注意点 |
|---|---|---|
| auth users | 允许访问该模块的账号 | 未配置等于匿名可访问 |
| secrets file | 存放口令的文件 | 权限必须 600 |
| hosts allow | 来源地址白名单 | 写错网段等于全放行 |
| read only | 是否只读 | 备份目标侧应保持只读 |
| uid 与 gid | 以哪个身份读写文件 | 不宜使用 root |
secrets file 权限必须设成 600:否则本机上任何用户都能读到备份账号口令,内网横向移动就有了现成入口。
能用走 SSH 的 rsync 模式就尽量替换守护进程:它复用 SSH 的认证与加密,也少了一个需要长期维护的常驻服务。hosts allow 改完要从非白名单来源实测一次,网段写错很常见,看着收紧实际仍全放行。
备份链路中断常常是定时任务静默失败:改完配置除了手动跑一次同步,还要看 cron 或定时任务的日志,确认下一个周期的备份真的成功了。