Linux非root用户使用socket出现“Permission denied”解决方式

最近出于安全问题,需要对系统的某些程序进行降权,保护用户数据,但是发现将应用程序降权之后,出现了通过socket()函数创建socket时报没有权限,后面网上找了一些文章,也没有找到具体原因。

当时找到的解决方式基本都是说增加sudo权限执行。如果可以增加sudo的,不需要降权的,压根就没有这个问题了,排除。想了想,android手机上面的应用,肯定的都是有socket通信的,怎么会不行呢,应该某些配置不对导致的。后来在ubuntu系统上测试,发现非root用户也是可以正常创建socket的,得了,肯定是哪些配置不对。之前看到文章介绍说非root用户只能使用1000以上的端口,但是这里仅是创建socket,都还没有到配置网络端口呢,排除。最后和其他人帮助下,发现了内核的一个配置CONFIG_ANDROID_PARANOID_NETWORK,发现去掉这个配置之后,非root用户也可以正常的创建socket了,问题解决

下面再来看看 CONFIG_ANDROID_PARANOID_NETWORK 这个玩意是干什么的?

Android内核有一个特殊的CONFIG_ANDROID_PARANOID_NETWORK扩展,只允许网络访问用户AID_INET和AID_NET_RAW组。同时在内核搜索代码发现,bt、ipv4、ipv6都有根据这个宏进行一些权限检查。

解决该问题也可以尝试通过执行下面的命令,给你的用户增加socket权限:

usermod -a -G aid_inet,aid_net_raw SomeUser

上面方法还没有测试过,具体可以实测, usermod命令介绍

Linux usermod命令用于修改用户帐号,usermod可用来修改用户帐号的各项设定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chengwei_peng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值