我有一个使用 JNI 库的 Android 活动,该库使用 netlink 命令配置网络接口(在本例中为 socketcan 接口)。如果我运行该活动,网络接口配置将失败,并出现来自 RTNETLINK的EPERM错误。失败的命令需要CAP_NET_ADMIN功能才能成功完成。因此,以 root 身份运行代码成功,并且以 root 身份运行,然后使用capset将功能限制为仅CAP_NET_ADMIN。
我在应用程序清单中添加了以下权限,这给我的印象是我的进程将获得 NET_ADMIN 功能:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.NET_ADMIN" />
这会将进程置于inet和net_admin组中,但该进程没有收到 CAP_NET_ADMIN 功能,导致 netlink 命令失败并显示 EPERM。
在我对该主题进行的各种搜索中,我发现了应该应用该功能的提示。例如,来自http://elinux.org/Android_Security
#define GID Capability
AID_NET_BT_ADMIN 3001 Can create an RFCOMM, SCO, or L2CAPP Bluetooth socket
AID_NET_BT 3002 Can create a Bluetooth socket
AID_INET 3003 Can create IPv4 or IPv6 socket
AID_NET_RAW 3004 Can create certain kinds of IPv4 sockets??
AID_NET_ADMIN* 3005 Allow CAP_NET_ADMIN permissions for process
不幸的是,这似乎不适用于我的系统。
注意:我正在使用由芯片组供应商修改的系统和内核运行,因此可能已经修改了某些内容,使其无法正常工作。
有人知道吗
- 如果这应该工作?
- 将功能添加到流程还需要哪些其他步骤?
- 是否有可能?