Ubuntu默认安全模块与SELinux的冲突
Ubuntu默认使用AppArmor作为强制访问控制(MAC)系统,而SELinux是来自Red Hat的内核安全模块,两者设计理念、实现方式及策略语法差异显著,可能引发兼容性问题(如策略冲突、功能失效)。若需在Ubuntu上使用SELinux,需先解决与AppArmor的冲突。
1. 卸载AppArmor以避免冲突
AppArmor与SELinux均为系统级安全模块,同时运行可能导致资源争夺或策略覆盖。可通过以下命令卸载AppArmor:
sudo apt remove --purge apparmor apparmor-utils
卸载后重启系统,确保AppArmor服务完全停止。
2. 安装SELinux相关软件包
Ubuntu未将SELinux纳入官方核心仓库,需通过第三方源或手动安装依赖包:
sudo apt update
sudo apt install selinux-basics selinux-policy-default selinux-utils auditd
其中,selinux-basics提供基础安装脚本,selinux-policy-default包含默认策略,auditd用于记录SELinux拒绝日志。
3. 激活SELinux并设置运行模式
sudo setenforce 1 # 设为Enforcing模式(强制生效)
sudo setenforce 0 # 设为Permissive模式(仅记录不阻止)
/etc/selinux/config文件,修改SELINUX参数:SELINUX=enforcing # 可选值:disabled(禁用)、permissive(宽容)、enforcing(强制)
保存后重启系统,使设置生效。4. 验证SELinux状态
使用sestatus命令检查SELinux是否激活及当前模式:
sestatus
输出示例:
SELinux status: enabled
Current mode: enforcing
Mode from config file: enforcing
Policy version: 34
确认状态为“enabled”且模式为“enforcing”(或“permissive”)。
5. 处理软件兼容性问题的核心方法
sudo ausearch -m avc -ts recent # 查找最近的AVC(访问控制)拒绝事件
audit2allow工具根据日志生成策略文件,允许软件访问必要资源:sudo ausearch -m avc -ts recent | audit2allow -M my_policy # 生成策略模块(my_policy.te和my_policy.pp)
sudo semodule -i my_policy.pp # 加载策略模块
示例:若软件因无法读取/opt/myapp/config.conf报错,可创建策略文件myapp.te,内容如下:policy_module(myapp, 1.0)
require {
type unconfined_t;
class file { read open };
}
allow unconfined_t self:file { read open };
编译并加载:checkmodule -M -m -o myapp.mod myapp.te
semodule_package -o myapp.pp -m myapp.mod
sudo semodule -i myapp.pp
setsebool命令开启:sudo setsebool -P httpd_enable_homedirs 1 # 允许Apache访问用户主目录
使用getsebool -a查看所有布尔值,setsebool临时修改,-P参数永久生效。6. 测试与监控
/var/log/audit/audit.log或使用ausearch命令,及时发现新的拒绝事件并调整策略。注意事项