阅读量:21
1. 前提准备:安装SELinux及相关工具
Ubuntu默认未启用SELinux,需先安装核心组件与管理工具。执行以下命令安装:
sudo apt update
sudo apt install selinux-basics selinux-policy-default policycoreutils selinux-utils auditd
安装完成后,通过sestatus命令验证SELinux是否安装成功(显示“SELinux status: enabled”即为成功)。
2. 启用SELinux并设置运行模式
SELinux有三种运行模式,需通过配置文件调整:
- 修改配置文件:编辑
/etc/selinux/config,设置SELINUX参数(可选enforcing/permissive/disabled),例如强制模式:sudo nano /etc/selinux/config # 修改为 SELINUX=enforcing SELINUXTYPE=targeted # 通常选择targeted(针对网络服务保护) - 临时切换模式:使用
setenforce命令(无需重启),0为宽容模式(仅记录违规不阻止),1为强制模式(阻止违规):注:从sudo setenforce 1 # 切换至强制模式disabled切换至enforcing需重启系统,且disabled模式会清除所有SELinux标签。
3. 查看与管理安全上下文
安全上下文(user:role:type:level)是SELinux的核心,标识主体(进程)与客体(文件/端口)的安全属性。常用命令:
- 查看文件/目录上下文:
ls -Z /path/to/file # 示例:查看/var/www/html/index.html的上下文 - 修改文件上下文:使用
semanage fcontext添加自定义规则,restorecon恢复默认上下文:注:sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html(/.*)?" # 添加规则 sudo restorecon -Rv /var/www/html # 递归恢复上下文httpd_sys_content_t是Apache默认可访问的文件类型。
4. 配置SELinux布尔值(快速调整权限)
布尔值是SELinux的开关选项,用于快速启用/禁用特定功能的权限(如允许Apache访问用户主目录)。常用命令:
- 查看所有布尔值:
getsebool -a - 修改布尔值:使用
setsebool,-P参数表示永久生效(重启后仍有效):常见布尔值:sudo setsebool -P httpd_enable_homedirs 1 # 允许Apache访问用户主目录ftp_anon_write(匿名FTP写入)、ssh_chroot_rw_homedirs(SSH chroot读写家目录)。
5. 创建自定义SELinux策略模块(解决特定问题)
当遇到SELinux拒绝访问(如自定义应用无法访问文件)时,需通过audit2allow工具生成自定义策略:
- 收集拒绝日志:使用
ausearch获取最近的AVC(访问控制)拒绝事件:sudo ausearch -m avc -ts recent > avc_denials.txt - 生成策略模块:使用
audit2allow解析日志并创建.te(策略源文件)与.pp(编译后模块):sudo audit2allow -M my_custom_policy < avc> - 加载策略模块:使用
semodule安装生成的模块:
注:自定义策略需谨慎测试,避免过度授权。sudo semodule -i my_custom_policy.pp
6. 调试与验证SELinux策略
- 查看拒绝日志:通过
ausearch过滤AVC拒绝事件,定位问题:sudo ausearch -m avc -ts today - 分析拒绝原因:使用
audit2why解释日志中的拒绝原因,提供解决方案:
示例输出:“sudo ausearch -m avc -ts recent | audit2whyavc: denied { read } for pid=1234 comm="httpd" name="index.html" dev="sda1" ino=5678 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:admin_home_t:s0 tclass=file”,说明httpd_t进程无权访问admin_home_t类型的文件,需调整上下文或添加布尔值。
注意事项
- Ubuntu对SELinux的支持不如RHEL/CentOS完善,部分功能可能受限;
- 生产环境修改策略前,务必在测试环境验证,避免系统无法启动;
- 定期备份SELinux配置(
/etc/selinux/config、自定义策略模块)。