我是Android世界的新手
我想知道如何为本地活页夹客户端程序设置 SEPolicy (以及要设置的内容。)
我正在使用Using Binde-IPC
中的供应商资料夹(vndservicemanager)参考我为所需的SEPolicy添加了一些文件
现在我有两个内置的可执行文件- my_binder_service 和 my_client
它们都在/ vendor / bin /
下my_binder_service 在引导时启动,它将为服务添加到供应商servicemanager
my_client 是一个使用活页夹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
到目前为止我有什么?
以上内容已通过 ps -AZ 和 vndservice list 命令
在强制模式下进行了验证。我通过以下方式检查被拒绝的邮件
dmesg | grep avc | grep my_
logcat | grep avc: | grep my_
但是在许可模式和强制模式下我都没有找到任何消息
我还通过 ps -AZ 检查了这2个运行过程的上下文:
u:r:my_binder_service:s0 <- for my_binder_service
u:r:su:s0 <- for my_client
我发现 my_client
的流程上下文设置不正确我认为这可能是强制模式下 my_client 的问题
由于init.rc文件中的 seclabel 命令,我认为 my_binder_service 设置正确
但是我不知道在哪里为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的问题吗?
答案 0 :(得分:0)
几个小时后,我找到了解决问题的方法。
事实证明,这与客户端程序的SEPolicy无关
首先,我发现 vndservice列表在强制模式下并没有干扰my_binder_service,我将 permissive 模式的结果混为一谈。
然后,我再次检查Using Binder IPC中的SOP以查看是否遗漏了任何东西。
事实上!我确实错过了很多事情...
这是我所做的所有修改
# In vndservice_contexts
my_binder_service u:object_r:my_binder_service:s0
我认为 init.rc 中的 seclabel 有效,但事实证明,此行还是有必要的
# In my_binder_service.te
type my_binder_service, domain, vndservice_manager_type;
allow my_binder_service self:service_manager add;
添加了vndservice_manager_type 并根据 logcat |添加允许规则grep avc:结果和 audit2allow 命令
我对 my_client.te 所做的唯一更改是删除了其中的 init_domain_daemon()
因为我在检查te_macros文件后发现它不合理
最后,一切都在强制模式
下运行除了 my_client 的 process context 仍然是 su 而不是 my_client ,我认为这可能是与这个问题无关。
也许对客户端和服务器之间的IPC唯一重要的是以下几行
binder_call(my_client, my_binder_service);
binder_call(my_binder_service, my_client);