1. 程式人生 > >Android 安全機制(1)uid 、 gid 與 pid

Android 安全機制(1)uid 、 gid 與 pid

1、概述 

      Android 安全機制來源於Linux,並且以Linux許可權管理為基礎,要了解Android的安全機制,需要從linux中的安全機制瞭解開始,而使用者的許可權管理又是linux安全機制的最基本的一個組成. Android的創新之處是在linux使用者許可權管理的基礎之上建立了Android 程序的沙箱隔離機制.

2、linux中的使用者(UID)、組(GID)、程序(PID)

      在 Linux 中,一個使用者 UID 標示一個給定使用者。Linux系統中的使用者(UID)分為3類,即普通使用者、根使用者、系統使用者。

      普通使用者是指所有使用Linux系統的真實使用者,這類使用者可以使用使用者名稱及密碼登入系統。Linux有著極為詳細的許可權設定,所以一般來說普通使用者只能在其家目錄、系統臨時目錄或其他經過授權的目錄中操作,以及操作屬於該使用者的檔案。通常普通使用者的UID大於500,因為在新增普通使用者時,系統預設使用者ID從500開始編號。
      根使用者也就是root使用者,它的ID是0,也被稱為超級使用者,root賬戶擁有對系統的完全控制權:可以修改、刪除任何檔案,執行任何命令。所以root使用者也是系統裡面最具危險性的使用者,root使用者甚至可以在系統正常執行時刪除所有檔案系統,造成無法挽回的災難。所以一般情況下,使用root使用者登入系統時需要十分小心。
      系統使用者是指系統執行時必須有的使用者,但並不是指真實的使用者。比如在RedHat或CentOS下執行網站服務時,需要使用系統使用者apache來執行httpd程序,而執行MySQL資料庫服務時,需要使用系統使用者mysql來執行mysqld程序。在RedHat或CentOS下,系統使用者的ID範圍是1~499。下面給出的示例顯示的是目前系統執行的程序,第一列是執行該程序的使用者。

       組(GID)又是什麼呢?事實上,在Linux下每個使用者都至少屬於一個組。舉個例子:每個學生在學校使用學號來作為標識,而每個學生又都屬於某一個班級,這裡的學號就相當於UID,而班級就相當於GID。當然了,每個學生可能還會同時參加一些興趣班,而每個興趣班也是不同的組。也就是說,每個學生至少屬於一個組,也可以同時屬於多個組。在Linux下也是一樣的道理。

3、linux中程序的使用者管理 (PID與UID、GID的關係)

      每個程序都擁有真實的使用者、組(uid、gid),有效的使用者、組(euid、egid),儲存的設定使用者、組(suid、sgid),還有linux中專門用於檔案儲存存取的使用者、組id(fsuid、fsgid對於unix系統沒有這兩個fields)。現說明程序中每種型別使用者的功能:

      (1)真實的使用者、組(uid、gid):程序的真正所有者。每當使用者在shell終端登入時,都會將登入使用者作為登入程序的真正所有者。通過getuid來獲得程序的真正使用者所有者,修改程序的真正使用者所有者可以通過setuid、seteuid、setresuid、setreuid。

      (2)有效的使用者、組(euid、egid):程序的有效使用者、組。程序所執行各種操作所允許的許可權(process credentials)是依據程序的有效使用者來判斷的,(在linux系統中(核心2.4以上)又引入了一個新的程序許可權管理模型process capabilities,通過process capabilities來確定程序所允許的各種操作[可參看《深入理解linux核心》table 20-3])。通過geteuid來獲得程序的有效使用者,修改程序的有效使用者可以通過setuid、seteuid、setresuid、setreuid、seteuid。

      (3)檔案系統的使用者、組(fsuid、fsgid):用於進行檔案訪問的使用者、組,這是linux系統中新引入的一類使用者、組,對於unix系統檔案的訪問是通過euid來判斷,沒有函式獲得程序的fsuid,用於修改有效使用者的函式都會同時修改fsuid,如果要單獨修改fsuid,而不修改euid,可以呼叫setfsuid。

      (4)儲存的設定使用者、組(suid、sgid):儲存的設定使用者、組。程序中該型別的使用者、組主要的用處是用於還原有效使用者,觀察到對於非超級使用者用於修改有效使用者的各個函式setuid、seteuid、setresuid、setreuid、seteuid普遍有一個前提條件就是如果修改後的有效使用者是原先的suid則允許修改,利用這一點,程序可以修改有效使用者到一個新使用者,然後還原到原來的值(原來的值儲存在儲存設定的使用者)。通過getresuid來獲得程序的真實使用者、有效使用者、儲存的設定使用者。

