Android安全機制
Android系統是基於Linux核心開發的,因此,Android系統不僅保留和繼承了Linux作業系統的安全機制,而且其系統架構的各個層次都有獨特的安全特性。
Linux核心安全機制
Android的Linux核心包含了強制存取控制機制和自主存取控制機制。強制存取控制機制由Linux安全模組來實現。自主存取控制機制通常由檔案存取控制來實現,Linux檔案系統的許可權控制是由user、group、other與讀(r) 、寫(w) 、執行(x)的不同組合來實現的。這樣,每個檔案都有三個基本許可權集,它們的組合可以容許、限制、拒絕使用者、使用者組和其他使用者的訪問。通常,只有uid是“system”或“root”使用者才擁有Android系統檔案的存取權限,而應用程式只有通過申請Android許可權才能實現對相應檔案的訪問,也正因為此,Android使用核心層Linux的自主存取控制機制和運行時的Dalvik虛擬機器來實現Android的“沙箱”機制。
Android的“沙箱”機制
Android“沙箱”的本質是為了實現不同應用程式和進程之間的互相隔離,即在預設情況下,應用程式沒有許可權訪問系統資源或其它應用程式的資源。每個APP和系統進程都被分配唯一併且固定的User Id,這個uid與核心層進程的uid對應。每個APP在各自獨立的Dalvik虛擬機器中運行,擁有獨立的地址空間和資源。運行於Dalvik虛擬機器中的進程必須依託核心層Linux進程而存在,因此Android使用Dalvik虛擬機器和Linux的檔案存取控制來實現沙箱機制,任何應用程式如果想要訪問系統資源或者其它應用程式的資源必須在自己的manifest檔案中進行聲明許可權或者共用uid。
Android中的資料分為system和data兩個區,其中system是唯讀,data是用來存放應用自己的資料,這樣保證系統資料不會被隨意改寫。
應用許可權機制
任何一個應用程式在使用Android受限資源(網路、電話、簡訊、藍芽、通訊錄、SdCard等)之前都必須以XML檔案的形式事先向Android系統提出申請,等待Android系統批准後應用程式方可使用相應的資源,許可權與Java的API是多對多的映射關係。
如何讓兩個app運行在同一個進程裡? 1. 兩個app用相同的private key來簽名。 2. 兩個app的Manifest檔案中添加android:sharedUserId 設定成相同的UID。