5.4. 创建本地 SELinux 策略模块


在活跃的 SELinux 策略中添加特定的 SELinux 策略模块可以修复 SELinux 策略的某些问题。您可以使用此流程修复 红帽发行注记 中介绍的特定已知问题,或实施特定的 红帽解决方案

警告

只用红帽提供的规则。红帽不支持使用自定义规则创建 SELinux 策略模块,因为这不会超出 产品支持覆盖范围。如果您并不是相关系统的专家,请联系红帽销售代表并请求咨询服务。

先决条件

  • setools-consoleaudit 软件包进行验证。

步骤

  1. 使用文本编辑器打开新的 .cil 文件,例如:

    # vim <local_module>.cil
    Copy to Clipboard

    要让您的本地模块更好地组织,请在本地 SELinux 策略模块的名称中使用 local_ 前缀。

  2. 从已知问题或红帽解决方案中插入自定义规则。

    重要

    不要自己编写规则。仅使用特定已知问题或红帽解决方案中提供的规则。

    • 例如,要实现 SELinux 拒绝 cups-lpd 对 RHEL 解决方案中的 cups.sock 的读访问权限,请插入以下规则:

      (allow cupsd_lpd_t cupsd_var_run_t (sock_file (read)))
      Copy to Clipboard

      RHBA-2021:4420 中为 RHEL 永久修复了示例解决方案。因此,特定于本解决方案的部分对更新的 RHEL 8 和 9 个系统没有影响,且只作为语法示例包括。

      您可以使用两个 SELinux 规则语法(通用中间语言 (CIL) 和 m4)中的任一个。例如,CIL 中的 (allow cupsd_lpd_t cupsd_var_run_t (sock_file (read))) 等同于 m4 中的以下内容:

      module local_cupslpd-read-cupssock 1.0;
      
      require {
          type cupsd_var_run_t;
          type cupsd_lpd_t;
          class sock_file read;
      }
      
      #============= cupsd_lpd_t ==============
      allow cupsd_lpd_t cupsd_var_run_t:sock_file read;
      Copy to Clipboard
  3. 保存并关闭该文件。
  4. 安装策略模块:

    # semodule -i <local_module>.cil
    Copy to Clipboard

    如果要删除使用 semodule -i 创建的本地策略模块,请参考不带 .cil 后缀的模块名称。要删除本地策略模块,请使用 semodule -r <local_module>

  5. 重启与规则相关的任何服务:

    # systemctl restart <service_name>
    Copy to Clipboard

验证

  1. 列出 SELinux 策略中安装的本地模块:

    # semodule -lfull | grep "local_"
    400 local_module  cil
    Copy to Clipboard

    由于本地模块具有优先级 400,所以您也可以通过使用该值来从列表中过滤它们,例如使用 semodule -lfull | grep -v ^100 命令。

  2. 在 SELinux 策略中搜索相关的允许规则:

    # sesearch -A --source=<SOURCE_NAME> --target=<TARGET_NAME> --class=<CLASS_NAME> --perm=<P1>,<P2>
    Copy to Clipboard

    其中 <SOURCE_NAME > 是源 SELinux 类型,< TARGET_NAME > 是目标 SELinux 类型,&lt ;CLASS_NAME > 是安全类或对象类名称,<P 1&gt ; 和 <P 2> 是规则的特定权限。

    例如,SELinux denies cups-lpd read access to cups.sock in RHEL 解决方案:

    # sesearch -A --source=cupsd_lpd_t --target=cupsd_var_run_t --class=sock_file --perm=read
    allow cupsd_lpd_t cupsd_var_run_t:sock_file { append getattr open read write };
    Copy to Clipboard

    最后一行现在应包含 read 操作。

  3. 验证相关服务受 SELinux 限制:

    1. 确定与相关服务相关的进程:

      $ systemctl status <service_name>
      Copy to Clipboard
    2. 检查上一命令输出中列出的进程的 SELinux 上下文:

      $ ps -efZ | grep <process_name>
      Copy to Clipboard
  4. 验证该服务是否不会导致任何 SELinux 拒绝:

    # ausearch -m AVC -i -ts recent
    <no matches>
    Copy to Clipboard

    i 选项将数字值解译为人类可读的文本。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat