1. 安装SELinux及相关工具
在Ubuntu上集成SELinux的第一步是安装必要的软件包。通过以下命令安装SELinux基础组件、默认策略及管理工具:
sudo apt update sudo apt install selinux-basics selinux-policy-default selinux-utils auditd
这些工具提供了SELinux的配置、策略管理和日志分析功能。
2. 启用SELinux
安装完成后,需通过以下步骤激活SELinux:
setenforce
命令切换SELinux模式(1
为Enforcing强制模式,0
为Permissive宽容模式,仅记录违规不阻止):sudo setenforce 1 # 开启强制模式
/etc/selinux/config
文件,将SELINUX=
行修改为enforcing
(强制)或permissive
(宽容),保存后重启系统使配置生效:sudo nano /etc/selinux/config # 修改为:SELINUX=enforcing sudo reboot
sestatus
命令确认SELinux已启用并处于目标模式。3. 配置SELinux策略
SELinux通过策略规则控制进程与资源的访问。常用配置操作包括:
semanage fcontext
列出当前目录/文件的SELinux上下文(如httpd_sys_content_t
):sudo semanage fcontext -l | grep /var/www
/var/www/my_app
)分配上下文类型(如httpd_sys_content_t
),允许Web服务器访问:sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/my_app(/.*)?"
restorecon
命令刷新目录的SELinux上下文,使其生效:sudo restorecon -Rv /var/www/my_app
setsebool
命令动态开启/关闭服务功能(如允许Apache访问用户目录):sudo setsebool -P httpd_enable_homedirs 1 # 永久生效
布尔值是SELinux的动态开关,无需重启策略即可调整。4. 自定义SELinux策略模块
若默认策略无法满足应用需求(如自定义应用无法访问特定资源),需编写自定义策略模块:
my_app_t
类型的进程读写my_app_rw_t
类型的目录):policy_module(my_custom_policy, 1.0) type my_app_t; type my_app_rw_t; init_daemon_domain(my_app_t, my_app_exec_t) allow my_app_t my_app_rw_t:dir { read write }; allow my_app_t my_app_rw_t:file { read write };
checkmodule
编译.te
文件为.mod
,再用semodule_package
打包为.pp
,最后通过semodule
加载:checkmodule -M -m -o my_custom_policy.mod my_custom_policy.te semodule_package -o my_custom_policy.pp -m my_custom_policy.mod sudo semodule -i my_custom_policy.pp
ausearch
查看SELinux日志,确认策略是否拦截违规操作,或使用semodule -l
查看已加载模块。5. 日志分析与故障排查
SELinux日志(/var/log/audit/audit.log
)记录了所有访问违规事件。使用以下工具分析日志并解决问题:
ausearch
过滤最近的SELinux违规记录:sudo ausearch -m avc -ts recent
audit2allow
根据日志生成自定义策略模块(如mypol.te
),并加载:sudo ausearch -m avc -ts recent | audit2allow -M mypol sudo semodule -i mypol.pp
注意:生成的规则需谨慎审核,避免过度放宽权限。注意事项
permissive
模式测试策略,确认无问题后再切换至enforcing
模式。