Android 添加SElinux权限,NeverAllow,未生效等全解(超详细)
发布时间:2025-06-24 16:48:50 作者:北方职教升学中心 阅读量:574
目录。
- 1. 概述。
- 2. 定位所需权限。
- 3. 配置所需权限。
- 3.1 使用当前操作对象进行配置。
- 3.2 编译和替换。
- 4. 常见异常。
- 4.1 编译neveralow。
- 4.1.1 定制权限。
- 4.2 操作无效。
1. 概述。
以我自己的方式理解SELinuxSELinux有以下四个重要参数: 操作权限 想要使用改变操作的对象类型 原始所有者的操作 要操作的文件类型。
2. 定位所需权限。
首先,我们进入adb , adb root,setenforce 然后抓住log(adb shell dmesg > log.txt),avc检索关键字。
以下是一个错误的报告。
avc。:。denied。 { 。search。}。;
3.2 编译和替换。
使用此命令编译:make selinux_policy 注: 此时编译可能会遇到neverallow的编译错误,详见下一章。 生成文件路径:$(OUT_TARGET)/vendor/etc/selinux/precompiled_sepolicy 替换相应文件重启即可。当然,有时候你可能在更换后仍然无法完成你想要的操作。您需要再次抓住log,看看是否还有其他avc报错。 注: 根据上述操作添加权限后,,还是会有avc错误下一章对应的内容是可见的。
4. 常见异常。
4.1 编译neveralow。
这种报错的原因往往是我们目前添加的SElinux权限违反了谷歌规定的Neverallow规则。 此时有两种解决方案一种是暴力型,一是规范型。 如果是暴力的,我们会根据错误报告中的提示,注释相应的neverallow规则。 !!!!!!!!记住,这种操作可能会影响各种认证(CTS、VTS)其他未知风险!!! 接下来说说如何规范处理。 这种情况通常发生在我们申请权限时,我们放大了我们需要的权限。 这种情况往往是由于我们在申请权限时我们放大了我们需要的权限。 例如:我们现在需要的一个操作是:能够使我们的应用程序 能够 读写 Led灯驱动文件节点。 但是,当我们申请权限时,相应的命令通常是以下命令: allow untrusted_app devices:file { open read write}; 让我们从字面上理解,所有不信任的应用程序都有所有设备节点(devices:file)读写文件的权限。显然,这是不安全的。显然,这是不安全的。 那么如何解决呢?f;需要自定义一个权限。例如,我们可以将我们需要操作的LED驱动文件节点定义为单独的权限。然后我们只申请这个权限。 接下来我们来介绍一下如何操作。
4.1.1 定制权限。
首先,我们需要确定我们目前操作的文件类型。 例如,我们需要操作/sys/class/leds/brightness文件。在当前目录下,我们可以操作“我们可以操作”ls -Z” 结果如下::
sdm660_64。:。/。# ls。 -。Z。 /。dev。/。moto_sdlu。:。object_r。:。device。:。s0。 /。dev。/。moto_sdl。
我们可以去system//sepolicy/ 或者device/*//sepolicy 检索目录下的关键词“”u:object_r:device:s0”。
QitianM437。-。A603。:。/。work。/。FH16。/。system。/。sepolicy$ grep。 -。rns。 "u:object_r:device:s0"prebuilts。/。api。/。33.0。/。private。/。file_contexts。:。73。:。/。dev。(。/。.。*。)。?。u。:。object_r。:。device。:。s0。private。/。file_contexts。:。73。:。/。dev。(。/。.。*。)。?。u。:。object_r。:。device。:。s0。
我们可以看到在这里,我们将所有/dev下的文件定义为device类型。因此,我们在这两个文件下添加以下内容: /dev/moto_sdl u:object_r:sdl_device:s0 然后在device中.定义我们自定义权限的权限类型: type sdl_device, dev_type, mlstrustedobject 以上我们完成了权限的自定义过程。编译后,我们将操作ls -Z,你会发现它变成了:
sdm660_64。编译后,我们将操作ls -Z,你会发现它变成了:sdm660_64。:。/。 # ls。-。 Z。/。dev。/。moto_sdlu。:。object_r。:。sdl_device。:。 s0。/。dev。/。
moto_sdl。
然后按照第一步重新开始重新配置,这个问题可以解决。
4.2 操作无效。
参考博客。