CentOS 上 SELinux 兼容性问题的系统化处置
一 基础认知与快速判定
getenforce(返回 Enforcing/Permissive/Disabled)、sestatus(更详细信息)setenforce 0|1(仅在当前会话切换,重启后失效)SELINUX=,取值 enforcing/permissive/disabled,改为 disabled 需重启getenforce;若为 Enforcing,优先用日志定位是否为 SELinux 拒绝,再决定是调整策略还是临时切到 Permissive 验证。二 常见兼容性场景与对策
ausearch -m avc -ts recent 或查看 /var/log/audit/audit.logsemanage fcontext -a -t mongod_var_lib_t "/data/mongodb/data(/.*)?";restorecon -Rv /data/mongodbsetenforce 0,确认后再回到 Enforcing 并固化策略setsebool -P httpd_enable_homedirs onsetsebool -P allow_httpd_anon_write onchcon -t httpd_sys_script_exec_t /var/www/cgi-bin/*setsebool -P ftp_home_dir on、setsebool -P allow_ftpd_full_access onchcon -R -t public_content_rw_t /var/ftp/pubsemanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?";restorecon -Rv /data/mysql三 排障流程与常用命令
getenforce;若为 Enforcing,查看 /var/log/audit/audit.log 或 ausearch -m avcsetenforce 0(仅验证,不用于生产)semanage fcontext -l | grep <服务名>;restorecon -Rv <路径>getsebool <name>、setsebool -P <name> on|off(加 -P 永久生效)ausearch -m avc -ts recent | audit2allow -M myservice;semodule -i myservice.ppsetroubleshoot、sealert、setools(提供更友好的拒绝解释与建议)四 安全与兼容的取舍
SELINUX=permissive 作为临时过渡;确需 disabled 才修改并重启,且后续恢复需重新打标restorecon,避免“权限对但标签错”的隐蔽问题五 场景化命令清单
getenforce、sestatussetenforce 0|1SELINUX=setsebool -P httpd_enable_homedirs onsetsebool -P allow_httpd_anon_write onchcon -t httpd_sys_script_exec_t /var/www/cgi-bin/*setsebool -P ftp_home_dir onsetsebool -P allow_ftpd_full_access onchcon -R -t public_content_rw_t /var/ftp/pubsemanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?";restorecon -Rv /data/mysqlausearch -m avc -ts recentausearch -m avc -ts recent | audit2allow -M myservice;semodule -i myservice.pp