Я пишу нативные программы для Android и устанавливаю их 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 , поскольку он не является программой инициализации
# 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);
Но это нарушает некоторые предопределенные правила.
ByКстати, связующее IPC между этими двумя программами кажется работающим.
Что сбивает с толку, так это то, чтоправила по-прежнему работают, даже если контекст процесса не является my_client ?
binder_call(my_client, my_service)
binder_call(my_service, my_service)
Есть ли способ выполнить переход домена для программы, не являющейся init?
Или я что-то неправильно понимаюо SEPolicy?Потому что все ресурсы, которые я нашел, о настройке SEPolicy для программы инициализации