我目前正在从 Ubuntu 20.04 迁移到 Fedora 34。到目前为止,以下备份脚本运行良好:
rsync \
-avixXEH \
--stats \
--delete \
--numeric-ids \
--log-file="$LOG_FILE" \
--link-dest "$LATEST" \
--exclude '/some/exclude' \
admin@nas:/{a,b,c} \ # source is remote nas (via ssh)
"$TARGET" \ # $TARGET is ext. USB disk on fedora OS desktop
不幸的是,在 Fedora 上,每个复制的路径现在都会导致警告,污染日志:
rsync_xal_set:lremovexattr(“/my/path/file.zPXUj1”,“security.selinux”)失败:权限被拒绝(13)
研究
这似乎是 rsync 想要保留/删除扩展属性 ( -X
) 和 SELinux 的问题。
最近报价来自红帽的 Michal Ruprich:
RHEL5 中已通过抑制错误消息“修复”了此问题,使其不会中断正在运行的系统。 [...]
“当源文件中的扩展属性已被删除时,rsync-2.6 不会删除目标文件的扩展属性。我们可以称其为 bug。
rsync-3.0 正确尝试删除已擦除的扩展属性。
如果目标系统上存在 selinux,则 rsync 无法删除文件的安全上下文,并输出上述错误。因此,除了信息性错误消息之外,2.6 和 3.0 的行为是相同的。”
使用rsync
3.2.3
非 SELinux 源,我的解释是 - 否则请纠正我:
使用此安全功能将文件从没有 SELinux 的源复制到目标将被解释为删除扩展"security.selinux"
文件属性。rsync
由于 SELinux 对目标的安全限制,无法将其删除。
这就引出了一个问题:
如何抑制这些警告?
我仍然想用-X
and复制扩展属性不是暂时禁用完整的 SELinux正如这里所建议的。还,绊倒了另一种建议setsebool -P rsync_full_access 1
- 不确定它到底做了什么。
仅针对这种特殊情况从根本上解决问题确实会很好:给定 USB 磁盘挂载点/run/media/user/<SOME-UID>
,是否有某种方法可以在 SELinux 中仅针对此路径或类似路径授予必要的权限?
提前致谢
答案1
经过更多研究和发现这个过时的回应,看来这个选项修复了它:
--filter='-x security.selinux'
据该男子称:
--xattrs, -X
[...]
The above name filtering can be overridden by using one or
more filter options with the x modifier. When you specify
an xattr-affecting filter rule, rsync requires that you do
your own system/user filtering, as well as any additional
filtering for what xattr names are copied and what names
are allowed to be deleted. For example, to skip the
system namespace, you could specify:
--filter='-x system.*'
例子:
rsync -aHAXX \
--filter='-x security.selinux' \
--numeric-ids \
--no-inc-recursive \
--delete \
--exclude={"/lost+found"} \
--info=progress2 \
source \
target