控制 SELinux 文件上下文

初始 SELinux 上下文

所有资源(如进程、文件和端口)都标有 SELinux 上下文。SELinux 在 /etc/selinux/targeted/contexts/files/ 目录中维护基于文件的文件标签策略数据库。新文件在文件名与现有标签策略匹配时获得默认标签。

当新文件的名称与现有标签策略不匹配时,该文件将继承与父目录相同的标签。使用标签继承时,所有文件在创建时始终都带有标签,无论文件是否存在显式策略。

在具有现有标签策略的默认位置创建文件时,或者存在针对自定义位置的策略时,新文件将使用正确的 SELinux 上下文进行标记。但是,如果在没有现有标签策略的情况下在意外位置创建文件,则继承的标签可能不适合新文件的预期用途。

此外,将文件复制到新位置可能会导致该文件的 SELinux 上下文发生变化,新的上下文由新位置的标签策略决定,或者从父目录继承(如果不存在策略)。在复制期间可以保持文件的 SELinux 上下文,以保留为文件的原始位置确定的上下文标签。例如,在复制过程中,cp -p 命令会尽可能保留所有文件属性,而 cp --preserve=context 命令则仅保留 SELinux 上下文。

以下示例演示了此过程的工作方式。

在 /tmp 目录中创建两个文件。两个文件都获得 user_tmp_t 上下文类型。

将第一个文件移动到 /var/www/html 目录,再将第二个文件复制到这个目录。

  • 移动的文件保留从原始 /tmp 目录标记的文件上下文。
  • 复制的文件具有新的索引节点,并从目标 /var/www/html 目录继承 SELinux 上下文。

ls -Z 命令显示文件的 SELinux 上下文。观察在 /tmp 目录中创建的文件的标签。

bash 复制代码
[root@host ~]# touch /tmp/file1 /tmp/file2
[root@host ~]# ls -Z /tmp/file*
unconfined_u:object_r:user_tmp_t:s0 /tmp/file1
unconfined_u:object_r:user_tmp_t:s0 /tmp/file2

ls -Zd 命令显示指定目录的 SELinux 上下文。注意 /var/www/html 目录的标签以及其中的文件。

bash 复制代码
[root@host ~]# ls -Zd /var/www/html/
system_u:object_r:httpd_sys_content_t:s0 /var/www/html/
[root@host ~]# ls -Z /var/www/html/index.html
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/index.html

将一个文件从 /tmp 目录移至 /var/www/html 目录。将另一个文件复制到同一目录中。注意每个文件生成的标签。

bash 复制代码
[root@host ~]# mv /tmp/file1 /var/www/html/
[root@host ~]# cp /tmp/file2 /var/www/html/
[root@host ~]# ls -Z /var/www/html/file*
unconfined_u:object_r:user_tmp_t:s0 /var/www/html/file1
unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/file2

移动的文件保留其原始标签,复制的文件则继承目标目录标签。unconfined_u 是 SELinux 用户角色,object_r 是 SELinux 角色,而 s0 则是(最低可能的)敏感度级别。高级 SELinux 配置和功能使用这些值。

更改 SELinux 上下文

您可以使用 semanage fcontext、restorecon 和 chcon 命令管理文件的 SELinux 上下文。

为文件更改上下文的建议方法是,使用 semanage fcontext 命令创建文件上下文策略,然后使用 restorecon 命令将策略中指定的上下文应用到文件。此方法确保您可以在必要时使用 restorecon 命令将文件重新标记为正确的上下文。这种方法的优点是您不需要记住上下文应该是什么,而且您可以更正一组文件的上下文。

chcon 命令直接在文件上更改 SELinux 上下文,不引用系统的 SELinux 策略。虽然 chcon 可用于测试和调试,但使用此方法手动更改上下文是暂时的。虽然您可以手动更改的文件上下文在重启后仍然有效,但如果您运行 restorecon 来重新标记文件系统的内容,则上下文可能会被替换掉。

以下示例使用从 / 父目录继承的 default_t SELinux 上下文来创建目录。

bash 复制代码
[root@host ~]# mkdir /virtual
[root@host ~]# ls -Zd /virtual
unconfined_u:object_r:default_t:s0 /virtual

chcon 命令将 /virtual 目录的文件上下文设置为 httpd_sys_content_t 类型。

bash 复制代码
[root@host ~]# chcon -t httpd_sys_content_t /virtual
[root@host ~]# ls -Zd /virtual
unconfined_u:object_r:httpd_sys_content_t:s0 /virtual

运行 restorecon 命令可将上下文重置为默认值 default_t。注意 Relabeled 消息。

bash 复制代码
[root@host ~]# restorecon -v /virtual
Relabeled /virtual from unconfined_u:object_r:httpd_sys_content_t:s0 to
 unconfined_u:object_r:default_t:s0
[root@host ~]# ls -Zd /virtual
unconfined_u:object_r:default_t:s0 /virtual
相关推荐
在角落发呆7 小时前
工具配置备份步骤:从手动备份到自动化方案
运维·windows·自动化
_upupup8 小时前
Linux的调试工具——gdb/cgdb
linux·服务器
百度一下吧8 小时前
Nginx 使用手册:从安装配置到实战部署
运维·nginx
JeJe同学8 小时前
Docker镜像导入、容器启动
linux·运维·docker
Jason_zhao_MR8 小时前
Linux与实时控制如何兼得
linux·嵌入式硬件·机器人·工业控制
回眸&啤酒鸭8 小时前
【回眸】自动化白盒测试落地实战指南
运维·自动化·log4j
闲云野鹤在人间9 小时前
MySQL|从理论、安装、备份到主从复制、MHA高可用详解
linux·运维·数据库·mysql·云计算
一个风轻云淡10 小时前
GCC 和 GDB命令简单解读
java·linux·前端
H.莓飛10 小时前
【数据结构】二叉树_OJ题
linux·开发语言·数据结构·算法
资料库0110 小时前
Linux 8个常见运维故障排查
java·linux·运维