我想从机器上执行增量备份(对于整个文件系统)。 rsync ,但我想也保留文件的所有权 – 这意味着,可以恢复它。
这是否可以做,而不需要在目标机器上运行rsync作为root(存储备份)?
一些想法…
chown为非root用户? (我想这可能需要noexec来禁止提升。) tar可以存储文件的所有权,虽然让它与rsync或增量备份一起工作会更复杂一些。 能够像普通文件系统一样浏览备份也是很好的。 正如其他答案所述,要直接保留所有权信息,您需要对目标计算机进行根访问。
但是,至less有两种解决方法可以在保留所有权的同时避免超级用户访问:
--fake-super rsync选项。 从手册页: 启用此选项时,rsync通过附加到每个文件的特殊扩展属性保存/恢复特权属性来模拟超级用户活动(根据需要)
这意味着所有权不是直接保留在传统的Unix风格,而是所有权信息存储在一个特殊的扩展属性(即:附加到文件的一种“标签”)。 恢复时, rsync可以使用这个EA /标签正确重build原始文件的所有者。
getfacl实用程序保留它们。 例如,发出getfacl -R MNTPOINT > acls.txt可以将所有权(和ACL)信息有效地保存在文本文件中,以后可以使用setfacl --restore命令恢复这些信息。 如果我是你,我会把备份放在Docker容器中的一个卷上。 这样,你可以把它放在一个很好的限制,避免安全风险,但仍然作为根运行,所以它需要做的事情。
那么,基本上你已经知道了答案:不,你不能。
这是unix的基础知识以及类似的文件系统权限(这似乎是你的环境):对于没有权限或所有权的文件,你不能做太多的事情。 所以如果你想复制包含很多根文件的“整个文件系统”,你必须在源系统和目标系统上都是超级用户。
我说你知道答案,因为你已经build议使用其他工具,如焦油,虚拟机等,然后不是“与rsync保存”。 希望欺骗文件系统不是一件容易的事,否则我们甚至没有一个基本的安全级别。
在目标文件系统上,rsync可以接收具有“隐藏”内部详细权限的tar文件,但是可以
– 你仍然必须是根,以解压他们与相应的权限 – 鉴于他们包括根文件,
– rsync没有做任何增加这样的焦油球。
另一方面,如果您准备configuration文件的tar文件,它不会很繁重,您可以通过rsync或FTP在任何备份系统上发送这些文件。
另外,如果只保存用户的数据,而且它们属于一个普通的组(比如FTP用户组),这显然不是root用户,那么你可以用这个组id来rsync整个文件夹集合,而不是在任一系统上都是根。
如果你这样做,确保你使用的任何用户和组都存在,并且在两个系统上都是相同的(名字/号码),否则你可能会感到惊讶。
当然,整个事情看起来并不像专业解决scheme。 而且您还需要准备紧急恢复程序以及如何select要恢复的正确版本等。
你应该考虑把文件放在某种“容器”中,这样你可以打包所有文件,传输文件,不会丢失任何元数据,而不是像rsync一样复制所有的文件。
你有没有考虑过“焦油”? 我知道tar是rsync的对立面:它不是增量式的,它不会将数据传输到任何地方等等。
但是,它在保留所有权,权限,ACL,修改时间等方面非常出色。 你可以制作一个tar文件,把它复制到一台甚至不理解Unix文件许可方式(即Windows,TOPS-20,VAX / VMS)的机器上,然后把它复制回Unix主机,解开它,并获得它原来的所有权限等。
有一个FUSE文件系统将挂载(只读)tar文件 。
当然,你会失去增加副本和其他function,使rsync这样一个优秀的工具。 然而,Unix世界在rsync被发明之前使用了tar超过20年,并且在某些情况下非常有效。
显然要从目的地获取“根”文件,您需要root访问权限。 但是,有很多方法来拧你的系统。
1)你可以允许rsync在没有密码的情况下使用sudo 2)你可以使用setuid来rsync,以便它可以访问根文件,而备份orchestrator是普通用户而不是root用户。 3)使用rssh来限制所有上述的安全风险