控制 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 fcontextrestoreconchcon 命令管理文件的 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
相关推荐
sulikey25 分钟前
Linux Core Dump 完全指南:从原理到实战的崩溃调试手册。什么是core dump?程序报错core dumped怎么办?
linux·服务器·操作系统·调试·coredump
Lifangyun_WD29 分钟前
第一次租 GPU 服务器怎么开始?镜像、SSH、数据存储和停机前要做什么
服务器·云计算·gpu算力·gpu算力租赁
众壹新能源科技36 分钟前
功率预测误差考核怎么降?从气象源到上报口径的排查清单
运维·人工智能·自动化
DevLoom_2 小时前
SD卡插电脑提示:驱动器中的磁盘未被格式化?恢复数据正确处理步骤
运维·服务器·电脑
Orange_sparkle2 小时前
从 Docker 到 Doris:建立后端基础设施全景图
运维·docker·ai·容器·claude code
2601_962128263 小时前
Nginx目录结构
运维·nginx
MayZork3 小时前
Windows 与 Linux 下 vcpkg 的安装部署指南
linux·运维·windows
yyuuuzz3 小时前
记一次 VPS 性能排查:共享 CPU 突发额度导致的限流
运维·服务器·人工智能
冰雪青松3 小时前
Ubuntu 运维命令大全:从入门到精通的实战参考手册
运维·服务器·ubuntu