SELinux策略保护文件访问权限
给一个selinux的策略写法,保护文件只能被部分进程访问
要编写一个 SELinux 策略来保护文件只能被特定进程访问,需要完成以下步骤。这里以保护 /var/webapp/config.conf 文件只能被 httpd_t 进程访问为例:
1. 创建 SELinux 策略模块文件(.te 文件)
1 | # 文件名:webapp_protect.te |
2. 编译并安装策略模块
1 | # 生成 .mod 和 .pp 文件 |
3. 标记受保护文件为新类型
1 | # 设置文件安全上下文 |
4. 验证策略效果
1 | # 尝试用非授权进程访问(应失败) |
关键组件说明
类型定义 (
protected_config_t):- 创建新类型标记受保护文件
files_type()宏声明其为标准文件类型
访问规则:
1
allow source_domain target_type:class permissions;
httpd_t: 允许访问的进程域protected_config_t: 文件类型file: 资源类{ read open getattr }: 最小权限集
显式拒绝 (
neverallow):- 禁止所有非
httpd_t域的访问 ~httpd_t表示除 httpd_t 外的所有域
- 禁止所有非
高级定制场景
场景 1:允许多个进程访问
1 | # 允许 httpd_t 和 custom_app_t 访问 |
场景 2:自定义进程域
1 | # 为自定义应用创建新域 |
场景 3:目录保护
1 | # 保护整个目录 |
调试建议
查看拒绝日志:
1
ausearch -m avc -ts recent | grep protected_config_t
生成自定义策略:
1
2
3# 根据拒绝记录生成允许规则
audit2allow -a -M myfixes
semodule -i myfixes.pp临时测试权限:
1
2# 临时允许所有访问(调试后需撤销)
semanage permissive -a httpd_t
完整工作流
- 创建策略文件
.te - 编译安装模块
- 标记文件系统对象
- 测试访问权限
- 根据审计日志调整策略
- 部署到生产环境
重要提示:实际部署前应在测试环境中验证。权限应遵循最小特权原则,仅授予必要权限(如
read而非*)。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Helloeuler!
