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 操作无效。

参考博客。