Переход домена 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 файлах.
- my_service.te
- 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