4、Android 系統中的UID、GID、GIDS與PID

        在 Android 上,一個使用者 UID 標示一個應用程式。應用程式在安裝時被分配使用者 UID,應用程式在裝置上的存續期間內,使用者 UID 保持不變。對於普通的應用程式,GID即等於UID。

        GIDS 是由框架在 Application 安裝過程中生成,與 Application 申請的具體許可權相關。 如果 Application 申請的相應的 permission 被 granted ,而且有對應的GIDS, 那麼 這個Application 的 gids 中將 包含這個 gids。記住許可權(GIDS)是關於允許或限制應用程式(而不是使用者)訪問裝置資源。

        Android 使用沙箱的概念來實現應用程式之間的分離和許可權,以允許或拒絕一個應用程式訪問裝置的資源,比如說檔案和目錄、網路、感測器和 API。為此,Android 使用一些 Linux 實用工具(比如說程序級別的安全性、與應用程式相關的使用者和組 ID,以及許可權),來實現應用程式被允許執行的操作。

圖 1. 兩個 Android 應用程式,各自在其自己的基本沙箱或程序上

圖:兩個 Android 應用程式,各自在其自己的基本沙箱或程序上(具有不同的使用者 ID)

        Android 應用程式執行在它們自己的 Linux 程序上,並被分配一個惟一的使用者 ID。預設情況下,執行在基本沙箱程序中的應用程式沒有被分配許可權,因而此類應用程式訪問系統或資源受到限制,Android 應用程式只能通過應用程式的 manifest 檔案請求許可權。

        不同的應用程式可以執行在相同的程序中。對於此方法,首先必須使用相同的私鑰簽署這些應用程式,然後必須使用 manifest 檔案給它們分配相同的 Linux 使用者 ID,這通過用相同的值/名定義 manifest 屬性 android:sharedUserId 來做到,從而共享對其資料和程式碼的訪問,如圖2所示

圖 2. 兩個 Android 應用程式,執行在同一程序上

圖:兩個 Android 應用程式,執行在同一程序上(具有相同的數字簽名和相同的 Linux 使用者 ID)

5、總結

在 Android 上,一個應用程式只有一個UID,當然多個應用程式也可以共享一個UID。

對 於普通應用程式來說, gid 等於 uid 。由於每個應用程式的 uid 和 gid 都不相同, 因此不管是 native 層還是 java 層都能夠達到保護私有資料的作用 。

一個GIDS相當於一個許可權的集合,一個UID可以關聯GIDS,表明該UID擁有多種許可權

一個程序就是host應用程式的沙箱,裡面一般有一個UID和多個GIDS,每個程序只能訪問UID的許可權範圍內的檔案和GIDs所允許訪問的介面,構成了Android最基本的安全基礎。

6、參考文獻

1、http://blog.csdn.net/nuoline/article/details/8610811

2、http://book.51cto.com/art/201401/427710.htm

3、http://www.educity.cn/wenda/174474.html

4、http://www.cnblogs.com/zhiyinjixu/articles/2252371.html

相關推薦

Android 安全機制1uid gid pid

1、概述        Android 安全機制來源於Linux,並且以Linux許可權管理為基礎,要了解Android的安全機制,需要從linux中的安全機制瞭解開始,而使用者的許可權管理又是linux安全機制的最基本的一個組成. Android的創新之處是在linux使

Android IPC機制1

前言 本系列主要介紹Android的IPC機制,Android中多程序的概念以及多程序開發的注意事項,程序間通訊的方式等。 1.IPC簡介 IPC是Inter-Process Communication的縮寫,含義為程序間通訊或者跨程序通訊,指兩個程序間進行資

自動記憶體管理機制1- java記憶體區域虛擬機器物件

自動記憶體管理機制(1)- java記憶體區域與虛擬機器物件 1. 執行時資料區域 Java虛擬機器在執行Java程式的過程中會把它所管理的記憶體劃分為若干個不同的資料區域。有的區域隨著虛擬機器進行的啟動而存在,有些區域則以來使用者執行緒的啟動和結束而建立和銷燬。 有以下幾個區域

Android基礎1--textviewbuttononclick

1.作用 2.屬性 3. 5554. 4 4 5.

14SpringBoot-CRUD錯誤處理機制1

ESS cep contex edi ide str provider boot wid 一、springboot默認的處理機制 1.瀏覽器返回一個錯誤的頁面 默認處理錯誤:返回一個錯誤的頁面: 包括錯誤類型、時間...... 2.其他客戶端訪問 默認響應一個jso

信息安全系列1-- 信息安全入門

