如何从一个目录复制 SELinux 上下文并将其应用到另一个目录?
示例使用场景是在默认 /home 路径之外创建新的本地用户,如下所示:
$ sudo useradd -d /websites Tim
这将创建 Tim 的主目录/websites
并为 Tim 设置正确的权限和所有权,但其 SELinux 上下文与其他用户不同,如下所示:
# ls -dZ /websites
drwx------. Tim Tim system_u:object_r:etc_runtime_t:s0 /websites
我想要做的是从其他用户的 /home 目录复制 SELinux 上下文并将其应用到 Tim 的/websites
目录。
其他用户的SELinux上下文是这样的:
# ls -Z /home/
drwx------. Ben Ben unconfined_u:object_r:user_home_dir_t:s0 Ben
drwx------. Bob Bob unconfined_u:object_r:user_home_dir_t:s0 Bob
drwx------. lexy lexy unconfined_u:object_r:user_home_dir_t:s0 lexy
答案1
这可以简单地使用-a
和-e
标志来完成,如下所示:
semanage fcontext -a -e /home/Ben '/websites(/.*)?'
-a
: 添加,
-e
: 等价
之后,您必须运行 Restorecon,如下所示:
restorecon -vvRF /websites
并且将应用新的文件上下文。
-v
:显示文件标签的更改,
-R
:递归,
-F
:强制重置上下文
还可以使用以下命令更改 SELinux 文件上下文:
semanage fcontext -a -t httpd_sys_content_t '/website(/.*)?'
不管怎样,这都会分配新的文件上下文。
-a
: 添加,
-t
: 类型