1. 准备工作:安装SELinux基础工具与依赖
在Ubuntu上定制SELinux策略前,需先安装核心工具包。运行以下命令安装selinux-basics(基础SELinux配置)、selinux-policy-default(默认策略)及管理工具:
sudo apt update
sudo apt install selinux-basics selinux-policy-default policycoreutils libselinux1 auditd
安装完成后,启用SELinux并设置为permissive模式(允许记录拒绝事件但不阻止操作):
sudo setenforce 0 # 临时切换至permissive模式
sudo sed -i 's/SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config # 永久生效
重启系统使设置生效:sudo reboot。
2. 查看当前SELinux状态
使用sestatus命令确认SELinux运行状态,需确保Current mode为permissive(测试阶段)或enforcing(正式生效):
sestatus
输出示例:
SELinux status: enabled
Current mode: permissive
Mode from config file: permissive
Policy version: 35
Policy from config file: targeted
3. 定制个性化策略:编写.te规则文件
SELinux策略的核心是类型强制(TE),需通过.te文件定义进程(主体)与资源(客体)的访问规则。以下是常见场景示例:
场景1:允许自定义应用myapp访问/opt/myapp/data目录
创建/etc/selinux/targeted/src/policy/myapp_policy.te文件,内容如下:
module myapp_policy 1.0;
# 声明类型:进程类型(myapp_process_t)与文件类型(myapp_data_t)
type myapp_process_t;
type myapp_data_t;
# 允许myapp_process_t读写myapp_data_t类型的目录
allow myapp_process_t myapp_data_t:dir { read write search };
allow myapp_process_t myapp_data_t:file { read write open };
场景2:允许Apache(httpd_t)访问自定义端口(8080)
若需让Apache监听非标准端口(如8080),需修改端口标签并添加规则:
module apache_custom_port 1.0;
# 声明端口类型(http_port_t为Apache默认端口类型)
type http_port_t;
# 允许httpd_t进程绑定8080端口
allow httpd_t port_t:tcp listen;
注:若端口未被标记为http_port_t,需额外创建.fc文件(见步骤4)。
4. (可选)定义文件上下文:.fc文件
若需为特定文件/目录分配自定义SELinux标签(如场景2中的8080端口),需创建.fc文件。例如,在/etc/selinux/targeted/src/policy/apache_custom_port.fc中添加:
# 将8080/tcp端口标记为http_port_t类型
portcon tcp 8080 system_u:object_r:http_port_t:s0
此文件用于关联资源与SELinux类型,确保策略规则生效。
5. 编译与加载自定义策略模块
使用SELinux提供的工具链编译.te(及.fc)文件为可加载模块:
# 编译.te文件为.mod中间文件
checkmodule -M -m -o myapp_policy.mod myapp_policy.te
# 打包.mod文件为.pp可加载模块(含.fc文件则一并处理)
semodule_package -o myapp_policy.pp -m myapp_policy.mod
# 加载模块至SELinux策略
sudo semodule -i myapp_policy.pp
加载后,可通过semodule -l | grep myapp_policy验证模块是否安装成功。
6. 调试与验证策略
- 查看拒绝日志:若策略未生效,通过
ausearch命令获取最近的SELinux拒绝事件:sudo ausearch -m avc -ts recent - 生成策略修正建议:使用
audit2allow工具根据日志生成修正规则(示例):sudo ausearch -m avc -ts recent | audit2allow -M myapp_fix sudo semodule -i myapp_fix.pp # 加载修正模块 - 测试策略效果:切换至
enforcing模式(sudo setenforce 1),运行目标应用(如myapp或Apache),确认是否按预期工作。
7. 切换至Enforcing模式(正式生效)
测试无误后,将SELinux切换至enforcing模式(强制执行策略):
sudo setenforce 1
如需永久生效,确保/etc/selinux/config中SELINUX=enforcing。
注意事项
- 定制策略前,建议备份现有策略:
sudo cp -r /etc/selinux/targeted /etc/selinux/targeted.bak。 - 避免过度授权(如
allow *:*:*),遵循最小权限原则,仅授予必要权限。 - Ubuntu默认使用
targeted策略(针对特定服务),若需全局定制,可切换至mls策略(多级安全),但需更高配置复杂度。
以上就是关于“ubuntu selinux如何定制个性化策略”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm