将 rsync(或 bash 脚本)限制到一个目录

sno*_*gon 6 bash shell rsync permissions macos

由于错误的目标参数导致 rsync 删除错误文件的严重事故后,我想限制 rsync(或运行它的 bash 脚本)只能删除/修改某个目录下的文件。我想到了:

  1. 在仅具有该目录权限的用户下创建并运行 rsync/script。这里的问题是:如何动态使用/创建这样的用户?(这是构建脚本的一部分,应该为其他用户“运行”)。

  2. 验证提供给 rsync 的目标路径是否在某个目录下。方向好像是在使用test命令,但是我想不通怎么正确使用,也不是那么安全,因为path参数的测试还是会与实际运行的path参数不同步,所以我认为(1)更健壮。

小智 5

使用 pubkey auth 时,您可以借助authorized_keys 文件和 rrsync(rsync 的一部分)强制执行此类行为。它通常位于 rsync 文档目录中,例如在 Debian 盒子上:/usr/share/doc/rsync/scripts/rrsync.gz

在目标机器上,您需要:

  • 将脚本提取到某个位置,例如“ /usr/bin”或“ ~/bin
  • ~/.ssh/authorized_keys在“ ”中设置授权密钥
  • 在密钥前面添加命令选项集:

    command="/usr/bin/rrsync /foo/bar/baz" ssh-rsa AAAA[...]

当与 rootdir 设置进行 rsync 时,不要忘记修改目标路径以相对于给定的 rootdir。


mxl*_*ian 0

如果您可以在目标上启动 rsync 守护程序,则可以预定义允许访问哪些目录(称为模块)。只需编辑 /etc/rsyncd.conf 并添加如下内容:

[mydirectory]
        path = /tmp
Run Code Online (Sandbox Code Playgroud)

现在您可以使用别名(模块)名称而不是原始目录路径使用 rsync 协议进行传输:

rsync --delete /origin/dir rsync://$DEST_HOST/mydirectory
Run Code Online (Sandbox Code Playgroud)

/mydirectory将被转换为/tmp,如果你拼错mydirectory ,你会得到一个错误而不是弄乱文件。

这可能是最简单的示例,但您还可以配置身份验证和许多其他参数。您可以在这里找到更多信息:

http://linux.die.net/man/5/rsyncd.conf