![如何通过 rsync 备份到远程计算机,同时保留权限和所有权?](https://linux22.com/image/25506/%E5%A6%82%E4%BD%95%E9%80%9A%E8%BF%87%20rsync%20%E5%A4%87%E4%BB%BD%E5%88%B0%E8%BF%9C%E7%A8%8B%E8%AE%A1%E7%AE%97%E6%9C%BA%EF%BC%8C%E5%90%8C%E6%97%B6%E4%BF%9D%E7%95%99%E6%9D%83%E9%99%90%E5%92%8C%E6%89%80%E6%9C%89%E6%9D%83%EF%BC%9F.png)
A
家里衣柜里的硬盘有2TB。
B
我办公室的硬盘容量是 2TB。
我希望驱动器A
成为我经常使用的驱动器,并且每晚/每周A
都有rsync 镜像。B
我遇到的问题是多个用户在A
.
我的根运行rsync -avz
从A
到$MYNAME:B
Root 当然可以读取 上的所有内容A
,但无权$MYNAME
在 上写入非内容B
。
我该怎么做?我应该有一个无密码的私钥来A
登录吗根在B
?这看起来超级危险。
另外,我更喜欢使用快照但看起来他们要求我使用无密码私钥来访问 root 帐户,这让我非常害怕B
。A
答案1
有一个--fake-super
选项可以存储扩展属性中无法设置的属性(这意味着目标FS必须支持扩展属性)。
要检查扩展属性支持,您可以使用setfattr
rsync 本身来执行此操作。然后它演示了它是如何工作的:
~$ 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-commands
for 的密钥root
。在sshd_config
集合中PermitRootLogin forced-commands-only
。
这提供了相当多的安全性:
- 仅针对 root 强制命令登录,在本例中以只读服务器模式运行 rdiff-backup。
- 仅在从特定源(主机)建立连接时才授权。
- 不允许 TCP 端口和 X 转发。
- 没有分配 pty。
然而,
- Rdiff-backup 中可能存在的安全缺陷可能会被利用。
- 始终将钥匙放在安全的地方。 (例如,将它们从备份中排除!)
答案3
如果它的目的是作为备份(我正在查看标签),而不是作为工作目录的远程副本,那么您应该考虑使用类似的工具dar
还是老好tar
。如果某些重要文件被删除而您没有注意到它,则在每周同步后您将没有机会恢复它。
第二个优点是使用 tar/dar 可以让您保留文件的所有权。
第三个 - 您将节省带宽,因为您可以压缩内容。