一、更新前准备:检查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
,及时处理新的拒绝事件。