mv -Z
应用默认的 selinux 上下文。它与 的所有其他调用是否不同mv
,并且单独处理移动目录中的所有文件?
答案1
是的。
$ mkdir a
$ touch a/b
$ ls -Z -d a a/b
unconfined_u:object_r:user_home_t:s0 a
unconfined_u:object_r:user_home_t:s0 a/b
$ strace -f mv -Z a ~/.local/share/Trash/files
...
open("/home/alan/.local/share/Trash/files/a/b", O_RDONLY|O_NOFOLLOW) = 3
...
fgetxattr(3, "security.selinux", "unconfined_u:object_r:user_home_t:s0", 255) = 37
fsetxattr(3, "security.selinux", "unconfined_u:object_r:data_home_t:s0", 37, 0) = 0
...
$ cd ~/.local/share/Trash/files
$ ls -Zd a a/b
unconfined_u:object_r:data_home_t:s0 a
unconfined_u:object_r:data_home_t:s0 a/b
这也带来了在单个文件系统中移动目录可能会中途失败的可能性。即由于更改标签时磁盘空间不足。由于重新标记是第二步,因此这种影响会减轻。初始移动操作仍然由单个atomic执行rename
。这意味着标签会不一致,但文件在其他方面都将保持一致。一旦空间可用,修复标签应该很简单。