控制 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
相关推荐
你看我名字1 小时前
云计算工程师技能树:从 Linux 基础到云平台架构能力
linux·架构·云计算
广州灵眸科技有限公司8 小时前
4G 模组开机自连 systemd 服务方案:基于灵眸科技EAI1106--Core-T
运维·服务器·科技
天远数科9 小时前
零信任架构实战:基于天远企业股权变更构建自动化商业银行对公授信存续期股权异动与资产抽逃预警网关
运维·人工智能·架构·自动化
qq_401700419 小时前
Linux设备树详解
linux·运维·服务器
云梦谭10 小时前
让 Linux 主动连接 Windows:配置 Windows 11 SSH 服务端
linux·windows·ssh
奇树谦10 小时前
Windows CMD 下 mc 运维指南:SeaweedFS 安装验收与 MinIO 数据迁移
运维·windows
刚入门的大一新生10 小时前
Linux-信号
linux·运维·服务器
车软学堂10 小时前
CANoe自动化:跑起第一个测试用例
运维·车载系统·自动化·汽车·测试用例
L02082412 小时前
Kubernetes Ingress|CNI 网络模型|Calico 网络策略|Pod 调度器完整实战教程
运维·网络·云原生·容器·kubernetes