Я работаю над созданием собственного исполняемого сервиса Android, который запускается init (я регистрирую его в init.rc) при загрузке системы. Этот собственный исполняемый файл создает прослушивание сокета 0.0.0.0:4615 и должен принимать подключения извне.
ОС Android K; он работает на комплекте для разработки, который имеет интерфейс Ethernet для подключения к локальной сети.
Я провел тест, запустив тот же собственный исполняемый файл в оболочке adb, что и root. Он работает нормально — внешний сокет-клиент на моей машине с Windows может подключиться к собственному исполняемому файлу и успешно отправить / отправить сообщение. Когда я запускаю его с помощью init, он успешно прослушивает 0.0.0.0:4615, но внешний сокет-клиент не может к нему подключиться — соединение отклонено.
Фрагмент, который я добавил в init.rc:
service msger-daemon /system/bin/msgerd
class main
Когда «ps» проверил пользователя msgerd, мы обнаружили, что это root.
Пожалуйста, помогите, спасибо!
Решено путем добавления файла политики SE в $ TOP / external / sepolicy, содержимое этого файла:
# File types must be defined for file_contexts.
type msgerd, domain;
type msgerd_exec, exec_type, file_type;
init_daemon_domain(msgerd)
permissive msgerd;
# Add msgerd to various domains
net_domain(msgerd)
allow msgerd self:capability { net_admin net_raw };
Если кто-то хотел бы обзор и совет, добро пожаловать!