CentOS Context维护指南(以SELinux Context为核心)
SELinux(Security-Enhanced Linux)是CentOS的核心安全模块,其上下文(Context) 是定义文件、目录、进程安全属性的关键标识,包含用户(User)、角色(Role)、类型(Type)、级别(Level) 四个要素(如 unconfined_u:object_r:httpd_sys_content_t:s0)。通过上下文,SELinux严格控制主体(进程)对客体(文件/目录)的访问权限,是系统安全的重要屏障。
getenforce 命令,返回 Enforcing(强制模式,生效)、Permissive(宽容模式,仅记录违规)或 Disabled(禁用)。ls -Z 命令(如 ls -Z /var/www/html/index.html),显示目标的SELinux上下文。ps -eZ | grep process_name(如 ps -eZ | grep httpd),查看进程的安全上下文。chcon 命令,如将 /var/www/html/test.txt 的类型改为 httpd_sys_rw_content_t(允许Web服务器读写):chcon -t httpd_sys_rw_content_t /var/www/html/test.txt-R 参数可递归修改目录(如 chcon -R -t httpd_sys_rw_content_t /var/www/html)。semanage fcontext 添加/修改上下文规则(需安装 policycoreutils-python 包):semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html(/.*)?"((/.*)? 表示目录及其子内容);restorecon 应用规则:restorecon -Rv /var/www/html(-R 递归,-v 显示详细过程)。restorecon 恢复系统默认上下文(如 restorecon -Rv /var/www/html)。SELinux布尔值是用于快速调整服务权限的开关(如允许HTTP服务访问用户家目录)。
getsebool -a(过滤特定服务如 httpd:getsebool -a | grep httpd);setsebool 命令,-P 参数表示永久生效(重启仍有效):setsebool -P httpd_enable_homedirs 1(1 开启,0 关闭)。ausearch 查询审计日志(需开启SELinux审计):ausearch -m avc -ts recent(-m avc 表示SELinux访问控制违规,-ts recent 表示最近1分钟内的日志);aureport 生成简要报告:aureport -m avc(显示违规类型、源目标等)。audit2allow 工具生成自定义策略(如允许 httpd 访问 /data 目录):grep httpd /var/log/audit/audit.log | audit2allow -M mypol(生成策略模块 mypol.te 和二进制文件 mypol.pp);semodule -i mypol.pp(加载后即可生效)。通过 yum update 命令更新系统时,SELinux策略包(如 policycoreutils、selinux-policy)会同步更新,修复已知漏洞并适配新系统组件。更新后需重启系统或相关服务(如 httpd、sshd)使新策略生效。
在进行重大更改(如修改上下文规则、调整布尔值)前,备份SELinux配置文件和上下文数据:
cp -R /etc/selinux /etc/selinux.bak(备份配置目录)、cp /etc/selinux/targeted/contexts/files/file_contexts /etc/selinux/targeted/contexts/files/file_contexts.bak(备份文件上下文规则)。
vmstat 1 查看 cs(上下文切换次数),若数值过高(如超过1万次/秒),可能影响系统性能;用 pidstat -w 1 定位频繁切换的进程(如 PID 列显示进程ID,cswch/s 列显示每秒自愿切换次数)。ausearch 和 aureport 定期检查SELinux拒绝事件,及时处理异常(如新增的未授权访问尝试)。遵循“最小权限原则”,仅为必要的服务授予最低限度的访问权限。例如:
/var/www/html 下的文件,将其上下文设为 httpd_sys_content_t(而非 httpd_sys_rw_content_t);setsebool -P ftpd_anon_write 0 关闭FTP匿名写入)。setenforce 0 或修改 /etc/selinux/config 为 disabled)会彻底丧失安全防护,仅建议在调试时临时使用(测试完成后需恢复)。chcon 临时修改:临时修改会在重启后失效,若需长期生效,必须用 semanage fcontext + restorecon 永久修改。cp /etc/selinux/targeted/policy/policy.31 /etc/selinux/targeted/policy/policy.31.bak)。