Android14之audit2allow自动生成Selinux规则(一百七十五)

本文介绍了SELinux在Android/Linux系统中的重要性,特别是在使用audit2allow工具自动生成安全规则以强化系统安全控制的过程,包括配置环境、抓取avc日志、审计转换和规则添加至设备政策文件中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀
优质专栏:多媒体系统工程师系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

欢迎关注Android系统攻城狮

1.前言

本篇目的:audit2allow自动生成Selinux配置。

2.SeLinux介绍

  • SELinux,全称Security-Enhanced Linux,是一种基于Linux内核的安全机制。它通过强制访问控制(MAC)来增强Linux系统的安全性,对于保护系统资源和防止未经授权访问非常有帮助。本文将简要介绍SELinux的原理和功能。

  • SELinux最初是由美国国家安全局(NSA)开发的,于2000年首次集成到Linux内核中。它通过将每个对象(如文件、进程和用户)和动作(如读写、执行)分配给一个安全上下文来实现安全访问控制。安全上下文包括主体和客体,主体代表拥有访问权限的主体,而客体代表被保护的系统资源。

  • SELinux通过使用访问控制策略来管理对象和动作之间的访问权限。访问控制策略定义了允许或禁止一个主体访问一个特定的客体的规则。这种严格的策略强制执行防止非授权访问,有效地减少了系统受到攻击的风险。

  • SELinux的主要功能包括:

  1. 强制访问控制(MAC):SELinux在每个对象和动作上强制实施访问控制策略,即使用户具有root权限也不能绕过这些策略。

  2. 细粒度访问控制:SELinux使管理员能够配置文件和进程的访问权限,实现更精确的访问控制。

  3. 角色基准访问控制:SELinux允许系统管理员为特定的用户角色分配不同的安全策略,以便管理访问权限。

  4. 安全上下文:SELinux使用安全上下文来标记对象和动作,并通过语义丰富的标签来定义对象之间的关系。

  5. 弹性:SELinux的策略可根据实际需求进行定制,以满足不同环境下的安全需求。

  • 虽然SELinux提供了强大的安全功能,但它也可能增加了配置和管理的复杂性。因此,对于普通用户来说,理解SELinux的工作原理并正确配置它可能需要一定的学习和实践。

  • 总之,SELinux是一种基于Linux内核的安全增强机制,通过强制访问控制、细粒度访问控制和安全上下文等功能来提高系统的安全性。它在Linux系统中得到广泛应用,并在防止未经授权访问和减少系统受到攻击的风险方面发挥着重要作用。

3.audit2allow自动生成selinux规则

<1>.配置Android源码环境

# source build/envsetup.sh
# lunch xxx

<2>.抓带"avc"的log

# adb logcat | tee avc.txt

<3>.自动转换avc.txt到selinux规则

# adb pull /sys/fs/selinux/policy
# adb logcat -b events -d | ./external/selinux/prebuilts/bin/audit2allow -p policy

Or
# sudo apt install policycoreutils-python-utils
# adb logcat -b events -d | audit2allow -p policy
  • 生成selinux规则
#============= boringssl_self_test ==============
allow boringssl_self_test self:capability sys_admin;

#============= dexoptanalyzer ==============
allow dexoptanalyzer app_data_file:dir search;

#============= init-insmod-sh ==============
allow init-insmod-sh self:capability sys_admin;

#============= system_server ==============
allow system_server vendor_default_prop:file read;

注意:当前PC的python版本一定是: python2.7。否则会出现如下语法问题:

 File "external/selinux/prebuilts/bin/audit2allow", line 3
    if [ -z "${ANDROID_HOST_OUT}" ]; then
                                ^
SyntaxError: invalid syntax

<4>.将规则添加到device/xxx/common/sepolicy/xxx.te文件中

allow boringssl_self_test self:capability sys_admin;

#============= dexoptanalyzer ==============
allow dexoptanalyzer app_data_file:dir search;

#============= init-insmod-sh ==============
allow init-insmod-sh self:capability sys_admin;

#============= system_server ==============
allow system_server vendor_default_prop:file read;

<4>.编译

