1. 确认并设置SELinux为Enforcing模式
SELinux的核心价值在于强制访问控制(MAC),需确保其处于Enforcing模式(强制执行策略)才能发挥作用。
sestatus(显示详细模式及策略类型)或getenforce(仅显示当前模式)命令确认状态。setenforce 1切换至Enforcing模式(立即生效,重启后失效);setenforce 0切换至Permissive模式(仅记录违规,不阻止)。/etc/selinux/config文件,将SELINUX=后的值改为enforcing(强制)或permissive(宽容),保存后重启系统使更改生效。2. 管理SELinux策略与布尔值
SELinux策略通过布尔值(Boolean)控制常见服务的访问权限,需根据业务需求调整:
semanage boolean -l命令列出所有可配置的布尔值(如httpd_can_network_connect控制Apache/Nginx是否能访问网络)。setsebool 布尔值 on/off(如setsebool httpd_can_network_connect on)临时开启/关闭权限(重启服务后可能失效)。-P参数(如setsebool -P httpd_can_network_connect on),修改会持久化保存(无需重启服务)。3. 调整文件与进程的安全上下文
SELinux通过安全上下文(格式:user:role:type:level)控制进程与文件的访问权限,需确保上下文正确:
ls -Z /path/to/file(如unconfined_u:object_r:httpd_sys_content_t:s0);ps -eZ | grep 服务名(如httpd进程的上下文)。chcon命令(如chcon -t httpd_sys_content_t /var/www/html/index.html,将index.html设为HTTP服务可访问类型);semanage fcontext添加默认上下文规则(如semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?",将/data/web目录及子目录设为HTTP类型);restorecon还原上下文(如restorecon -Rv /data/web,递归恢复目录下所有文件的默认上下文)。4. 处理SELinux违规日志并生成自定义策略
当服务因SELinux策略被拦截时,需通过日志分析并生成自定义策略:
ausearch -m avc -ts recent(查看最近1小时的AVC拒绝事件)或grep avc /var/log/audit/audit.log(过滤AVC日志)命令获取违规详情。audit2allow工具分析日志并生成策略模块(如grep nginx /var/log/audit/audit.log | audit2allow -M nginx_policy,生成nginx_policy.te(策略源码)和nginx_policy.pp(编译后的模块));semodule -i nginx_policy.pp命令安装模块,使自定义策略生效(解决特定服务的访问问题)。5. 常见场景配置示例
/var/www/html迁移至/data/web,需执行以下步骤:
semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?";restorecon -Rv /data/web;setsebool -P httpd_can_network_connect on。/var/ftp目录上传文件,需:
semanage fcontext -a -t public_content_rw_t "/var/ftp(/.*)?";restorecon -Rv /var/ftp;setsebool -P ftpd_anon_write on。注意事项
ausearch、aureport等工具分析SELinux日志,及时发现并处理潜在的安全威胁。