0

0

Linux SELinux 高级策略调优

舞夢輝影

舞夢輝影

发布时间:2026-02-22 14:01:02

|

612人浏览过

|

来源于php中文网

原创

selinux策略修改后不生效是因为需先编译(checkmodule)再打包(semodule_package)并加载(semodule -i),且必须指定模块名(-n)、正确设置文件上下文并执行restorecon,否则规则无法触发。

linux selinux 高级策略调优

SELinux 策略为什么改了还不生效?

因为策略编译和加载是两步,且内核只认 policy.kern 这个二进制格式——直接改 te 文件或 if 文件不会触发任何变化。

  • 必须用 checkmodule -M -m -o policy.mod policy.te 编译模块源码
  • 再用 semodule_package -o policy.pp policy.mod 打包成可加载包
  • 最后用 semodule -i policy.pp 加载(注意:不是 load_policy,那是重启时用的)
  • 常见错误:semodule -iPermission denied?检查当前 shell 是否在 sysadm_runconfined_r 下,普通用户即使 sudo 也受限于角色域

如何让自定义策略不被 semodule -r 清掉?

默认 semodule 安装的是“命名模块”,卸载时按名匹配;但如果你用 -i 装了未命名包(比如没指定 -n myapp),它会被归为“无名模块”,semodule -l 看不见,semodule -r 也删不掉,只能靠 semodule -b /etc/selinux/targeted/modules/active/base.pp 强制回滚整个基础策略——非常危险。

Motiff
Motiff

Motiff是由猿辅导旗下的一款界面设计工具,定位为“AI时代设计工具”

下载
  • 安装时务必加 -n myapp:例如 semodule -i -n myapp policy.pp
  • 升级策略时用 -u 替换而非 -i,否则同名模块会叠加而非覆盖
  • semodule -l | grep myapp 能查到才算真正注册成功
  • 模块名不能含下划线或点号,只支持小写字母、数字、短横线

audit2why 显示 allowed 但实际被拒绝?

说明 AVC 拒绝日志里混着多个原因,audit2why 只挑了一个路径解释,而真实拦截点可能在另一条策略链上,比如 file_contexts 不匹配导致类型标注失败,后续所有规则都失效。

  • 先跑 ausearch -m avc -ts recent | audit2why 看完整拒绝链
  • 重点检查 ls -Z 输出的目标文件上下文是否真为你期望的 type(比如你写了 allow httpd_t myapp_log_t:file { read write };,但日志文件其实是 var_log_t
  • semanage fcontext -a -t myapp_log_t "/var/log/myapp(/.*)?" 注册上下文,再执行 restorecon -Rv /var/log/myapp
  • 别跳过 restorecon:SELinux 不自动重标已存在文件,只对新建文件生效

为什么 setsebool -P 不持久?

因为 -P 只把布尔值写进 /etc/selinux/targeted/modules/active/booleans.local,但某些发行版(如 RHEL 8+)默认启用 selinux-policy-devel 包,它会在每次策略更新时清空这个文件并重建 booleans 数据库。

  • 确认布尔值是否真写入:semanage boolean -l | grep your_bool,看 defaultcurrent 列是否一致
  • 若不一致,手动运行 semanage boolean -m --on your_bool(这会走数据库接口,比 setsebool 更底层)
  • 检查 /etc/selinux/configSELINUXTYPE 是否与当前加载策略名完全一致(大小写敏感),否则 semanage 会静默失败
  • 容器环境里 setsebool 基本无效——宿主机策略不传递到容器进程域,得用 podman run --security-opt label=type:your_type
SELinux 策略调优最麻烦的从来不是写规则,而是搞清当前生效的是哪一版策略、哪个上下文、哪条布尔值——三个地方各改一半,问题反而更难复现。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
java中boolean的用法
java中boolean的用法

在Java中,boolean是一种基本数据类型,它只有两个可能的值:true和false。boolean类型经常用于条件测试,比如进行比较或者检查某个条件是否满足。想了解更多java中boolean的相关内容,可以阅读本专题下面的文章。

364

2023.11.13

java boolean类型
java boolean类型

本专题整合了java中boolean类型相关教程,阅读专题下面的文章了解更多详细内容。

39

2025.11.30

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

826

2023.08.22

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1583

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

463

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2274

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

40

2026.01.19

default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

230

2023.12.07

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

928

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 9.5万人学习

Git 教程
Git 教程

共21课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号