温馨提示×

如何迁移selinux策略

小樊
42
2026-10-19 01:03:29
栏目: 智能运维

迁移 SELinux 策略通常指把一台机器(或某个系统版本)上定义好的 SELinux 策略、模块、布尔值、文件上下文等,迁移到另一台机器或新系统中。下面按“常见场景 + 操作步骤”说明。


一、明确你要迁移的内容

SELinux 相关内容包括:

  1. 策略模块(Policy Modules)
    • .pp 文件(已编译)
    • .te / .fc / .if 源码
  2. 布尔值(Booleans)
    • getsebool -a
  3. 文件安全上下文(File Contexts)
    • semanage fcontext
  4. 端口标签
    • semanage port
  5. 用户 / 角色 / 登录映射
    • semanage user/login

二、最推荐方式:导出 + 导入(通用、安全)

1️⃣ 在源机器导出配置

(1)导出 semanage 配置(推荐)

semanage export -f selinux-config.exp

该文件包含:

  • 布尔值
  • fcontext
  • 端口
  • 用户/登录映射

(2)导出自定义策略模块列表

semodule -l | grep -v "^(base|unconfined)" > modules.list

(3)导出自定义模块 .pp

mkdir selinux-modules
for m in $(awk '{print $1}' modules.list); do
    semodule -E $m
    mv $m.pp selinux-modules/
done

2️⃣ 在目标机器导入

(1)导入 semanage 配置

semanage import -f selinux-config.exp

(2)安装策略模块

cd selinux-modules
for pp in *.pp; do
    semodule -i $pp
done

(3)刷新文件上下文

restorecon -Rv /

三、如果是“整系统策略迁移”(如 CentOS → Rocky / RHEL)

不建议直接拷贝 /etc/selinux,原因:

  • 策略版本不同
  • 策略仓库结构不同

✅ 推荐做法:

  • 只迁移 自定义模块 + semanage 配置
  • 目标系统使用同系列 SELinux 策略(如 RHEL 系)

四、如果是容器 / 自定义策略(高级)

源码级迁移(最可控)

policy_source/
├── myapp.te
├── myapp.fc
├── myapp.if

编译并安装:

make -f /usr/share/selinux/devel/Makefile
semodule -i myapp.pp

适合:

  • 自研服务
  • 容器运行时
  • 安全加固场景

五、常见坑提醒

⚠️ 不要直接复制:

  • /etc/selinux/targeted/
  • /var/lib/selinux/

⚠️ 内核版本差异可能导致:

  • 模块不兼容
  • semodule -i 失败

⚠️ 迁移后务必:

sestatus
ausearch -m avc -ts recent

六、快速检查清单

✅ 布尔值一致
✅ fcontext 一致
✅ 模块已加载
✅ restorecon 已执行
✅ AVC 无异常


如果你能说明:

  • 源系统 & 目标系统(如 CentOS 7 → Rocky 9)
  • 是服务器 / 容器 / 嵌入式
  • 是否自研策略

我可以给你更精确的迁移方案。

0 踩