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模式。