通过 ssh 进行同步,限制对服务器文件系统的访问

通过 ssh 进行同步,限制对服务器文件系统的访问

我想同步(双向)某个文件夹服务器(S)和一个本地机器(L)。在 S 和 L 上,我使用相同的系统 (Ubuntu) 和用户 jan,具有 sudo 权限(即管理员组)。只有使用以下方式才能通过 SSH 访问 S密钥授权

我觉得我可以用unison它来做这件事。我已经创建了一个新密钥对,密码为空。问题是我不想允许无限制访问这个无密码密钥。

(编辑:我想(例如)区分同一个用户的不同 SSH 授权密钥 - 在一种情况下将访问限制为仅一个目录,如果可能的话,仅运行特定命令 - 就像下面的 rrsync 一样。)

我可以使用rsync。它有一个服务器端脚本rrsync,然后您可以限制文件中密钥的访问authorized_keys

command="$HOME/bin/rrsync -ro /home/jan/sync_folder/".

rsync无法处理已删除的文件等。

另一个选项是设置chroot 监狱在服务器上,但我仍然需要能够使用我的第一个密钥自由访问服务器。

我可以创建一个新用户帐户,通过它可以完成同步(并应用 chroot jail + 不包含在管理员组中),但这样我就会丢失有关文件的元信息(所有权、权限)。所有文件都是仅由一个用户拥有(因此所有权不是问题),但有些文件是可执行脚本,有些则不是。

有什么想法可以同步文件夹,同时保证访问安全?我对该工具没有偏好。以上只是我经过一番研究后发现的。

答案1

为什么 rsync 不应该处理已删除的文件?- 删除应该正是这样做的。

实际上有一个问题,没有命令专用键 询问-Ubuntu

答案2

这应该是一条评论,但是有点长。

您需要更好地定义您的问题,然后才能得到合理的答案(而不是猜测)。

如果文件集包含不同用户拥有的文件,则写入端需要以 root 身份运行。这并不要求通道以 root 身份运行。rsync 的混淆源于您需要同时支持文件删除和双向同步。如果文件存在于节点“A”但不存在于节点“B”,这是否意味着它已在节点“B”上被删除或最近在节点“A”上被创建 - 任何在调用之间不保留状态的东西都无法说明这一点。

您可以使用无数的工具来复制文件 - 镜像到本地物理磁盘的 drbd、ssh 文件系统、Andrew 文件系统等等。也许您选择 unison 而不是 ssh 是一种任意限制。不过,如果您只是问在主机之间镜像文件系统的选项是什么,您的问题可能会因为“太宽泛”而被关闭。

我不想允许无限制访问此无密码密钥

您所说的“无限制访问”是什么意思?如上所述,写入端需要以“root”身份运行。您是否想限制 root 在 Unix 系统上可以执行的操作?这是可能的 - 但非常困难。

相关内容