# make -j12 sepolicy
<think>我们正在解决一个关于SELinux策略调整的问题,用户希望使用audit2allow工具生成策略模块。根据引用内容,audit2allow是一个将SELinux审计日志(AVC拒绝消息)转换为SELinux策略模块的工具。以下是配置audit2allow工具并生成策略模块的步骤: ### 步骤1: 确保SELinux处于enforcing模式并重现问题 - 首先,确保SELinux处于 enforcing 模式(这样才能记录AVC拒绝日志): ```bash setenforce 1 ``` - 重现导致访问被拒绝的操作(例如尝试SSH连接),以便生成AVC日志。 ### 步骤2: 收集AVC拒绝日志 - 使用以下命令查看实时AVC日志: ```bash ausearch -m avc -ts recent ``` - 或者直接查看审计日志文件: ```bash grep "avc:.*denied" /var/log/audit/audit.log ``` - 将相关的AVC拒绝日志保存到一个文件中,例如 `avc_denied.log`: ```bash grep "avc:.*denied" /var/log/audit/audit.log > avc_denied.log ``` ### 步骤3: 安装必要的工具 - 确保系统已安装 `policycoreutils` 包,该包包含 `audit2allow` 工具: ```bash yum install policycoreutils-python -y ``` ### 步骤4: 使用audit2allow生成策略模块 - 使用保存的日志文件生成策略模块: ```bash audit2allow -M mypol -i avc_denied.log ``` 其中: - `-M mypol`:指定生成的模块名(这里为`mypol`),同时会生成`.te`文件(类型强制文件)和`.pp`文件(编译后的策略模块)。 - `-i avc_denied.log`:指定输入的日志文件。 ### 步骤5: 安装生成的策略模块 - 使用以下命令安装生成的策略模块: ```bash semodule -i mypol.pp ``` ### 步骤6: 验证策略是否生效 - 再次尝试之前被拒绝的操作(如SSH连接),检查问题是否解决。 - 可以使用 `semodule -l | grep mypol` 来确认模块已加载。 ### 注意事项 1. **审核生成的规则**:自动生成规则可能会过于宽松。在安装之前,建议检查生成的`.te`文件(`mypol.te`),确保只添加必要的权限,避免安全风险。 2. **自定义规则**:如果自动生成规则不符合要求,可以手动编辑`.te`文件,然后重新编译和安装: ```bash checkmodule -M -m -o mypol.mod mypol.te semodule_package -o mypol.pp -m mypol.mod semodule -i mypol.pp ``` 3. **持久性**:安装的策略模块在重启后仍然有效,因为`semodule -i`会将模块添加到SELinux策略存储中。 ### 引用说明 - 引用[1]和[4]介绍了audit2allow的基本用法[^1][^4]。 - 引用[2]提供了在Android环境下使用audit2allow的示例,但原理类似[^2]。 - 引用[3]提到设置SELinux为permissive模式,但我们在生成规则时需要在enforcing模式下重现问题[^3]。 ### 示例:生成并安装策略模块 假设我们遇到SSH相关的AVC拒绝,日志已经保存到`avc_denied.log`,执行: ```bash # 安装工具 yum install policycoreutils-python -y # 生成策略模块 audit2allow -M sshd_fix -i avc_denied.log # 安装模块 semodule -i sshd_fix.pp ``` ### 相关问题 1. **如何手动编写SELinux策略模块?** 2. **如何调试复杂的SELinux拒绝问题?** 3. **如何永久禁用SELinux?** [^1]: 如何利用 audit2allow 工具调试SELinux日志。audit2allow 是一个将 SELinux 审计日志(通常是 /var/log/audit/audit.log)中被拒绝的访问请求(AVC)转换为 SELinux 策略模块(type enforcement rules)的工具。 [^2]: 使用audit2allow工具来根据avc log生成selinux规则audit2allow工具是google提供的一个原生的python脚本工具,可以根据avc权限错误log信息自动生成selinux规则。 [^3]: Android SELinux。设置ro.boot.selinux=permissive属性,并且修改在system/core/init/Android.mk 中设置用于user版本下selinux模式为permissive avc-denied问题解决。 [^4]: SELinux avc权限--audit2allow。创建任意文件,粘贴日志内容,eg:创建文件名称为se.txt,而后使用如下命令: ubuntu@ubuntu:~$ audit2allow -i se.txt //很重要的一个以python写的命令,主要用来处理日志,把日志中的违反策略的动作的记录,转换成 access vector //如果没有该指令,执行安装 sudo apt-get install policycoreutils。</think>### 配置 audit2allow 工具生成 SELinux 策略模块的完整指南 #### 1. 安装必备工具 ```bash # 安装 policycoreutils 包(包含 audit2allow) sudo yum install policycoreutils-python -y # 安装 SELinux 开发工具 sudo yum install selinux-policy-devel -y ``` #### 2. 收集 SELinux 拒绝日志 ```bash # 查看实时拒绝日志(推荐) sudo ausearch -m avc -ts recent # 将拒绝日志保存到文件 sudo grep "avc:.*denied" /var/log/audit/audit.log > avc_denied.log ``` #### 3. 使用 audit2allow 生成策略模块 ```bash # 生成可读的策略建议 audit2allow -i avc_denied.log # 生成完整的策略模块(.te文件) audit2allow -i avc_denied.log -M mypolicy ``` 这将生成两个文件: - `mypolicy.te`:策略模块源码 - `mypolicy.pp`:编译后的策略模块 #### 4. 编译和安装策略模块 ```bash # 编译策略模块(如果未自动生成.pp文件) make -f /usr/share/selinux/devel/Makefile mypolicy.pp # 安装策略模块 sudo semodule -i mypolicy.pp ``` #### 5. 验证策略生效 ```bash # 查看已加载模块 sudo semodule -l | grep mypolicy # 测试是否解决权限问题 # (重现之前被拒绝的操作) ``` #### 高级调试技巧 1. **分析特定进程的拒绝**: ```bash ausearch -m avc -p <进程PID> | audit2allow ``` 2. **生成更精确的规则**: ```bash audit2allow -i avc_denied.log -R -M strict_policy ``` `-R` 参数会生成更严格的参考策略规则[^2] 3. **手动优化策略模块**: 编辑生成的 `.te` 文件,精细化权限控制: ```te # 示例:允许nginx访问特定端口 allow nginx_t http_port_t:tcp_socket name_connect; ``` #### 注意事项 1. **安全原则**: - 始终检查生成的规则,避免过度授权 - 使用最小权限原则:`allow source_type target_type:class permission;` 2. **日志管理**: ```bash # 清除旧日志 sudo auditctl -D # 实时监控日志 sudo tail -f /var/log/audit/audit.log | grep denied ``` 3. **策略调试**: ```bash # 临时切换为permissive模式 sudo setenforce 0 # 问题解决后恢复enforcing模式 sudo setenforce 1 ``` #### 示例工作流 假设解决 SSH 访问问题: ```bash # 1. 收集SSH相关拒绝日志 sudo grep sshd /var/log/audit/audit.log | grep denied > ssh_denied.log # 2. 生成策略模块 audit2allow -i ssh_denied.log -M ssh_fix # 3. 安装并测试 sudo semodule -i ssh_fix.pp sudo systemctl restart sshd ``` > **重要提示**:生产环境中应在测试环境验证策略后再部署,避免系统安全风险[^1][^4] --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Android系统攻城狮

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值