什么可以导致socket()“Permission denied”错误?

时间:2016-04-05 12:49:28

标签: permissions android sockets

在Android 4下,当作为Permission denied <运行时,以下简单的原生C代码行失败并显示 root 错误 /强>:

online_socket = socket(AF_INET, SOCK_DGRAM, 0);

执行拥有root对设备的访问权限,但希望以非特权用户身份运行该进程。

请注意,即使在绑定套接字之前也会发生错误。

我想有一些需要调整的安全设置?任何人都可以告诉我在哪里看?

在这种情况下,操作系统实际上是Android,但我猜这个问题确实与Linux有关(因为Android基于Linux内核)。

对于那些想知道:这是一个自定义程序,运行在Android 4环境中运行的完整(debootstrap ped)Debian Jessie安装。

更新

我了解到Android内核有一个特殊的CONFIG_ANDROID_PARANOID_NETWORK扩展程序,只允许AID_INETAID_NET_RAW组中的用户访问网络。

但是,即使将用户添加到这些群组后,socket()仍然被拒绝(并且ping似乎也有同样的问题,BTW)。

uid=5(imp) gid=51(imp) groups=51(imp),3003(aid_inet),3004(aid_net_raw),3005(aid_admin),3001(aid_bt),3002(aid_bt_net)

我无法判断是否在此特定内核中设置了CONFIG_ANDROID_PARANOID_NETWORK标志,因为我无法访问配置文件。

更新2

我发现root 这两个非特权用户imp实际上可以成功调用socket() - 至少使用上述群组设置。

但是,调用与root相同的流程,然后使用 imp 系统调用切换到seteuid()会阻止socket()成功。有什么想法吗?

2 个答案:

答案 0 :(得分:13)

事实证明,Android使用了一个使用CONFIG_ANDROID_PARANOID_NETWORK激活的特殊内核补丁。此修补程序允许网络访问属于具有硬编码ID的特定特殊组的系统用户。

groupadd -g 3001 aid_bt
groupadd -g 3002 aid_bt_net
groupadd -g 3003 aid_inet
groupadd -g 3004 aid_net_raw
groupadd -g 3005 aid_admin

这是因为Android通常仅在特定应用具有网络权限时才向这些群组添加用户(即应用)。

向这些群组添加用户可以使用socket(),如问题中所述:

usermod -a -G aid_bt,aid_bt_net,aid_inet,aid_net_raw,aid_admin someuser

但是,当某个进程使用seteuid()root切换到非特权用户(例如someuser)时,这还不够(或者可能) 无关)此有效用户具有aid_*组成员资格。相反,root用户必须明确地成为这些组的成员:

usermod -a -G aid_bt,aid_bt_net,aid_inet,aid_net_raw,aid_admin root

这解决了我的问题。

请注意,我也尝试使用setegid()和类似的替代方案,但这些都没有帮助......

答案 1 :(得分:0)

那些在Android上与apt-get纠缠的人(启用了CONFIG_ANDROID_PARANOID_NETWORK,从而限制了对特定组成员的用户的网络访问)有两种解决方法:

  1. groupadd -g 3003 aid_inet && usermod -G nogroup -g aid_inet _apt
  2. echo 'APT::Sandbox::User "root";' > /etc/apt/apt.conf.d/01-android-nosandbox

这是因为apt-get在沙盒用户下运行http / https / gpgv方法,默认情况下为_apt

root      1465  0.0  0.0  31408  4956 pts/0    S    11:48   0:00  |   |       \_ -bash
root     23814  0.1  0.1  65300 10124 pts/0    T    18:58   0:00  |   |           \_ apt-get update
_apt     23818  0.0  0.1  90208  8852 pts/0    T    18:58   0:00  |   |           |   \_ /usr/lib/apt/methods/http
_apt     23819  0.0  0.1  90208  8828 pts/0    T    18:58   0:00  |   |           |   \_ /usr/lib/apt/methods/https
...