標籤:
這裡我們先引用一篇資料來自 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_INET和AF_INET6通訊端。
平常一直再root許可權下使用自己的嵌入式裝置,由於工作需要移植了一個mqtt的服務端程式(mosquitto),而這個程式需要以mosquitto使用者使用,沒有辦法便自己增添了一個新使用者,其竟然沒有許可權建立socket
期間想到了android應用的socket許可權,終於找到了這篇資料。
linux新增使用者無法建立socket問題