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

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

在发生一次由于错误的目标参数而导致 rsync 删除错误文件的严重事故后,我想限制 rsync(或运行它的 bash 脚本)只能删除/修改特定目录下的文件。我想到以下任一方法:

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

  2. 验证提供给 rsync 的目标路径是否位于某个目录下。方向似乎是使用命令test,但我不知道如何正确使用它,而且它不太安全,因为路径参数的测试仍然可能与正在运行的实际路径参数不同步,所以我认为 (1) 更可靠。

答案1

使用公钥认证时,您可以借助 authorized_keys 文件和 rrsync(rsync 的一部分)来强制执行此类行为。它通常位于 rsync 文档目录中,以 gzip 格式压缩,例如在 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 进行 rsyncing 时,不要忘记修改目标路径以相对于给定的 rootdir。

答案2

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

[mydirectory]
        path = /tmp

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

rsync --delete /origin/dir rsync://$DEST_HOST/mydirectory

/我的目录将被翻译为/tmp,如果你拼写错误我的目录您将会看到错误,而不是弄乱文件。

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

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

相关内容