一、更新前准备:检查SELinux状态
在更新SELinux策略前,需确认SELinux是否启用及当前模式(Enforcing/Permissive/Disabled)。常用命令:
getenforce:快速查看当前模式(返回“Enforcing”表示启用并强制执行策略);sestatus:显示详细信息(包括模式、策略类型、配置文件路径等)。二、系统级SELinux策略包更新(以CentOS为例)
若系统使用默认的selinux-policy包,可通过包管理器直接更新,确保策略版本与系统内核兼容:
sudo yum update selinux-policy selinux-policy-targeted selinux-policy-default
或使用dnf(Fedora/CentOS 8+):sudo dnf update selinux-policy*
audit2why(分析拒绝日志工具)或audit2allow(生成自定义策略工具),可单独安装:sudo yum install policycoreutils-python-utils
三、SELinux策略数据库与上下文修复
更新策略包后,需同步文件系统中的安全上下文(文件/目录的SELinux类型标签),确保其与新策略匹配:
sudo restorecon -Rv /path/to/target_directory
-R:递归处理目录及其子项;-v:显示详细操作过程(如“restored context to…”)。/作为路径,但需注意耗时较长。四、自定义SELinux策略更新(可选,针对特定需求)
若默认策略无法满足应用需求(如某服务无法访问特定端口),可通过以下步骤生成并安装自定义策略:
audit.log中的AVC(访问控制拒绝)条目,分析被阻止的操作:sudo cat /var/log/audit/audit.log | grep AVC | audit2why
输出会提示“拒绝原因”(如“缺少httpd_sys_content_t类型”)。ausearch提取相关拒绝事件,并通过audit2allow生成.pp(策略包)文件:sudo ausearch -c 'problematic_command' --raw | audit2allow -M custom_policy
-c:指定触发拒绝的命令;-M:生成模块文件(custom_policy.pp为策略包,custom_policy.te为策略源码)。sudo semodule -i custom_policy.pp
加载后,SELinux将允许该操作。五、SELinux模式永久调整(可选)
若需更改SELinux的默认模式(如从Enforcing改为Permissive,即仅记录拒绝而不阻止),需修改配置文件:
sudo vi /etc/selinux/config
SELINUX=enforcing行,更改为:SELINUX=permissive # 或 disabled(完全禁用,不推荐生产环境)
sudo reboot
注:setenforce 0可临时切换至Permissive模式(重启后恢复),但永久更改需修改配置文件。六、Ubuntu系统SELinux策略更新(非默认启用场景)
若Ubuntu系统已安装SELinux(通过selinux-basics包),更新流程如下:
sudo apt update
sudo apt install selinux-basics selinux-policy-default
/etc/selinux/targeted/policy/policies/目录下(.pp文件),使用semodule管理:
sudo semodule -i /path/to/new_policy.pp
sudo semodule -r module_name
sudo semodule -l
sudo reboot
sestatus确认策略是否更新。注意事项
/etc/selinux/config、自定义策略模块);semanage boolean调整服务权限(如httpd_enable_homedirs),而非完全禁用SELinux;/var/log/audit/audit.log,及时处理新的拒绝事件。