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!