Отказано в разрешении AndroidP-SELinux для новой созданной службы

#android #linux #permissions #selinux #cts

#Android #linux #разрешения #selinux #cts

Вопрос:

когда я добавляю новую службу и нахожу ошибку следующим образом:

 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.

Ответ №1:

Android поставляется с длинным списком neverallow правил, которые гарантируют, что вы не предоставляете разрешения, которые нарушают безопасность вашего устройства. К счастью, эти neverallow правила хорошо документированы в коде. Если вы посмотрите строку 517, system/sepolicy/public/domain.te вы найдете это:

Не разрешайте service_manager добавлять ярлыки служб по умолчанию. Вместо этого домены должны использовать более конкретный тип, такой как system_app_service, а не общий тип. Новые service_types определены в {,hw,vnd}service.te, а новые сопоставления имени службы с service_type определены в {,hw, vnd}service_contexts .

Вероятно, вы использовали audit2allow для создания правила. Поначалу это кажется простым решением, но это почти всегда приводит к тому, что набор правил будет трудно читать. В конце концов, нет другого пути, кроме понимания основ SELinux в Android.

Смотрите здесь для получения дополнительной информации.

Я не могу привести вам пример того, что делать сейчас, поскольку то, что вам нужно сделать, зависит от типа службы, которую вы хотите добавить.