SELinux(安全增强型 Linux)通过强制访问控制(MAC)为 Linux 系统提供额外的安全层,配置进程执行(Process Execution,简称 PE)是 SELinux 的核心功能之一,它控制进程如何启动、运行及访问资源,以下是详细配置指南:
SELinux 进程执行(PE)的核心概念
- 域(Domain)
进程在 SELinux 中运行于特定”域”(如httpd_t
对应 Web 服务器),域定义了进程的权限边界。 - 类型转换(Type Transition)
当进程执行新程序时,SELinux 根据规则自动切换进程域(例如用户从unconfined_t
域启动 Firefox 后切换到mozilla_t
域)。 - 策略规则(Policy Rules)
通过.te
文件(策略模块)定义进程如何执行、访问文件或切换域。
配置进程执行的步骤
步骤 1:检查当前进程上下文
ps -efZ | grep nginx # 查看进程域(如 system_u:system_r:httpd_t) ls -Z /usr/sbin/nginx # 查看可执行文件类型(如 system_u:object_r:httpd_exec_t)
步骤 2:修改进程执行类型(关键配置)
通过策略规则控制进程启动时的域转换:
- 创建自定义策略模块
sudo audit2allow -M mypolicy # 根据审计日志生成模板
- 编辑策略文件(
.te
)
示例:允许 Nginx 从自定义路径启动并切换到httpd_t
域module mypolicy 1.0; require { type httpd_t; type my_exec_t; } allow httpd_t my_exec_t:file execute; # 允许执行文件 type_transition httpd_t my_exec_t:process httpd_t; # 执行后切换到 httpd_t 域
- 编译并加载策略
sudo make -f /usr/share/selinux/devel/Makefile mypolicy.pp sudo semodule -i mypolicy.pp
步骤 3:配置文件上下文
确保可执行文件有正确的标签:
semanage fcontext -a -t httpd_exec_t "/opt/nginx(/.*)?" # 标记文件类型 restorecon -Rv /opt/nginx # 应用新标签
步骤 4:管理域转换规则
控制进程如何切换域(例如限制用户从 user_t
域启动特定程序):
type_transition user_t my_app_exec_t:process custom_domain_t;
步骤 5:使用布尔值快速调整(可选)
针对常见服务调整预置规则:
setsebool -P httpd_can_network_connect on # 允许 Apache 网络连接 getsebool httpd_can_network_connect # 检查布尔值状态
调试与故障排除
- 查看拒绝日志
sudo ausearch -m avc -ts recent # 检查 AVC 拒绝记录
- 临时测试模式
sudo setenforce 0 # 切换为 Permissive 模式(记录但不拒绝) sudo setenforce 1 # 重新启用 Enforcing 模式
- 修复常见问题
- 权限拒绝:使用
audit2allow
生成修复规则。 - 域切换失败:检查
type_transition
规则是否冲突。 - 文件标签错误:用
restorecon
重置上下文。
- 权限拒绝:使用
最佳实践
- 最小权限原则:为每个进程分配最小必要权限。
- 自定义策略优先:避免直接修改系统默认策略,使用自定义模块。
- 测试环境验证:新规则先在 Permissive 模式测试。
- 定期审计:通过
sealert -a /var/log/audit/audit.log
分析安全事件。
典型示例:配置自定义 Web 服务
假设自定义 Web 服务路径为 /opt/myweb
:
# 1. 标记可执行文件类型 semanage fcontext -a -t httpd_exec_t "/opt/myweb/bin(/.*)?" restorecon -Rv /opt/myweb # 2. 创建策略允许 Apache 执行 cat > myweb.te <<EOF policy_module(myweb, 1.0) require { type httpd_t; } allow httpd_t httpd_exec_t:file execute; EOF # 3. 编译并加载 make -f /usr/share/selinux/devel/Makefile myweb.pp semodule -i myweb.pp
引用说明
- SELinux 官方文档:
Access Vector Cache (AVC) – SELinux Project
Writing Custom SELinux Policies – Red Hat Docs - 工具参考:
audit2allow(8)
,semanage(8)
,setsebool(8)
手册页 - 策略语法规范:
SELinux Policy Language – GitHub
通过精确控制进程执行环境,SELinux 可有效遏制恶意软件扩散和权限滥用,配置时需结合系统需求平衡安全性与可用性,建议在生产环境前充分验证规则。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/4352.html