SELinux之解决avc denied

安全增强型 Linux(Security-Enhanced Linux)简称 SELinux,它是 Linux 的一个安全子系统。SELinux 主要作用是最大限度地减小系统中服务进程可访问的资源(最小权限原则)。对资源的访问控制分为两类: DAC和MAC

SELinux工作模式

SELinux 有三种工作模式,分别为:
enforcing: 强制模式, 执行SELinux规则, 违反的行为会被阻止
permissive: 宽容模式, 执行SELinux规则, 违反的行不会被阻止
disabled: 关闭SELinux

adb shell setenforce 0 设置SELinux 成为permissive模式
adb shell setenforce 1 设置SELinux 成为enforcing模式
adb shell getenforce 获取SELinux状态(permissive,enforcing,disabled)

avc denied

在Android系统开发中, 可能会遇到SELinux的权限不足而引起的各种问题. 可以尝试将SELinux工作模式临时改为宽容模式看问题是否解决, 来判定是否是SELinux引起的问题

标志性 log: avc: denied { 操作权限 } for pid=7201 comm=“进程名” scontext=u:r:源类型:s0 tcontext=u:r:目标类型:s0 tclass=访问类型 permissive=0
源类型:授予访问的类型,通常是进程的域类型
目标类型:客体的类型,它被授权可以访问的类型
访

### 解决 AVC Denied SELinux 权限错误的方法 当遇到 `AVC denied` 错误时,这通常意味着某个进程尝试访问资源的操作被 SELinux 阻止。以下是针对该问题的分析和解决方案: #### 1. 确认 SELinux 当前运行模式 SELinux 提供三种主要模式:`enforcing`、`permissive` 和 `disabled`[^1]。可以通过以下命令查看当前模式: ```bash getenforce ``` 如果返回值为 `Enforcing`,表示 SELinux 正常工作并阻止未授权操作;如果是 `Permissive`,则只记录日志而不执行任何阻断行为。 对于现代 Android 设备而言,在 N 版本之后已不允许完全禁用 SELinux (`disabled`),而仅允许将其设置为宽容模式(`permissive`) 或强制模式(`enforcing`) [^3]。 #### 2. 查阅审计日志以定位具体拒绝事件 通过查阅 `/var/log/audit/audit.log` 文件或者利用 `ausearch` 工具可以帮助我们找到具体的拒绝详情。例如: ```bash ausearch -m avc -ts recent ``` 这些日志条目会提供关于哪个主体(Subject),试图采取何种动作(Action)以及目标对象(Object)的信息。 #### 3. 使用 setroubleshoot 分析工具诊断问题 Setroubleshoot 是一款专门用于解析 SELinux 报警消息的应用程序包。它能够自动读取系统中的报警数据,并给出可能的原因解释及其建议修复措施。 安装方法如下(基于 RedHat/CentOS/Fedora 发行版为例): ```bash yum install setroubleshoot service setroubleshootd start ``` #### 4. 创建自定义策略模块解决问题 一旦明确了是什么样的请求遭到了拒绝,就可以考虑编写一个新的本地安全政策来覆盖默认规则集。流程大致包括以下几个方面: - **收集所需信息**: 记录下所有相关的上下文(Contexts)、类型(Type)/域(Domain)等细节; - **生成初始模板文件**: 利用 audit2allow 命令从现有的违规记录里提取必要的声明语句; ```bash grep "avc: denied" /var/log/messages | audit2allow -M mypol ``` - **加载新创建好的模块到内核当中去**: ```bash semodule -i mypol.pp ``` 上述过程将会把刚才制作完成的新规纳入生效范围之内从而解除先前存在的约束条件限制[^5]. 另外值得注意的一点在于某些情况下也许并不需要永久改变现有配置而是临时调整特定时间段内的状态以便于调试目的达成即可比如切换至 Permissive Mode 下观察现象变化情况然后再恢复原来设定等等. 最后提醒各位开发者朋友务必谨慎对待每一次修改因为不当操作极有可能引发更严重的安全隐患甚至导致整个系统的崩溃瘫痪等问题发生所以请始终遵循最小特权原则(Minimal Privilege Principle). ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值