rsync 文件 `a`b

Ole*_*nge 22 rsync vulnerability

是的,我知道你在想什么:“到底是谁给他们的文件命名的`a`b?”

但是让我们假设您确实一个名为`a`b(可能是由疯狂的 Mac 用户创建的 - 显然不是您创建的)的文件,并且您想要rsync该文件。显而易见的解决方案:

rsync server:'./`a`b' ./.;
rsync 'server:./`a`b' ./.;
Run Code Online (Sandbox Code Playgroud)

给出:

bash: line 1: a: command not found
rsync: [sender] link_stat "/home/tange/b" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1865) [Receiver=3.2.7]
rsync: [Receiver] write error: Broken pipe (32)
Run Code Online (Sandbox Code Playgroud)

甚至:

rsync server:'./`a`b' ./.;
rsync 'server:./`a`b' ./.;
Run Code Online (Sandbox Code Playgroud)

rsync应该运行什么命令?

bash: line 1: a: command not found
rsync: [sender] link_stat "/home/tange/b" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1865) [Receiver=3.2.7]
rsync: [Receiver] write error: Broken pipe (32)
Run Code Online (Sandbox Code Playgroud)

Chr*_*own 33

手动二分后,这是 rsync 中的一个错误,并通过提交 5c93dedf4538 ("Add backtick to SHELL_CHARS.")修复,它将出现在即将发布的 rsync 3.2.8(尚未发布)中。它被3.2.4 中的提交 6b8db0f6440b (“使用反斜杠转义添加 arg-protection 惯用法”)破坏。

作为缓解措施,存在使用旧 arg 解析行为 ( --old-args) 的选项:

rsync --old-args 'server:./\`a\`b' .
Run Code Online (Sandbox Code Playgroud)

  • 传输文件的完整解决方法 rsync 命令是什么? (2认同)

Ole*_*nge 12

是版本问题。似乎不取决于服务器版本,而是取决于客户端。

v3.2.3 和 v3.2.7 之间出现了一些问题。

好的:

$ rsync-v3.2.3 --rsync-path=rsync-v3.2.7  'server:./\`a\`b' ./.;
$ rsync-v3.2.3 --rsync-path=rsync-v3.2.3  'server:./\`a\`b' ./.;
$ rsync-v3.2.3 --rsync-path=rsync-v3.2.3  server:./"'"'`a`'"'"b ./.;
Run Code Online (Sandbox Code Playgroud)

失败:

$ rsync-v3.2.7 --rsync-path=rsync-v3.2.7  'server:./\`a\`b' ./.;
bash: line 3: a\: command not found
rsync: [sender] link_stat "/home/tange/\b" failed: No such file or directory (2)
$ rsync-v3.2.7 --rsync-path=rsync-v3.2.3  'server:./\`a\`b' ./.;
bash: line 3: a\: command not found
rsync: [sender] link_stat "/home/tange/\b" failed: No such file or directory (2)
$ rsync-v3.2.3 --rsync-path=rsync-v3.2.3  'server:./`a`b' ./.;
bash: line 1: a: command not found
rsync: [sender] link_stat "/home/tange/b" failed: No such file or directory (2)
$ rsync-v3.2.3 --rsync-path=rsync-v3.2.7  'server:./`a`b' ./.;
bash: line 1: a: command not found
rsync: [sender] link_stat "/home/tange/b" failed: No such file or directory (2)
Run Code Online (Sandbox Code Playgroud)

但说真的:这似乎是一场即将发生的灾难,你需要引用`两次。

感谢@dhag 指出这个问题。

不幸的是,它没有回答如何使用 v3.2.7 版本进行传输。