AndroidP-SELinux权限被拒绝用于新创建的服务

问题描述

添加新服务时,发现错误如下:

SELinux : avc:  denied  { add } for service=xxxManagerService pid=3798 uid=1000 scontext=u:r:system_server:s0 tcontext=u:object_r:default_android_service:s0 tclass=service_manager permissive=0

然后在system_server.te添加允许:

allow system_server default_android_service:service_manager { add };

但是发生构建错误

libsepol.report_failure: neverallow on line 517 of system/sepolicy/public/domain.te (or line 10355 of policy.conf) violated by allow system_server default_android_service:service_manager { add };
libsepol.check_assertions: 1 neverallow failures occurred
Error while expanding policy
out/host/linux-x86/bin/checkpolicy:  loading policy configuration from out/target/product/sti6030d111/obj/ETC/sepolicy_neverallows_intermediates/policy.conf
[ 11% 22/200] target thumb C++: libpqcontrol <= vendor/amlogic/common/frameworks/services/systemcontrol/PQ/SSMAction.cpp

我应该怎么做才能通过cts。

解决方法

Android随附一长串neverallow规则,可确保您不授予会破坏设备安全性的权限。幸运的是,这些neverallow规则已在代码中得到了很好的记录。如果您在system/sepolicy/public/domain.te中查找第517行,则会发现以下内容:

不允许service_manager添加默认服务标签。 相反,域应使用更具体的类型,例如 system_app_service而不是通用类型。 在{,hw,vnd} service.te中定义了新的service_types和新的映射 在{,hw,vnd} service_contexts中定义了从服务名称到service_type的所有内容。

您可能使用了audit2allow来创建规则。起初这似乎是一个简单的解决方案,但几乎总会导致难以理解的规则集。最后,除了了解Android SELinux的基础之外,别无他法。

有关更多信息,请参见here

由于您需要做的事情取决于您要添加的服务类型,因此我无法为您提供示例。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...