Примечание. Я новичок в политике SELinux и следую vndservicemanager от Android
У меня есть служба Java (MyService), которая запускается на приемнике BootComplete. Теперь я добавляю свой сервис в ServiceManager в onCreate MyService.java.
ServiceManager.addService(mysystemservice, mybinder);
Что касается архитектуры treble, я переместил свое приложение в раздел образа поставщика, добавив ниже в Android.mk приложения.
LOCAL_VENDOR_MODULE := true
Я внес следующие изменения в политику OEM SELinux, ранее она была написана для системной службы, так как я перенес приложение к поставщику, поэтому внес изменения в службу поставщика, предоставив как старую, так и текущую политику SE.
Создан контекст "my_service"
СТАРЫЙ
В private / service_contexts
mysystemservice u:object_r:my_service:s0
СЕЙЧАС
В vendor / common / vndservice_contexts
mysystemservice u:object_r:my_service:s0
Определенный тип услуги
СТАРЫЙ
В public / service.te
type my_service, service_manager_type;
СЕЙЧАС
В vendor / common / vndservice.te
type my_service, vndservice_manager_type;
Теперь даю разрешение на добавление
СТАРЫЙ
В public / servicemanager.te
allow system_app my_service:service_manager add;
СЕЙЧАС
В abc.te
type abc, domain;
type abc_exec, exec_type, vendor_file_type, file_type;
init_daemon_domain(abc)
vndbinder_use(abc)
binder_call(abc, system_app)
add_service(abc, my_service)
allow abc my_service:service_manager find;
allow abc my_service:service_manager add;
После вышеуказанных изменений и полной сборки я вижу, что мой контекст службы является частью out / product / target / vendor / etc / selinux / vndservice_contexts..inplace of out / product / target / system.
Но как только Myservice.java попытается добавить "mysystemservice" в ServiceManager с помощью
ServiceManager.addService (mysystemservice, mybinder);
Я получаю сообщение об ошибке ** avc denied **
E / SELinux: avc: denied {add} for service = mysystemservice pid = 7588 uid = 1000 scontext = u: r: system_app: s0 tcontext = u: object_r: default_android_service: s0 tclass = service_manager permissive = 0 2019-11 -14 12: 44: 39.613 592-592 /? E / ServiceManager: add_service ('mysystemservice', b0) uid = 1000 - РАЗРЕШЕНИЕ ОТКАЗАНО
Как мы видим в журнале выше, Целевой контекст принимает значение по умолчанию "tcontext = u: object_r: default_android_service: s0" вместо "my_service"
Примечание. Если я сохраняю изменения для образа системы, все работает нормально, проблема только в том, что я передаю изменения политики SE поставщику.
Пожалуйста, дайте мне знать, если я что-то пропустил или есть другой способ добавить Сервис.
audit2allow
предлагает как разрешить добавление правила: source.android.com/security/ selinux / validate # using_audit2allow - person Simpl   schedule 04.12.2019vendor/common/vndservice_contexts
содержит полный путь к двоичному файлу (например,/vendor/bin/mysystemservice
). - person Simpl   schedule 09.12.2019Android.mk
илиAndroid.bp
. Но да, я ожидал, что там будет находиться двоичный файл поставщика по умолчанию. Где твойmysystemservice
? - person Simpl   schedule 13.12.2019