我正在为网络上的一些计算机设置自动备份作业。有一台服务器每天都会运行rsync
命令来备份其他每台计算机。我希望运行该作业的用户rsync
能够读取每个人的主目录(包括加密的 SSH 密钥等敏感文件),但无法在系统上的任何位置进行写入(除了/tmp
)。我还想防止普通用户读取彼此的主目录,尤其是敏感部分。
我的第一个想法是创建一个仅由备份用户组成的组。然后我将用户chgrp
的文件保存到备份组中。由于自己不是成员,他们无法读取彼此的文件,但备份用户可以读取他们想要备份的所有内容。
但是,用户不能chgrp
加入他们不属于的组。我无法将它们添加到组中,因为这将使用户能够读取彼此的主目录。
NOPASSWD
我曾考虑过在文件中为备份用户提供一个条目sudoers
,允许他仅以 root 身份运行rsync
所需的确切命令,但如果我没有正确设置它(如果有一种方法可以创建符号链接),这似乎可能是灾难性的例如,to/etc/sudoers
和 to get命令以将其用作目的地)。rsync
答案1
TL,DR:以 root 身份运行备份。通过sudo授权精确命令并没有什么问题rsync
,只要你仔细检查参数即可;错误的是允许调用者指定参数。
如果您希望备份用户能够读取文件,请参阅允许用户读取其他用户的主目录这个想法是创建一个绑定文件系统该用户可以读取所有内容的文件系统视图。
但文件级别并不是解决这个特定问题的最佳级别。备份的问题在于rsync
它们不一致:如果用户更改file1
然后 file2
当备份正在进行时,但备份到达file2
之前file1
,则备份将包含旧版本file2
和新版本file1
。如果file2
是新版本file1
并被file1
删除,则意味着该文件根本不会出现在备份中,这显然是不好的。
这个问题的解决方案是创建一个快照文件系统的文件系统,并从中运行备份。
根据您的快照技术,可能有一种方法可以确保用户可以读取快照。如果没有,请挂载快照并使用基于通用文件系统的解决方案。即使有,rsync 仍然存在问题,因为如果您以普通用户身份运行它,它将无法备份所有权。因此,如果您要备份多个用户的目录,您需要以 root 身份运行备份。
答案2
另一种(有点复杂;))方法是对相关分区进行只读视图(如果是原始分区kpartx -r
,则如果是lvm(首选!),则为lvm快照,如果btrfa / zfs /无论具有内置快照其功能(首选以及))并授予备份用户对此的只读权限。然后在 kvm 中准备一个小型 linux,它会自动将此分区(通过虚拟 HDD 提供)备份到目的地(如果使用 qemu/kvm,则由 p9 又名共享文件夹提供)。
答案3
只有一个用户,即root
可以读取系统上的任何文件。这就是为什么任何商业备份软件都需要root权限才能运行的原因。有很多不同的方法可以做到这一点,但如果您要使用 rsync,我建议您创建一个 root 等效帐户,将 shell 设置为类似/sbin/nologin
或等效的帐户,并让该用户使用cron
.深入研究sudoers
会让事情变得比必要的更加复杂,并且会带来一系列全新的问题。