SELinux(Security-Enhanced Linux)是CentOS内核级的强制访问控制(MAC)模块,通过为系统对象(文件、进程、端口等)分配安全上下文,并基于预定义策略限制进程对文件的访问,弥补传统Linux权限模型(DAC)的不足。其核心逻辑是:进程与文件的SELinux上下文匹配时,才允许访问,否则操作会被阻止(Enforcing模式)或记录(Permissive模式)。
SELinux有三种运行模式,通过getenforce命令查看当前状态,setenforce命令临时切换(需root权限):
/var/log/audit/audit.log)。/etc/selinux/config文件并重启系统,生产环境不推荐)。安全上下文是SELinux文件保护的基础,包含**用户(User)、角色(Role)、类型(Type)、级别(Level)四部分(格式:user:role:type:level),其中类型(Type)**是文件访问控制的核心。
ls -Z命令查看文件/目录的安全上下文(如unconfined_u:object_r:httpd_sys_content_t:s0)。chcon命令修改单个文件/目录的上下文(如将/data/web目录设为HTTP服务内容类型):chcon -t httpd_sys_content_t /data/web semanage fcontext命令添加永久规则,再通过restorecon命令恢复上下文(确保修改生效且重启后保留):semanage fcontext -a -t httpd_sys_content_t "/data/web(/.*)?" # 添加规则 restorecon -Rv /data/web # 递归恢复上下文 SELinux策略通过规则定义进程与文件的访问权限,默认策略为targeted(仅保护部分系统服务,如HTTP、FTP),适用于大多数场景。
sestatus命令查看SELinux是否启用及当前模式。getsebool查看、setsebool -P永久设置(-P表示持久化):getsebool httpd_enable_homedirs # 查看是否允许Apache访问家目录 setsebool -P httpd_enable_homedirs 1 # 启用该功能 当SELinux阻止进程访问文件时,可通过日志定位问题并解决:
ausearch命令过滤AVC(访问控制)拒绝记录(如最近1小时的拒绝事件):ausearch -m avc -ts recent audit2allow工具分析日志,自动生成自定义策略模块(如允许httpd_t进程访问/data/web目录):ausearch -m avc -ts recent | audit2allow -M my_httpd_policy # 生成策略模块 semodule -i my_httpd_policy.pp # 加载模块 httpd_sys_content_t)。/var/lib/mysql目录)。/var/log/audit/audit.log,及时处理SELinux拒绝事件,避免影响业务。semanage fcontext规则前,备份/etc/selinux/targeted/contexts/files/file_contexts.local文件,便于恢复。