![rsync 到没有与本地服务器相同用户设置的远程服务器会产生权限错误](https://linux22.com/image/550092/rsync%20%E5%88%B0%E6%B2%A1%E6%9C%89%E4%B8%8E%E6%9C%AC%E5%9C%B0%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9B%B8%E5%90%8C%E7%94%A8%E6%88%B7%E8%AE%BE%E7%BD%AE%E7%9A%84%E8%BF%9C%E7%A8%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BC%9A%E4%BA%A7%E7%94%9F%E6%9D%83%E9%99%90%E9%94%99%E8%AF%AF.png)
我正在设置将基于 Linux 的 Web 服务器备份到运行 FreeBSD 的 NAS。我在 FreeBSD 机上创建了一个备份用户,并使用以下命令在本地(Web 服务器)机上以 root 身份运行 rsync:
rsync-avz / hsphere /[电子邮件保护]:/mnt/tank/web_backup/web01.webhost.net
它对所有由 root 拥有的目录都运行良好,但是当它开始备份普通用户拥有的目录时,我收到权限被拒绝错误。
rsync:recv_generator:mkdir“/mnt/tank/web_backup/web01.webhost.net/hsphere/local/home/username/username.com”失败:权限被拒绝(13)
我猜这是因为“-a”试图保留原始文件的所有权,而这些用户在远程服务器上不存在,所以它拒绝了它。我尝试运行不带 -o -g 和 -p 标志的 rsync,以为这样可以解决这个问题,但我得到了同样的错误。
rsync -rltDz /hsphere/[电子邮件保护]:/mnt/tank/web_backup/web01.webhost.net
如果我使用 root 身份对远程 NAS 进行 rsync,它确实会成功,但如果可以避免,我宁愿不在 NAS 上使用 root 身份,因为这会造成安全漏洞。freebsd 机器上的“backup_user”属于 wheel 组,这应该会给他足够的权限。
关于如何进行有什么建议吗?
答案1
您可能想尝试--fake-super
。从rsync
手册页:
--fake-super
启用此选项后,rsync 会通过附加到每个文件的特殊扩展属性(根据需要)保存/恢复特权属性来模拟超级用户活动。这包括文件的所有者和组(如果不是默认组)、文件的设备信息(设备和特殊文件创建为空文本文件)以及我们不允许在实际文件上设置的任何权限位(例如,实际文件为安全起见获得 us、gs、ot)或限制所有者访问权限的权限位(因为真正的超级用户始终可以访问/更改文件,因此我们创建的文件始终可以由创建用户访问/更改)。
就您而言,由于您想要--fake-super
在远程端使用,因此您需要通过以下方式调用它--rsync-path
,例如:
rsync -avz --rsync-path='rsync --fake-super' /source/ backupuser@remote:/dest/
从备份恢复时,您还需要确保--fake-super
在存储备份的系统上始终有效。