CentOS SELinux更新规则指南
SELinux(Security-Enhanced Linux)是CentOS系统中的强制访问控制(MAC)模块,通过策略规则限制进程对资源的访问。更新SELinux规则需根据场景选择合适方法,以下是常见操作的详细步骤:
在更新规则前,需确认SELinux是否启用及当前模式:
sestatus
输出示例:
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 35
Policy from config file: targeted
SELinux status为disabled,需先修改配置文件启用(见四、永久修改SELinux模式);Current mode为enforcing(强制模式,规则立即生效)或permissive(警告模式,仅记录违规不阻止)。SELinux策略包包含预定义的规则集,更新包可获取最新规则:
# 更新系统包及SELinux策略包
sudo yum update selinux-policy selinux-policy-targeted selinux-policy-default
更新完成后,需重新加载策略以应用更改:
sudo restorecon -Rv /
该命令递归恢复根目录下所有文件的安全上下文(Security Context),确保其与新策略一致。
布尔值是SELinux中可快速开关的策略选项,用于控制常见服务的访问权限(如HTTP服务访问用户主目录):
getsebool -a | less
输出示例:httpd_enable_homedirs --> off
ftpd_anon_write --> off
sudo setsebool httpd_enable_homedirs on
sudo setsebool -P httpd_enable_homedirs on
-P参数将设置写入策略存储,避免重启失效。安全上下文定义了文件/目录的SELinux类型(如httpd_sys_content_t表示Web内容),需与进程域(如httpd_t)匹配才能访问:
ls -Zd /path/to/directory
输出示例:unconfined_u:object_r:default_t:s0 /data
sudo chcon -R -t httpd_sys_content_t /data
-R表示递归修改目录及其子项,-t指定目标类型。# 添加新的上下文规则
sudo semanage fcontext -a -t httpd_sys_content_t "/data(/.*)?"
# 应用规则到文件系统
sudo restorecon -Rv /data
semanage fcontext将规则写入SELinux策略库,restorecon根据规则恢复上下文。若标准策略无法满足需求(如某服务需访问特定目录被拒绝),需创建自定义策略模块:
audit.log中的AVC(访问向量缓存)拒绝事件,定位问题:sudo cat /var/log/audit/audit.log | grep AVC | audit2why
输出示例:type=AVC msg=audit(1714567890.123:456): avc: denied { read } for pid=1234 comm="httpd" name="myfile" dev="sda1" ino=7890 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:default_t:s0 tclass=file
Was caused by:
Missing type enforcement (TE) allow rule.
audit2allow将拒绝事件转换为策略模块:sudo ausearch -c 'httpd' --raw | audit2allow -M myhttpdpolicy
-M参数生成模块文件(myhttpdpolicy.te为源码,myhttpdpolicy.pp为编译后的二进制)。sudo semodule -i myhttpdpolicy.pp
模块加载后,SELinux将允许httpd_t进程访问default_t类型的文件。若需改变SELinux的默认运行模式(如从enforcing改为permissive),需编辑配置文件:
sudo vi /etc/selinux/config
找到SELINUX=enforcing行,修改为:
SELINUX=permissive
保存后重启系统,使模式变更生效:
sudo reboot
/etc/selinux/config和自定义模块;/var/log/audit/audit.log,及时处理新拒绝事件;sestatus查看版本)。通过以上步骤,可有效更新CentOS系统的SELinux规则,平衡安全性与功能性。