rsync 到没有与本地服务器相同用户设置的远程服务器会产生权限错误

rsync 到没有与本地服务器相同用户设置的远程服务器会产生权限错误

我正在设置将基于 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在存储备份的系统上始终有效。

相关内容