ubuntu

Ubuntu SELinux如何支持自定义规则

小樊
39
2025-10-10 00:51:38
栏目: 智能运维

1. 安装SELinux基础工具与依赖
在Ubuntu上自定义SELinux规则前,需先安装核心工具包。运行以下命令安装selinux-basics(基础SELinux配置工具)、selinux-policy-default(默认策略集)及auditd(审计服务,用于记录SELinux拒绝事件):

sudo apt-get update
sudo apt-get install selinux-basics selinux-policy-default auditd

安装完成后,启用SELinux服务并设置开机自启:

sudo systemctl enable selinux
sudo systemctl start selinux

2. 切换SELinux至Permissive模式(可选但推荐)
Permissive模式下,SELinux不会强制执行规则,仅记录拒绝事件,便于测试自定义规则的正确性。修改/etc/selinux/config文件,将SELINUX设置为permissive

sudo nano /etc/selinux/config
# 找到SELINUX=enforcing,修改为SELINUX=permissive

保存后重启系统使更改生效:

sudo reboot

也可临时切换模式(无需重启):

sudo setenforce 0

验证模式状态:

getenforce  # 应输出"Permissive"

3. 准备自定义策略源文件(.te文件)
自定义规则需通过.te(Type Enforcement)文件定义。首先创建存放策略文件的目录,再新建.te文件:

mkdir -p ~/selinux-custom-policy
cd ~/selinux-custom-policy
touch custom_policy.te

编辑custom_policy.te,添加规则。示例:允许名为my_script的可执行文件访问/var/www/html目录(需替换为实际需求):

policy_module(custom_policy, 1.0)  # 定义模块名称及版本

# 声明新类型(若未存在)
type my_script_t;
type my_script_exec_t;

# 关联可执行文件与进程类型
init_daemon_domain(my_script_t, my_script_exec_t)

# 定义访问规则:允许my_script_t访问httpd_sys_rw_content_t类型的目录(读写权限)
allow my_script_t httpd_sys_rw_content_t:dir { read write };

注:httpd_sys_rw_content_t是常见的Web目录类型,可根据实际场景替换为user_home_tvar_log_t等。

4. 编译并安装自定义策略模块
使用SELinux提供的工具链编译.te文件为可加载的模块:

# 依赖工具链(通常已安装)
sudo apt-get install selinux-policy-dev

# 编译:生成.mod(中间文件)和.pp(可加载包)
checkmodule -M -m -o custom_policy.mod custom_policy.te
semodule_package -o custom_policy.pp -m custom_policy.mod

# 加载模块
sudo semodule -i custom_policy.pp

验证模块是否加载成功:

sudo semodule -l | grep custom_policy  # 应输出模块名称

5. 验证规则有效性
通过审计日志确认规则是否生效。首先触发相关操作(如让my_script访问/var/www/html),再使用以下命令分析:

# 查找最近的AVC拒绝事件
sudo ausearch -m avc -ts recent

# 解析拒绝原因并给出修复建议
sudo audit2why

若规则正确,audit2why应显示“allow”而非“denied”。

6. 持久化与应用策略

注意事项

0
看了该问题的人还看了