rsync 通过 uid/gid 和 incoming chmod 控制同步后文件权限,其中 incoming chmod 显式裁剪权限上限,需配合合理 umask 及有权限的专用用户(如 rsync)确保生效。

rsync 本身不直接“限制文件最高权限”,而是通过 uid、gid 配合 incoming chmod(或 chmod)参数,控制同步后文件的属主、属组及权限位。真正限制“最高权限”的关键,在于服务端配置中对新创建文件/目录的默认权限裁剪机制——即用 incoming chmod 显式覆盖默认 umask 行为。
明确 uid 和 gid 的作用
uid 和 gid 决定 rsync 守护进程以哪个用户/组身份执行文件操作。这直接影响:
- 同步后文件的属主和属组(例如设为
uid = www-data,所有同步进来的文件属主就是www-data) - 能否写入目标路径(需该用户对
path目录有写权限) - 后续
incoming chmod是否生效(只有守护进程有权限才能修改刚创建文件的权限)
用 incoming chmod 控制权限上限
在模块定义内添加 incoming chmod,可强制重设同步进来文件和目录的权限,这是限制“最高权限”的核心手段:
-
Du=r,Dg=r,Fu=rw,Fgo=r:目录所有者可读、组可读;文件所有者可读写、组和其他人只读 -
Du=rwx,Dg=rx,Do=,Fu=rw,Fg=r,Fo=:更精细控制,禁止“其他”用户任何权限 - 符号规则:
D开头管目录,F开头管文件;u/g/o分别代表所有者、组、其他人;=是赋值(不是叠加)
⚠️ 注意:该选项仅在客户端使用 --perms 或服务端设 strict modes = yes 时才被尊重;且要求 rsync 守护进程有权限修改权限(即不能运行在无权 chmod 的用户下,如 nobody)。
配合 umask 实现更稳妥的权限约束
虽然 incoming chmod 是显式控制,但底层仍受进程 umask 影响。建议在配置中显式设置 umask(通过启动脚本或 systemd unit),或确保 uid 对应用户的默认 umask 合理(如 0022 或 0002)。例如:
- 若
uid = www-data,检查/etc/passwd中该用户登录 shell 对应的 umask(或通过su -c 'umask' www-data查看) - 避免依赖默认 umask,优先用
incoming chmod做最终裁决
必须确保服务端有权限修改权限
如果 rsync 进程以 uid = nobody 运行,它通常无法更改自己创建文件的权限(尤其当目标目录属主不是 nobody 时)。因此:
- 不要用
nobody或低权限用户做uid/gid,除非你明确接受权限继承不可控 - 推荐新建专用用户(如
rsync),并赋予其对同步目录的完整控制权:chown -R rsync:rsync /sync/path - 启动前验证:
sudo -u rsync touch /sync/path/test && sudo -u rsync chmod 600 /sync/path/test











