前言 SELinux 是强制访问控制(Mandatory Access Control, MAC)的一种实现,提供了额外的安全层。SELinux 策略定义了用户和进程如何与系统中的文件进行交互。 SELinux fundamentally answers the question: May do to ?, for example: May a web server access files in users’ home directories? SELinux 的相关命令 查看 SELinux 的状态 root@localhost /e/selinux# sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: enforcing Mode from config file: enforcing Policy MLS status: enabled Policy deny_unknown status: allowed Memory protection checking: actual (secure) Max kernel policy version: 33 查看 SELinux 的日志 ausearch 是 Linux 审计框架 (auditd) 中用于查询和检索审计日志的命令行工具,它帮助系统管理员根据特定条件筛选和分析系统事件。 # 先检查下服务是否开启了 systemctl status auditd.service # 查找所有失败的登录尝试 ausearch -m USER_LOGIN -sv no -i # 查找所有成功的登录尝试 ausearch -m USER_LOGIN -sv yes -i # 查看 SELinux 拒绝的操作 ausearch -m AVC,USER_AVC,SELINUX_ERR,USER_SELINUX_ERR -ts today sealert是 SELinux 的策略诊断工具,用于分析和解释 SELinux 审计日志,帮助用户识别安全事件、检查权限问题并提供解决方案建议。 sealert的核心功能是解析 /var/log/audit/audit.log中的 SELinux 拒绝消息(通常是 avc: denied类事件),并以更友好、易懂的方式输出分析结果 root@localhost ~# dnf install setroubleshoot-server^C root@localhost ~# sealert -l "*" 自定义 SELinux 策略 策略简介 来自:Quick start to write a custom SELinux policy - Red Hat Customer Portal SELinux 安全策略是一组 SELinux 规则的集合。策略是 SELinux 的核心组件,由 SELinux 用户空间工具加载到内核中。内核通过使用 SELinux 策略来评估系统中的访问请求。默认情况下,SELinux 会拒绝所有请求,除非这些请求与已加载策略中指定的规则相对应。 每个 SELinux 策略规则描述了一个主体和目标资源之间的交互。 策略规则的一般形式为: <rule type> <subject> <object>:<object class> <permissions>; Subject - label of the process Object - label of the resource being accessed Object class - for example, a directory or a file Permissions - the access being granted (for example, read, write) 要使用标准语言自定义 SELinux 策略,请使用以下文件: .te - 定义策略规则以及您的应用程序使用的新类型和域 .fc - 包含文件上下文定义,换句话说,是为应用程序相关文件打标签的指令 .if - 包含接口,这些接口是其他策略模块用于与此策略交互的策略宏 示例 我们找网上实际的参考示例,看看。 vpp/extras/selinux at master · FDio/vpp georou/grafana-selinux: Grafana SELinux policy module for CentOS 7 & RHEL 7 我们看下 vpp 的 selinux 吧。grafana 的 selinux,看的脑袋疼,就不看了。 /etc/vpp(/.*)? gen_context(system_u:object_r:vpp_config_rw_t,s0) /etc/vpp目录及其所有内容都会被标记为vpp_config_rw_t类型 system_u - SELinux用户标识 object_r - 角色标识 vpp_config_rw_t - 类型标识,表示这些文件是VPP配置文件,具有读写权限 s0 - MLS(Multi-Level Security)级别 type vpp_config_rw_t; files_config_file(vpp_config_rw_t) read_files_pattern(vpp_t, vpp_config_rw_t, vpp_config_rw_t) 义了一个新的SELinux类型(type),名为vpp_config_rw_t 调用了一个SELinux策略宏,将vpp_config_rw_t类型声明为配置文件类型。这个宏会自动为该类型分配一些基本的配置文件属性和权限。 定义了VPP进程(vpp_t类型)对vpp_config_rw_t类型文件的读写权限。 最后 远远看着 SELinux ,就知道它不是“善茬”。 所以,不到万不得已的时候,就不要使用SELinux。 这里时一些参考链接: Quick start to write a custom SELinux policy - Red Hat Customer Portal 使用 SELinux | Red Hat Enterprise Linux | 9 | Red Hat Documentation SELinuxProject/selinux-notebook: The SELinux Notebook