Переход домена SElinux для неинициализированных процессов / файлов ( Android Natvie)

Я пишу программы для Android Native и настраиваю их SEPolicy

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

Я написал 2 программы и поместил встроенный исполняемый файл в /vendor/bin

Одна программа, my_service, работает как служба демона init;

В то время как другой, my_client не является программой init, которая должна быть выполнена вручную

Эти 2 программы используют Binder IPC для связи.

Но у меня возникают проблемы при попытке установить контекст процесса для my_client, который не является программой init


Для my_service его контекст selinux установлен в основном в 2 файлах.

  1. my_service.te
  2. file_context
# In file_context
/vendor/bin/my_service      u:object_r:my_service_exec:s0

# In my_service.te
type my_service, domain;
type my_service_exec, exec_type, file_type, vendor_file_type;

init_daemon_domain(my_service)

И я также использую seclabel в файлах init.rc

# In init.rc
service my_service /vendor/bin/my_service
    class main
    console
    seclabel u:r:my_service:s0

Я проверил и контекст файла, и контекст процесса для my_service, и они установлены так, как я ожидал


Для SEPolicy my_client все аналогично my_service за исключением того, что оно не записано в файле init.rc, поскольку это не программа init

# In file_context
/vendor/bin/my_client      u:object_r:my_client_exec:s0

# In my_client.te
type my_client, domain;
type my_client_exec, exec_type, file_type, vendor_file_type;

init_daemon_domain(my_client)

Однако для my_client my_client_exec установлен только контекст файла

Я попытался запустить my_client и просмотрел контекст процесса:

> # Executing my_client manually
> /vendor/bin/my_client 

> ps -AZ | grep my_client
> u:r:su:s0      root      5838  5514    5948   1688 0    0 R my_client

Контекст процесса su, хотя я ожидал, что это будет my_client

Кроме того, я получаю информацию о init_daemon_domain(XX) в te_macros

Я думаю, что это сделает переход домена: когда init запускает файл с контекстом XX_exec, он передает свой контекст процесса в XX!

Поэтому я изменил правило так:

# init_daemon_domain(my_client)
domain_auto_trans(su, my_client_exec, my_client);

Но это нарушает некоторую заранее определенную политику.


Кстати, связка IPC между этими двумя программами, кажется, работает.

Что сбивает с толку, так это то, что следующие правила все еще работают, даже если контекст процесса не является my_client?

binder_call(my_client, my_service)
binder_call(my_service, my_service)

Есть ли способ сделать переход домена для не-init программы?

Или я что-то не так понимаю в SEPolicy? Потому что все ресурсы, которые я нашел, о настройке SEPolicy для программы init

0 ответов

Другие вопросы по тегам