前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SELinux之解决avc denied

SELinux之解决avc denied

作者头像
菜菜cc
发布2022-11-15 21:32:21
2.8K0
发布2022-11-15 21:32:21
举报

SELinux简述

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

DAC

在未使用SELinux的系统上, 对资源的访问是通过权限位来确定, 比如一个文件对所属用户是否有读、写、执行权限, 其他用户的访问可由所属用户进行配置. 这种由所属用户自己决定是否将资源的访问权或部分访问权授予其他用户,这种控制方式是自主的,即自主访问控制(Discretionary Access Control, DAC).

代码语言:javascript
复制
> ls -l note
-rw-rw-r-- 1 ifantsai ifantsai 37 6月  17 13:36 note

MAC

在使用了 SELinux 的系统上,对资源的访问除了通过权限位判定外,还需要判断每一类进程是否拥有对某一类资源的访问权限。这种方式对资源的访问控制, 称之为强制访问控制(Mandatory Access Control, MAC).只给每个进程开放所需要的资源, 将权限开放到最小, 当进程出现漏洞时也只会影响到该进程所涉及的资源, 这大大提升了安全性.

SELinux工作模式

SELinux 有三种工作模式,分别为:

  • enforcing: 强制模式, 执行SELinux规则, 违反的行为会被阻止
  • permissive: 宽容模式, 执行SELinux规则, 违反的行不会被阻止
  • disabled: 关闭SELinux

通过执行getenforce命令可以获取当前SELinux的工作模式

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

代码语言:javascript
复制
# 修改工作模式为宽容模式
setenforce permissive

(adsbygoogle=window.adsbygoogle||[]).push({})

遇到权限问题时, 在log中会打印avc denied提示缺少什么权限, 可以通过dmesg | grep avc过滤出所有avc denied.

解决avc denied

笔者在RK Android9.0上进行操作, 权限文件以.te为后缀, 涉及到需要修改的路径:

  • android/device/rockchip/common/sepolicy
  • android/device/rockchip/rk3399/sepolicy

Android自带的进程服务通过以上目录配置即可 , 自己添加的第三方进程需要添加到自定义的目录下

以如下所示的avc denied为例讲解

代码语言:javascript
复制
# avc: denied { 操作权限 } for pid=7201 comm=“进程名” scontext=u:r:源类型:s0 tcontext=u:r:目标类型:s0 tclass=访问类别 permissive=0
avc: denied { read } for pid=7517 comm="audio@2.0-servi" name="u:object_r:default_prop:s0" dev="tmpfs" ino=11426 scontext=u:r:hal_audio_default:s0 tcontext=u:object_r:default_prop:s0 tclass=file permissive=0

主要关注以下内容:

  • denied {read}: 表示缺少read权限
  • scontext=u:r:hal_audio_default:s0: 表示hal_audio_default缺少了权限
  • tcontext=u:object_r:default_prop:s0: 表示是对default_prop缺少了权限
  • tclass=file: 表示缺少权限的资源类型为file

因此只要在hal_audio_default.te文件中加入下面内容即可xia

代码语言:javascript
复制
allow hal_audio_default tcontext:file read;

如果需要赋予read, open权限, 当有多个权限时用{}包裹

代码语言:javascript
复制
allow hal_audio_default tcontext:file { read open };

或者参考android/system/sepolicy/public/global_macros中赋予一个复合权限, 如r_file_perms 表示{ getattr open read ioctl lock map }

待补充

以上内容都是基于Android中自带的进程服务进行配置, 如果是自己引入的进程服务, 则需要自行创建.te文件, 这部分内容后续再来填坑QAQ

本文作者: Ifan Tsai ?(菜菜)

本文链接: /developer/article/2164595

版权声明: 本文采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SELinux简述
    • DAC
      • MAC
      • SELinux工作模式
      • 解决avc denied
      • 待补充
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
      http://www.vxiaotou.com