Как собственный исполняемый файл Android принимает внешние подключения к сокету?

Я работаю над созданием собственного исполняемого сервиса 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.

Пожалуйста, помогите, спасибо!

0

Решение

Решено путем добавления файла политики 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 };

Если кто-то хотел бы обзор и совет, добро пожаловать!

0

Другие решения