在手机上通过Linux Deploy安装了一个Ubuntu系统,在root环境下执行的联网命令都没有问题,直到我回到普通用户下执行了ping命令,提示Temporary failure in name resolution
错误。
检查了/etc/resolv.conf
等文件,添加了aid_inet
aid_net_raw
等用户组也没用,nslookup
traceroute
等命令也无法得到结果,而加上sudo就可以。
网上查找了许多方法也无果。
后来使用了strace -f ping xxx
命令得到了ping的系统调用过程,中间有一大段库调用提示No such file or directory错误,不确定有无影响,不过在最后几行明显有一个sendto(...)的调用返回了一个errno EPERM(Operation not permitted),网上查到的说明要么是防火墙DROP packet,要么是缺少/etc/nsswitch.conf
文件,在我看来应该是权限不足,因为我在容器中设置防火墙报出内核不支持,在安卓外面设置防火墙也没有效果。
折腾半天后本来打算放弃了,但这时我注意到系统给我分配的uid和gid是60000,看了一下passwd文件,1000、2000、3000都被系统占用了,还注意到有如下两行:
aid_app_start:x:10000:10000::/:/bin/false
aid_app_end:x:19999:19999::/:/bin/false
这不免引起我的一些猜想,于是试着将uid与gid改成了5000,再ping一下,居然ping通了!
我想应该是这个uid段的用户有权限使用系统资源,不同uid范围的用户权限等级也不一样。
这背后的原因暂且不追究,先记录下来再说。
评论区(暂无评论)