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_t
、var_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. 持久化与应用策略
/etc/selinux/config
中的SELINUX
值为permissive
并重启。sudo restorecon -Rv /var/www/html # 替换为实际目录路径
注意事项
allow *:*
)。