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_denials.txt
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 | audit2why
示例输出:“avc: 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类型的文件,需调整上下文或添加布尔值。注意事项
/etc/selinux/config、自定义策略模块)。