linux新增用户无法建立socket问题

这里我们先引用一篇资料来自 android攻防权威指南

安全边界和安全策略

  安全边界,有时也会称为信任边界,是系统中分隔不同信任级别的特殊区域。一个最直接的例子就是内核空间与用户空间之间的边界。Android操作系统应用了两套独立但又相互配合的权限模型。在底层,Linux内核使用用户和用户组来实施权限控制,这套权限模型是从Linux继承过来的,用于对文件系统实体进行访问控制,也可以对其他Android特定资源进行控制。以DalvikVM和Android框架形式存在的Android运行时实施了第二套权限模型。这套模型在用户安装应用时是向用户公开的,定义了应用拥有的权限,从而限制Android应用的能力。  

  Android从其根基Linux继承了已经深入人心的类Unix进程隔离机制与最小权限原则。具体而言,进程以隔离的用户环境运行,不能相互干扰,比如发送信号或者访问其他进程的内存空间。因此,Android沙箱的核心机制基于以下几个概念:标准的Linux进程隔离、大多数进程拥有唯一的用户ID(UID),以及严格限制文件系统权限。

  Android系统沿用了Linux的UID/GID(用户组ID)权限模型,但并没有使用传统的passwd和group文件来存储用户与用户组的认证凭据,作为替代,Android定义了从名称到独特标识符Android ID(AID)的映射表。初始的AID映射表包含了一些与特权用户及系统关键用户(如system用户/用户组)对应的静态保留条目。Android还保留了一段AID范围,用于提供原生应用的UID。

#define AID_ROOT         0 /*传统的unix跟用户*/

#define AID_SYSTEM    1000 /*系统服务器*/

#define AID_RADIO     1001 /*通话功能子系统,RIL*/
#define AID_BLUETOOTH 1002 /*蓝牙子系统*/
...
#define AID_SHELL     2000 /*adb shell与debug shell用户*/
#define AID_CACHE     2001 /*缓存访问*/
#define AID_DIAG      2002 /*访问诊断资源*/

/*编号3000系列只用于辅助用户组们,表示出了内核所支持的Android权能*/
#define AID_NET_BT_ADMIN 3001 /*蓝牙:创建套接字*/
#define AID_NET_BT       3002 /*蓝牙:创建sco、rfcomm或l2cap套接字*/  
#define AID_INET         3003 /*能够创建AF_INET和AF_INET6套接字*/
#define AID_NET_RAW      3004 /*能够创建原始的INET套接字*/
...
#define AID_APP            10000 /*第一个应用用户*/

#define AID_ISOLATED_START 99000 /*完全隔绝的沙箱进程中UID的开始编号 */
#define AID_ISOLATED_END   99999 /*完全隔绝的沙箱进程中UID的末尾编号*/
#define AID_USER          100000 /*每一用户的UID编号范围偏移*/
AID_INET用户组允许用户打开AF_INETAF_INET6套接字。

平常一直再root权限下使用自己的嵌入式设备,由于工作需要移植了一个mqtt的服务端程序(mosquitto),而这个程序需要以mosquitto用户使用,没有办法便自己增添了一个新用户,其竟然没有权限建立socket
期间想到了android应用的socket权限,终于找到了这篇资料。




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。