我们可以使用 rsyncd.conf 来限制 ssh 上的 rsync 吗?

我们可以使用 rsyncd.conf 来限制 ssh 上的 rsync 吗?

我查看了受限的 rsync 脚本,同步,这是在 中提到的man rsync。基本上,客户端rsync命令似乎将其所有选项传递给通过rsyncSSH 运行的远程命令。 rrsync是一个 200 多行 Perl 脚本,人们使用它来限制服务器允许的路径和选项。我对此的第一反应是“啊”。rsync文档故意模糊地说明该选项的实际使用方式,这无济于事--server

我还发现 2016 年的错误报告显示巨大的安全漏洞rrsync。它仍然没有修复。

:-(

我更愿意使用定义合法目标和选项rsyncd.conf。同时,我想使用 SSH 加密和身份验证来保护我与 rsync 服务器的连接。

看起来就像我可以使用~/.authorized_keys专用 SSH 密钥以及限制它的选项来完成此操作,例如command="/usr/bin/rsync --server --daemon --config=./rsyncd.conf .",restrict.然后我可以rsync使用守护程序语法运行我的客户端命令:rsync -e "ssh" "$SOURCE_PATH" "$SSH_HOST"::"$RSYNC_MODULE"/"$DEST_PATH"

(如果您不使用 SSH 密钥,您可以使用专用用户、/etc/sshd_configMatch 和 ForceCommand 执行相同的操作。但目前还没有相当于毯子的功能restrict,您必须单独禁用所有权限)。

这工作可靠吗?

我测试了几个不同的选项。即使我向客户端命令添加选项(rsync例如.rsync --server --daemon .-vlogDtprze.iLsf --numeric-ids

问题:我可以依赖上述内容吗?或者相反,是否存在客户端可能需要使用一组不同的选项来启动守护程序服务器的情况?

第三个参数 - .- 是否设置为其他值?它有什么作用??

答案1

是的,我认为这是一个相当安全的假设。

这是它工作的自然方式。尽管他们避免记录这些细节,但在未来的版本中它很可能会继续以同样的方式工作。的命令行选项rsync --server实际上是网络协议的一部分,并且通常是向后兼容的。

  1. 源代码
  2. 《文献综述》(几条推荐,无差评)

1. 源代码

源代码似乎相当清楚,在“daemon_over_rsh”模式下,它总是使用命令行选项运行服务器端--server --daemon .,而不是其他任何东西。

(我希望有一个选项可以运行不同的rsync,例如/home/alan/rsync-custom-build/rsync。但你已经知道你是否正在这样做)。

选项.c

2390 void server_options(char **args, int *argc_p)
2391 {
2392         static char argstr[64];
2393         int ac = *argc_p;
2394         uchar where;
2395         char *arg;
2396         int i, x;
2397 
2398         /* This should always remain first on the server's command-line. */
2399         args[ac++] = "--server";
2400 
2401         if (daemon_over_rsh > 0) {
2402                 args[ac++] = "--daemon";
2403                 *argc_p = ac;
2404                 /* if we're passing --daemon, we're done */
2405                 return;
2406         }

主程序

 512                 server_options(args,&argc);
 513 
 514                 if (argc >= MAX_ARGS - 2)
 515                         goto arg_overflow;
 516         }
 517 
 518         args[argc++] = ".";
 519 
 520         if (!daemon_over_rsh) {
 ...
 534         }
 535 
 536         args[argc] = NULL;

第三个参数 - .- 是否设置为其他值?它有什么作用??

不,它没有任何作用。

至少需要一个非选项参数。如果没有它,rsync将打印--help消息并返回退出代码 1。虽然当我运行时rsync --server --daemon,帮助消息被写入系统日志而不是标准错误(即终端)。

尽管这是必需的,但 的非选项参数将rsync --server --daemon被完全忽略。

1661         if (argc < 1) {
1662                 usage(FERROR);
1663                 exit_cleanup(RERR_SYNTAX);
1664         }
1665 
1666         if (am_server) {
1667                 set_nonblocking(STDIN_FILENO);
1668                 set_nonblocking(STDOUT_FILENO);
1669                 if (am_daemon)
1670                         return start_daemon(STDIN_FILENO, STDOUT_FILENO);
1671                 start_server(STDIN_FILENO, STDOUT_FILENO, argc, argv);
1672         }

2。文献综述”

谷歌搜索词:

  • rsync 守护进程服务器(sshd_config forcecommand)或(authorized_keys 命令)
  • 通过 ssh 的 rsync 守护进程模式

我扫描了结果的第一页。我发现了一些积极的建议,并且没有关于这个具体问题的负面反馈。缺乏负面反馈并不是强有力的证据。对我来说,安全漏洞rrsync似乎是一个更重要的问题,但我只是因为搜索““rrsync”munge links”才发现它。谷歌没有找到任何外部引用,只找到了错误报告本身。

相关内容