我正在家用服务器上使用 rsnapshot 通过 SSH 备份我的 MacBook。一切都已配置并正常运行,但我遇到了权限问题。
因为我的 MacBook 和家庭服务器上有不同的用户,所以我的家庭服务器上的备份文件保存如下:
-rw------- 16 501 dialout 1650 Jun 24 21:09 .bash_history
...
我猜想 501 是与我的 MacBook Pro 上的用户关联的 ID,由于该用户不存在于我的家庭服务器上,因此我只是看到用户 ID。我不确定拨出组。
这些权限意味着当我通过网络共享浏览备份文件时,我会遇到权限问题。
是否可以将备份文件保存在我的家庭服务器用户和组下,而不是保留我的 MacBook 用户和组?如果是这样,会有什么影响吗?
答案1
这听起来就像是正在发生的事情:
- rsnapshot 正在将数字 uid 和 gid 从你的 mac 复制到你的服务器
- 你的 Mac 账户和服务器账户的 UID 不同
- 复制文件的权限不允许你的服务器 uid 访问它们
对此有几种可能的解决方案。
解决方案 1:使用 rsync--usermap
和--groupmap
rsnapshot 使用 rsync 来完成大部分工作,并且 rsync 的最新版本具有映射 uid 和 gid 的选项。我不知道 rsnapshot 是否可以配置为将这些选项传递给 rsync,但如果可以的话,这将解决您的问题。
解决方案 2:同步您的用户和组 ID。
如果您的工作站和服务器运行相同的操作系统,这可能是可行的,但如果它们的配置已经不同,则可能不值得更改。如果它们运行不同的操作系统,它们可能具有不兼容的 uid 分配方案,尽管您可能只同步用户的 uid。(除非其中一个是 Windows,否则根本不可能。)更改帐户 uid 不会更改任何文件的所有者 id,因此您必须将其作为单独的步骤执行。更改用户的 uid 应该不是什么大问题,但更改服务的 uid 可能会很麻烦。
解决方案 3:分离复制步骤
如果在运行 rsnapshot 之前将所有内容作为单独的步骤复制到服务器,则可以使用使用字符串名称而不是数字 uid 的程序进行复制。这将为任何匹配的用户名转换 uid。 齐奏这是我所知道的唯一一款双向文件同步工具,它可以做到这一点;它包含在大多数 Linux 发行版中(但默认情况下未安装),并且可以通过以下方式在 MacOS 上使用麦金塔或者作为应用程序包. 如果您使用复制文件SCP(除 Windows 外,几乎所有操作系统都默认包含并安装),所有者将是登录到接收系统的用户。
解决方案 3:添加 uid/gid 转换步骤
rsnapshot 完成后,您可以更改 uid/gid。如果您只关心一个或两个 uid,则可以采用以下解决方案这个答案:
find /your/rsynced/path -user 1000 -exec chown 505 {} \;
find /your/rsynced/path -user 1001 -exec chown 700 {} \;
这将修复您的 uid/gid,但会破坏 rsnapshots 对未更改文件的硬链接 - rsnapshot 不会对任何不同的文件进行硬链接,包括对元数据的更改。它不会对具有不同所有者的文件进行硬链接,甚至不会对具有不同时间戳的文件进行硬链接。(这是 rsnapshot 使用但不修改的 rsync 行为。)
当然,您可以添加另一个步骤来重新进行硬链接。