我想在我正在开发的 Android 应用程序上路由流量,尽管我在访问内核上的 ip 表时遇到问题。我不确定普通应用程序开发人员是否可以访问它,但我正在尝试。
根据 Android 的 network-stack,应该使用
/system/bin/ip-wrapper-1.0
来访问路由表,例如,/system/bin/ip-wrapper-1.0 route add table 1001234 224.0.0.0/24 dev wlan0
来添加表并路由多播流量。
问题:这给我带来了权限被拒绝的问题。根据上面的文档,我需要在SELinux策略中添加以下域转换规则:
domain_auto_trans(VENDOR-DOMAIN-NAME, netutils_wrapper_exec, netutils_wrapper)
我需要将其添加到什么政策中?我需要制定自己的政策吗?如何将此政策与我的特定计划联系起来?
我在互联网上搜索了有关将其添加到什么策略或如何创建自己的供应商策略的文档,但没有关于此的明确文档(或者至少我不明白......)。我希望得到关于如何执行此操作的帮助,或者关于应用程序开发人员(不是 Android 开发人员)是否应该接触此问题的明确答案。
我不确定android上的selinux是否与red hat上的相同,但我想,概念应该是相同的。
您需要创建自己的 selinux 模块。 SELinux 模块在“安装”(加载到内存)之前“编译”(宏扩展等)。
SELinux 模块只不过是带有一堆允许规则(或包装这些规则的宏)的简单文本文件。 要编译模块,您可能需要找到一个可以为您完成此操作的工具,因为系统上应该存在安装工具。
例如,在 Red Hat 上有一个名为
policycoreutils-devel
的软件包,其中包含特定于 SELinux 模块编译的 Makefile
。您可以使用您自己的模块定义作为输入来调用此 makefile,这将为您提供一个已编译的模块 - 一个 .pp 文件。
安装这个 .pp 文件就可以了!
您提到的
domain_auto_trans
是一个宏,当您编译放置此类宏的模块时,它将被扩展。也许你可以查一下这个宏的内部。