Android程序的安全系統 獲取系統權限

轉自:http://my.unix-center.net/~Simon_fu/?p=531


最近在移植Android過程中遇到了Android程序(apk)權限的問題。最近也對這方面進行了一些瞭解,在此和大家分享。

    Android框架是基於Linux內核構建,所以Android安全系統也是基於Linux的安全架構建立的。在Linux安全系統中,用戶和組起着重要的作用,Linux中所有的資源給不同的用戶和用戶組設置了不同的訪問屬性。如果你對Linux下面用戶和組的概念不熟悉,請先補習一下Linux基礎知識。

   在Android系統中,系統爲每一個應用程序(apk)創建了一個用戶和組。這個用戶和組都是受限用戶,不能訪問系統的數據,只能訪問自己的文件和目錄,當然它也不能訪問其他應用程序的數據。這樣設計可以儘可能地保護應用程序的私有數據,增強系統的安全性和健壯性。

     但是有一些應用程序是需要訪問一些系統資源的。比如Setting程序,他就需要訪問wiffi,在系統中創建刪除文件等等操作。怎樣做到這一點兒呢?Android通過一定途徑可以獲得system權限。獲得system用戶權限,需要以下步驟:

1. 在應用程序的AndroidManifest.xml中的manifest節點中加入android:sharedUserId="android.uid.system"這個屬性。
2. 修改Android.mk文件,加入LOCAL_CERTIFICATE := platform這一行
3. 使用mm命令來編譯,生成的apk就有修改系統時間的權限了。

    一般情況下system用戶權限就已經夠用了,system用戶可以在系統中創建和刪除文件,訪問設備等等。但是有些情況下system權限還是不夠的。比如:設置網卡IP地址,ifconfig命令是需要root權限的。我可以很肯定的說,在Android下面應用程序是沒有可能拿到root權限的。但是如果我的應用程序需要root權限怎麼辦呢?只能想辦法繞般過去。就以我的問題爲例,設置網卡IP地址,root權限下面命令爲:

ifconfig eth0 192.168.1.188

在普通用戶或者system用戶權限下面這條命令是不起作用的,但是不會返回失敗和異常,這個我個人認爲是Android的bug。那麼怎樣實現這個功能呢?我想出了兩個辦法。

1、系統啓動的時候init進程創建一個後臺進程,該進程處於root用戶權限下面。用來監聽系統中應用程序的請求(可以用socket實現),並代其完成。這樣應用程序就可以執行root用戶權限的任務了。

2、實現一個虛擬的設備,該設備的功能就是在內核態幫應用程序執行相應的命令。Linux內核態沒有權限的問題了。肯定可以執行成功。

     我解決設置網卡IP地址問題時,選擇是後者。相對來說設計比較簡單。

     如果你到網上去搜一下,你會發現很多文章說怎樣讓Android應用程序獲得root權限。如果你不想浪費時間就不要相信他們,因爲那些途徑是根本不可能獲得root權限的。

    我的後續博文《Android應用程序獲得root權限》講解讓應用程序(APK)通過第一種方法獲得root權限的方法,請關注。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章