我正在开发一个Android本机可执行服务,它在系统启动时由init(我在init.rc中注册)启动。此本机可执行文件创建一个侦听0.0.0.0:4615的套接字,并且应该接受来自外部的连接。
操作系统是Android K;它运行在一个开发套件上,该套件具有以太网接口,可将其插入Lan。
我已经完成了以root身份在adb shell中运行相同本机可执行文件的测试。它工作正常 - 我的Windows机器上的外部套接字客户端可以成功连接到本机可执行文件和发送/ recv消息。当我通过init启动它时,它成功侦听0.0.0.0:4615,但外部套接字客户端无法连接到它 - 连接被拒绝。
我在init.rc中添加的代码段是:
service msger-daemon /system/bin/msgerd
class main
当“ps”检查msgerd的用户时,我们发现它是root。
请帮助,谢谢!
答案 0 :(得分:0)
通过在$ TOP / external / sepolicy下添加SE策略文件解决该文件的内容:
# 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 };
如果有人想查看和建议,欢迎!