selinux报avc denied权限和编译报neverallow 解决方案

简介: selinux报avc denied权限和编译报neverallow 解决方案

在android修改代码后,经常会遇到运行时报avc denied问题。

下面是我遇到的案例,以及我的解决方案,发出来供大家参考一下。

运行avc denied的日志:

03-08 11:00:02.502  6849  6849 W om.sdt.diagnose: type=1400 audit(0.0:500): avc: denied { write } for name="com.sdt.diagnose-1rFiy5LUwRI4Ho1vif0zwQ==" dev="dm-8" ino=155515 scontext=u:r:system_app:s0 tcontext=u:object_r:apk_data_file:s0 tclass=dir permissive=0

根据SEinux policy规则,我们在相应的.te文件中添加allow规则

allow system_app apk_data_file:dir{write };

接着编译一下android,发现编译会报never allow的错误,报错内容如下:

libsepol.report_failure: neverallow on line 489 of system/sepolicy/public/app.te (or line 10249 of policy.conf) violated by allow system_app apk_data_file:dir { write };
libsepol.check_assertions: 1 neverallow failures occurred
Error while expanding policy

报错原因也比较直接,就是domain域中指明的规则,我们先看下为什么会报错吧

直接打开编译报错中那个domain.te,路径:system/sepolicy/public/app.te,找到和我们添加的部分,搜索“apk_data_file”,可以找到如下内容了,看一下就明白了,不允许我们这样修改了。

neverallow { appdomain -platform_app }
    apk_data_file:dir_file_class_set
    { create write setattr relabelfrom relabelto append unlink link rename };

那是什么原因导致的这个编译报错呢?

说直白一点就是当前这个process进程申请的权限过高了。

那有没有办法绕过这个报错呢?

当然是有的,可以参考如下步骤:

1、先查看一下是哪些相关的代码申请的这个权限,主要是判断一下是申请的属性还是device节点访问权限等。

system\sepolicy\public\attributes

2、新增加一个SELinux type

根据申请的类型可以进修改一下访问的Object的Lable

比如我这里是device节点,那我就在device.te(file.te)中

type my_apk_data_file, fs_type;

3、绑定文件到这个SELinux type

因为我这里知道我访问的是/data/tcpdump文件,我在第一步中确认的,

所以在file_contexts中添加如下代码。

/data/tcpdump(/.log)? u:object_r:my_apk_data_file:s0

4、修改te文件,添加process/domain的访问权限

这里就比较简单了,直接添加对应的规则就可以了。

allow system_app my_apk_data_file:dir { write };

最后重新再编译一下android,就不会再报之前的编译问题了。

 

另外补充一个在用户空间调用ioctl导致的selinux权限报错问题

报错日志如下:

[   36.348961] type=1400 audit(88595.495:24): 
avc: denied { ioctl } for comm="tee-supplicant" path="/dev/mmcblk1rpmb" dev="tmpfs" ino=25620 ioctlcmd=0xb301 scontext=u:r:tee:s0 tcontext=u:object_r:tee_rpmb_device:s0 tclass=chr_file permissive=0

报错原因是Google在Android Q上增强了对ioctl的审查,除保持对ioctl的审查/授权之外,对具体的ioctlcmd也需要进一步地审查/授权。

那有没有办法解决这个报错呢?当然也是有的~

解决方法如下:

1、在对应的te文件添加如下code

根据报错的日志,添加如下对应code即可。

allow tee tee_rpmb_device:chr_file { open read write ioctl };
allow tee tee_rpmb_device:blk_file ioctl;
allowxperm tee tee_rpmb_device:blk_file ioctl 0xb301;


目录
相关文章
|
6月前
|
Linux 数据安全/隐私保护
Linux中普通用户使用sudo命令提示lin is not in the sudoers file. This incident will be reported.
Linux中普通用户使用sudo命令提示lin is not in the sudoers file. This incident will be reported.
|
5月前
|
Ubuntu Unix Linux
Linux 用户使用sudo时 显示xxx is not in the sudoers file.This incident will be reported.的解决方法
Linux 用户使用sudo时 显示xxx is not in the sudoers file.This incident will be reported.的解决方法
148 1
|
5月前
|
安全 网络协议 Linux
探索Linux命令nss-policy-check:数据安全的守护者
`nss-policy-check`是Linux工具,用于检测名称服务策略的安全性,防止配置错误或风险。它检查`/etc/nsswitch.conf`,确保用户、组等信息解析的正确性。命令参数包括 `-f` 指定配置文件,`-v` 显示详细信息,`-q` 输出错误。定期运行此命令并关注输出,是维护系统安全的关键。修改配置前记得备份。
|
安全 Linux 数据安全/隐私保护
Linux文件访问权限检查与修改:基于access函数的实现
在Linux系统中,文件访问权限是非常重要的概念,它决定了用户对文件的读、写和执行权限。为了确保文件安全和数据保护,我们经常需要检查和修改文件的访问权限。本文将详细介绍Linux下基于`access`函数的文件访问权限检查和修改方法,并提供代码示例,帮助读者深入了解文件权限管理。
553 0
|
Linux
Linux重新启动后提示 Failed to load SELinux policy. Freezing系统hung住
重新启动之前修改了selinux的配置,disable selinux,估计多半是修改的时候哪里改错了。
221 0
|
缓存 编解码 安全
SELinux 权限问题导致 GreatSQL 运行不了的坑
SELinux 权限问题导致 GreatSQL 运行不了的坑
133 0
|
Linux
linux 下 root 权限执行 npm install 报错:Error:EACCES:permission denied ‘xxx‘?
linux 下 root 权限执行 npm install 报错:Error:EACCES:permission denied ‘xxx‘?
316 0
linux 下 root 权限执行 npm install 报错:Error:EACCES:permission denied ‘xxx‘?
Linux 服务器报错Permission denied: ‘/root/.cache‘ ,PYTHON_EGG_CACHE无权限的问题
Linux 服务器报错Permission denied: ‘/root/.cache‘ ,PYTHON_EGG_CACHE无权限的问题
Linux 服务器报错Permission denied: ‘/root/.cache‘ ,PYTHON_EGG_CACHE无权限的问题
麒麟安装增强功能失败(未解决):Could not downgrade policy file /etc/selinux/targeted/policy/policy.29
麒麟安装增强功能失败(未解决):Could not downgrade policy file /etc/selinux/targeted/policy/policy.29
198 0
Linux_异常_02_WinSCP上传文件时显示Permission denied
异常现象如下:         二、解决方案 1.设置对应目录权限全开,就可以上传文件到这个目录了 sudo chmod 777 /devloper
1966 0