【发布时间】:2019-09-07 10:10:30
【问题描述】:
我是 Android 世界的新手
我想知道如何为原生 binder 客户端程序设置 SEPolicy (以及设置什么......)
我正在使用来自 Using Binde-IPC 的供应商绑定器 (vndservicemanager) 参考
我为所需的 SEPolicy 添加了一些文件
现在我有两个构建的可执行文件 - my_binder_service 和 my_client
它们都在 /vendor/bin/ 下
my_binder_service在开机时启动,它会向vendor servicemanager添加服务
my_client 是一个使用 binder IPC 执行 my_binder_service
中的某些功能的程序这是我在 init.rc
中的设置service my_binder_service /vendor/bin/my_binder_service
class main
class oneshot
class console
seclabel u:r:my_binder_service:s0
到目前为止我有什么:
- my_binder_service 在启动时成功启动
- 可以向vendor servicemanager添加服务
- my_client 在 permissive 模式 下表现良好
以上内容在强制模式下通过ps -AZ和vndservice list命令验证
但是,my_client 在强制模式下遇到分段错误
我通过
检查被拒绝的消息dmesg | grep avc | grep my_
logcat | grep avc: | grep my_
但是我在permissive和enforcing模式下都没有找到任何消息
我还通过 ps -AZ 检查了这 2 个正在运行的进程的上下文:
u:r:my_binder_service:s0 <- for my_binder_service
u:r:su:s0 <- for my_client
我发现 my_client
的进程上下文设置不正确我认为这可能是 my_client 在强制模式下的问题
我认为 my_binder_service 设置正确是因为 init.rc 文件中的 seclabel 命令
但我不知道在哪里为 my_client 设置进程上下文
这里是my_client.te的内容(my_binder_service.te与此类似)
type my_client, domain;
type my_client_exec, exec_type, file_type, vendor_file_type;
init_daemon_domain(my_client)
allow my_client my_client_exec:file entrypoint;
allow my_client serial_device:chr_file { read write };
vndbinder_use(my_client);
binder_call(my_client, my_binder_service);
文件上下文在file_context文件中指定
/vendor/bin/my_binder_service u:object_r:my_binder_service_exec:s0
/vendor/bin/my_client u:object_r:my_client_exec:s0
SEPolicy 部分是否缺少任何内容?
或者这不是 SEPolicy 的问题?
【问题讨论】:
标签: android android-source selinux android-binder seandroid