如何通过 rsync 备份到远程计算机,同时保留权限和所有权?

如何通过 rsync 备份到远程计算机,同时保留权限和所有权?

A家里衣柜里的硬盘有2TB。

B我办公室的硬盘容量是 2TB。

我希望驱动器A成为我经常使用的驱动器,并且每晚/每周A都有rsync 镜像。B

我遇到的问题是多个用户在A.

我的根运行rsync -avzA$MYNAME:B

Root 当然可以读取 上的所有内容A,但无权$MYNAME在 上写入非内容B

我该怎么做?我应该有一个无密码的私钥来A登录吗B?这看起来超级危险。

另外,我更喜欢使用快照但看起来他们要求我使用无密码私钥来访问 root 帐户,这让我非常害怕BA

答案1

有一个--fake-super选项可以存储扩展属性中无法设置的属性(这意味着目标FS必须支持扩展属性)。

要检查扩展属性支持,您可以使用setfattrrsync 本身来执行此操作。然后它演示了它是如何工作的:

~$ rsync --fake-super /bin/ls .
~$ getfattr -dm- ./ls
# file: ./ls
user.rsync.%stat="100755 0,0 0:0"

请注意,-a 并不能保留所有内容,您可能需要 -H、-A、-X、--numeric-ids。

答案2

我知道您的问题是关于 rsync,但这可能对备份有所帮助。这大致就是我进行异地备份的方式。

基于 Rsync 的替代 Rdiff-backup

Rdiff备份也许值得一试。

它在水下使用rsync(或librsync) 并处理已经为您提供的有关权限和属性的所有魔法,即使目标文件系统不支持它。这是可能的,因为它将以其自己的格式存储它并且也可以跨平台工作。

作为奖励,它还提供差异备份,因此您可以“回到过去”。但是,由于差异备份的性质,rdiff-backup 可能运行速度较慢。

关于 SSH 密钥和安全性

我该怎么做?我应该在 A 上有一个无密码私钥来登录 B 上的 root 吗?这看起来超级危险。

如果你对此感到害怕,那么来到这里是明智之举,以下内容可能会有所帮助。在一行中添加您要备份的计算机上配置的公钥 ( /root/.ssh/authorized_keys):

command="rdiff-backup --server --restrict-read-only /",from="hostname.or.ip.address.to.allow",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAA.... and the rest of your key in the same line.

这是使用 RSA 密钥的示例。根据您的需要更改它。

(可选)将 SSH 守护程序配置为仅接受带有forced-commandsfor 的密钥root。在sshd_config集合中PermitRootLogin forced-commands-only

这提供了相当多的安全性:

  • 仅针对 root 强制命令登录,在本例中以只读服务器模式运行 rdiff-backup。
  • 仅在从特定源(主机)建立连接时才授权。
  • 不允许 TCP 端口和 X 转发。
  • 没有分配 pty。

然而,

  • Rdiff-backup 中可能存在的安全缺陷可能会被利用。
  • 始终将钥匙放在安全的地方。 (例如,将它们从备份中排除!)

答案3

如果它的目的是作为备份(我正在查看标签),而不是作为工作目录的远程副本,那么您应该考虑使用类似的工具dar还是老好tar。如果某些重要文件被删除而您没有注意到它,则在每周同步后您将没有机会恢复它。

第二个优点是使用 tar/dar 可以让您保留文件的所有权。

第三个 - 您将节省带宽,因为您可以压缩内容。

相关内容