解决Android log中selinux报错问题

1. 问题

如题,Android运行的时候看log发现了如下的selinux权限相关的log,尝试将这个问题解决,下面记录一下解决的步骤。

	行 804: E000001  01-01 08:00:02.700   311   311 I auditd  : type=1400 audit(0.0:4): avc: denied { search } for comm="mke2fs" name="ext4" dev="sysfs" ino=19653 scontext=u:r:e2fs:s0 tcontext=u:object_r:sysfs_fs_ext4:s0 tclass=dir permissive=0
	行 805: M000001  01-01 08:00:02.700   311   311 W mke2fs  : type=1400 audit(0.0:4): avc: denied { search } for name="ext4" dev="sysfs" ino=19653 scontext=u:r:e2fs:s0 tcontext=u:object_r:sysfs_fs_ext4:s0 tclass=dir permissive=0

2. 分析

从上面的log可以得到如下信息:
scontext: u:r:e2fs:s0 // 谁缺少权限
tcontext: u:object_r:sysfs_fs_ext4:s0 // 对什么文件缺权限
tclass: dir // 缺权限的文件是什么类型
denied{search} // 缺少什么权限
有了这些信息,可以知道我们需要找到e2fs.te的文件添加如下语句:

allow e2fs sysfs_fs_ext4:dir search;

3. 解决问题

3.1 添加权限

有了前面的分析,现在需要找到系统中这个e2fs.te文件在什么位置,全局搜索了一下,应该是这个文件:

system/sepolicy/public/e2fs.te

# 同时还有当前使用的api下的文件也是需要做相应的修改
system/sepolicy/prebuilts/api/30.0/public/e2fs.te

注意上面的两个文件内容是相同的,为了不出差错,修改的时候也在同一个位置进行改动,修改后内容如下:

type e2fs, domain, coredomain;
type e2fs_exec, system_file_type, exec_type, file_type;

allow e2fs devpts:chr_file { read write getattr ioctl };

allow e2fs dev_type:blk_file getattr;
allow e2fs block_device:dir search;
allow e2fs userdata_block_device:blk_file rw_file_perms;
allow e2fs metadata_block_device:blk_file rw_file_perms;
allow e2fs dm_device:blk_file rw_file_perms;
allowxperm e2fs { userdata_block_device metadata_block_device dm_device }:blk_file ioctl {
  BLKSECDISCARD BLKDISCARD BLKPBSZGET BLKDISCARDZEROES BLKROGET
};

allow e2fs {
  proc_filesystems
  proc_mounts
  proc_swaps
}:file r_file_perms;

# access /sys/fs/ext4/features
allow e2fs sysfs_fs_ext4_features:dir search;
allow e2fs sysfs_fs_ext4_features:file r_file_perms;

# access SELinux context files
allow e2fs file_contexts_file:file r_file_perms;

allow e2fs sysfs_fs_ext4:dir search;

修改完成之后开始编译,此时发现有报错,sysfs_fs_ext4这个类型并没有定义,找不到该类型。

3.2 解决类型未定义问题

现在需要找到定义类型的文件,加上该类型的定义。找了一遍之后发现应该是如下文件定义:

system/sepolicy/public/file.te
system/sepolicy/prebuilts/api/30.0/public/file.te

这里找到的这两个文件还是相同的,因此修改完应该还是一样的。找到这个文件的适当的位置加上类型定义,由于文件较大,就不贴上全部代码了

# 可以找到这个文件其他的定义sysfs_fs相关的类型的地方进行定义
type sysfs_fs_ext4, sysfs_type, fs_type;

修改完成两个文件之后继续编译,此时报错中有关键字:duplicate,由于忘记截图了没法贴上,大概的意思就是这个类型重复定义了,看打印的log和packages/services/Carcar_product/sepolicy/public/file.te冲突了,找到这个文件去掉了其中的定义。继续编译没有这个报错了。
现在有了新的问题,看log显式其他的26.0、27.0、28.0、29.0的api报错了。

3.3 其他api编译报错问题

大概是因为我给上层的file.te文件加上了新的类型,这些api虽然没有使用到,但是也需要更新进去。做如下修改:

# 对26.0、27.0、28.0、29.0几个文件夹做修改
# 路径: system/sepolicy/prebuilts/api/2?.0/public/file.te
# 加上如下内容
type sysfs_fs_ext4, sysfs_type, fs_type;

整编通过,刷机验证之后问题已经解决,相关的selinux没有了。

4. 总结

这里介绍的方法是在system/sepolicy下添加一个新类型的selinux配置,如果要修改的类型在file.te中已经定义过了,则只需要执行3.1的步骤就修改两个文件就可以了。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值