Android順其天然地繼承了Linux內核的安全機制,同時結合移動終端的具體應用特色,進行了許多有益的改進與提高。linux
window與unix/linux等傳統操做系統以用戶爲中心,假設用戶之間是不可信的,更多考慮如何隔離不一樣用戶對資源(存儲區域與用戶文件,內存區域與用戶進程,底層設備等)的訪問。在Android系統中,假設應用軟件之間是不可信的,甚至用戶自行安裝的應用程序也是不可信的,所以,首先須要限制應用程序的功能,也就是將應用程序置於「沙箱」以內,實現應用程序之間的隔離,而且設定容許或拒絕API調用的權限,控制應用程序對資源的訪問,如訪問文件,目錄,網絡,傳感器等。安全
Android擴展了Linux內核安全模型的用戶與權限機制,將多用戶操做系統的用戶隔離機制巧妙地移植爲應用程序隔離。在linux中,一個用戶標識(UID)識別一個給定用戶;在Android上,一個UID則識別一個應用程序。在安裝應用程序時向其分配UID。應用程序在設備上存續期間內,其UID保持不變。僅限用於容許或限制應用程序(而非用戶)對設備資源的訪問。如此,Android的安全機制與Linux內核的安全模型完美銜接!不一樣的應用程序分別屬於不一樣的用戶,所以,應用程序運行於本身獨立的進程空間,與UID不一樣的應用程序天然造成資源隔離,如此便造成了一個操做系統級別的應用程序「沙箱」。網絡
應用程序進程之間,應用程序與操做系統之間的安全性由Linux操做系統的標準進程級安全機制實現。在默認狀態下,應用程序之間沒法交互,運行在進程沙箱內的應用程序沒有被分配權限,沒法訪問系統或資源。所以,不管是直接運行於操做系統之上的應用程序,仍是運行於Dalvik虛擬機的應用程序都獲得一樣的安全隔離與保護,被限制在各自「沙箱」內的應用程序互不干擾,對系統與其餘應用程序的損害可降至最低。Android應用程序的「沙箱」機制以下圖,互相不具有信任關係的應用程序相互隔離,獨自運行:spa
在不少狀況下,源自同一開發者或同一開發機構的應用程序,相互間存在信任關係。Android系統提供一種所謂共享UID(SharedUserID)機制,使具有信任關係的應用程序能夠運行於同一進程空間。一般 ,這種信任關係由應用程序的數字簽名肯定,而且須要應用程序在manifest文件中使用相同的UID。共享UID的應用程序進程空間以下圖(應用程序數字簽名將在後面詳細講述):操作系統