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

Я пишу нативные программы для Android и устанавливаю их 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 , поскольку он не является программой инициализации

# 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 для программы инициализации

...