首先需明确SELinux是否启用及当前运行模式,这对后续排查至关重要。常用命令:
getenforce
:快速查看当前SELinux模式(Enforcing
/Permissive
/Disabled
);sestatus
:显示更详细的SELinux状态(包括配置文件中的默认模式、策略类型等)。getenforce
返回Disabled
,则SELinux未启用,无需进一步排查SELinux相关问题。SELinux的拒绝事件会记录在/var/log/audit/audit.log
中(若审计服务未运行,日志可能缺失)。常用命令:
sudo tail -f /var/log/audit/audit.log
:实时查看最新SELinux日志;sudo ausearch -m avc -ts recent
:搜索最近的AVC
(Access Vector Cache)拒绝事件(-m avc
指定事件类型,-ts recent
限定时间范围);sudo aureport -o selinux_denied
:生成SELinux拒绝事件的统计报告。avc: denied
(拒绝标识)、scontext
(源进程上下文)、tcontext
(目标对象上下文)、tclass
(目标对象类,如file
/port
)、denied
(拒绝的操作,如read
/write
)。原始日志可能难以理解,需通过工具转换为易读格式:
audit2why
:分析AVC
拒绝事件的原因,输出“为什么被拒绝”的解释(如“缺少allow
规则”或“布尔值未开启”)。命令示例:sudo ausearch -m avc -ts recent | audit2why
audit2allow
:根据日志自动生成自定义策略模块,用于允许被拒绝的操作。命令示例:sudo ausearch -m avc -ts today | audit2allow -M mypolicy # 生成策略模块(mypolicy.te和mypolicy.pp)
sudo semodule -i mypolicy.pp # 加载策略模块
注意:audit2allow
生成的规则可能过于宽松,需谨慎使用(尤其是生产环境)。SELinux通过安全上下文(scontext
)控制进程对对象的访问,上下文不匹配是常见问题(如文件上下文与进程所需不符)。常用命令:
ls -Z
:查看文件/目录的SELinux上下文(示例:unconfined_u:object_r:admin_home_t:s0
);ps -eZ
:查看进程的SELinux上下文;id -Z
:查看当前用户的SELinux上下文。restorecon
:恢复文件/目录的默认上下文(基于策略);sudo restorecon -Rv /path/to/directory # -R递归修复,-v显示详情
semanage fcontext
:修改文件/目录的默认上下文(需永久生效);sudo semanage fcontext -a -t httpd_sys_content_t "/var/www/html/custom(/.*)?" # 添加自定义上下文规则
sudo restorecon -Rv /var/www/html/custom # 应用新规则
SELinux布尔值(Booleans)是可动态调整的开关,控制特定功能的访问权限(如服务能否访问网络、用户能否写入家目录)。常用命令:
getsebool -a
:列出所有布尔值及其状态(on
/off
);setsebool
:临时修改布尔值(-P
参数永久生效);httpd
服务连接网络:sudo setsebool -P httpd_can_network_connect 1
常见布尔值:httpd_can_network_connect
(HTTP服务网络访问)、ssh_chroot_rw_homedirs
(SSH chroot目录读写权限)。若需快速验证SELinux是否为问题根源,可切换运行模式:
setenforce 0
:将SELinux切换至Permissive
模式(不阻止操作,仅记录日志);setenforce 1
:恢复Enforcing
模式(强制执行策略)。systemctl restart httpd
)。Permissive
模式仅用于调试,生产环境不建议长期使用。若习惯图形界面,可使用以下工具简化排查流程:
setroubleshoot
:分析SELinux日志并提供解决方案(需安装:sudo yum install setroubleshoot
);sealert -a /var/log/audit/audit.log
semanage
:图形化管理SELinux策略(如端口、文件上下文、布尔值),更直观易用。/etc/selinux/config
)前,建议备份(cp /etc/selinux/config /etc/selinux/config.bak
);audit2allow
生成的规则需审核,避免过度开放权限;