經濟 tex 作用 安全 重要 href 技術分享 尊敬 互動 緣起 安全是發展的前提,發展是安全的保障,安全和發展要同步推進。”尊敬的習總書記針對信息完全做過精辟的論述。的確如此,隨著互聯網+戰略的全面推進,信息技術在國民經濟、國防建設當中扮演基礎性、支撐性的作用。伴隨

API安全設計1

技術 ref 項目 creat 升序 服務器 sig base test 1、API簡介 這段時間和外部公司合作,一直在寫對外API接口。提供的API接口是基於http協議的,也是無狀態的。每次請求都必須帶上身份認證信息。後臺服務對身份信息進行校驗。 基於HTTP協議的AP

Tomcat1介紹jdk安裝安裝Tomcat ? 配置Tomcat監聽80端口

tomcat Tomcat介紹(使用yum 下載安裝的openjdk下載以後就可以使用)以下實驗用的是在官網下載程序包。Tomcat是一個中間鍵,要解析java相關的東西,需要先下載JDK下載jdk1.下載網站: http://www.oracle.com/technetwork/jav

大資料基礎之Quartz1簡介原始碼解析

一簡介 官網 http://www.quartz-scheduler.org/ What is the Quartz Job Scheduling Library? Quartz is a richly featured, open source job scheduling libra

大資料基礎之Kafka1簡介安裝及使用

http://kafka.apache.org   一 簡介 Kafka® is used for building real-time data pipelines and streaming apps. It is horizontally scalable,&nb

《機器學習-西瓜書》-周志華-學習筆記系列1--序言前言和主要符號表

寫在前面的話: 自己於今天(2018年9月4日)看完了機器學習-西瓜書-周志華-清華大學出版社書籍,對於這本書的評價就是:好書,自己可以在每一個字裡行間感受到作者的用心,每當看到一個不懂的名詞的時候,作者都會用通俗的例子來講解,遇到公式的時候,也會進行推導,側邊欄的一些說明資訊往往能帶給自己

Hibernate1——簡單快速上手

目錄 1. Hibernate-orm 2. 快速上手 2.1 步驟 2.2 建立資料庫表t_user 2.3 建立java物件User.java 2.4 新增jar 2.5  建立hibernate核心配置檔案hibernate.cfg.xml 2.6&n

dubbo心跳機制 1

此文已由作者趙計剛授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 dubbo的心跳機制: 目的:檢測provider與consumer之間的connection連線是不是還連線著,如果連線斷了,需要作出相應的處理。 原理: prov

MapReduce框架學習1——輸入輸出格式

參考: JeffreyZhou的部落格園 《Hadoop權威指南》第四版 在前面的學習中,完成了幾件事: 搭建並測試Hadoop完全分散式環境; 在master節點上配置Hadoop的E

Android IPC機制2

前言 本章主要講解Android中IPC的通訊方式。。。 1.Bundle Bundle實現了Parcelable介面,且四大元件中Activity、Service、Receiver都支援在Intent中傳遞Bundle。傳輸的資料必須能夠被序列化,如基本型別、實現了了P

android之animationanimationsetinterpolator

一: animationset: 他是一個animation的一個子類,實際上是animation的一個集合。他將animation放到一個list集合中。需要對animation的基本設定可以通過animationset來設定。如果需要對一個控制元件進行多種動畫設定,可以採用animat

解讀Android之Service1基礎知識

本文翻譯自Android官方文件 一個Service是一個長期可以在後臺執行(當然不需要提供UI)的應用元件。其它元件可以啟動service,即使切換到另一個應用,該service仍然可以在後臺執行。另外,其它元件可以繫結一個service進行互動,甚至可以進行程序間通訊(interproces

MySql語句大全1

#查資料 select * from test; #取所有資料 select * from test limit 0,2; #取前兩條資料 select * from test email like '%qq%' #查含有qq字元 _表示一個 %表示多個 select

QMUI Android的學習——1引入庫配置主題,並實現沉浸式狀態列效果

最近進行安卓方面的學習,其中用到了騰訊開源的Android UI框架——QMUI Android,這是一個封裝完善的Android UI元件庫,可以給專案的開發提高了很高的工作效率,但是官方的API文件並不是很詳細,所以需要花費時間通過對官方給出的QMUIDEMO進行學習。 這是官方網站:htt

寫給Android App開發人員看的Android底層知識1

這個系列的文章一共8篇,我醞釀了很多年,參考了很多資源,查看了很多原始碼,直到今天把它寫出來,也是戰戰兢兢,生怕什麼地方寫錯了,貽笑大方 (一)引言 早在我還是Android菜鳥的時候,有很多技術我都不太明白,也都找不到答案,比如apk是怎麼安裝的,比如資源是怎