我寫的有關Smack和Android系統結合的技術部落格,希望有志之士可以參透其中奧妙,Smack作為Linux核心安全模組,已經可以移植到Android系統中,如果大家弄清我寫的Smack安全性原則,可以結合自己想法,將Smack繼續和Android系統結合,將會發揮更好的存取控制效果。
為了實現模組化編程,libsmack庫作為靜態庫或動態庫裝載,並為其它功能模組提供調用介面。libsmack庫包含了smack開放給應用程式層的工具 + 生產力,其中較常用的是load_smack、setsmack和setsmackrule,它們分別表示裝載smack虛擬檔案系統、特權進程為自身設定安全性標籤和特權進程向/smack/load中寫人smack規則。
1. 定義標頭檔和源檔案
開啟終端shell,輸入指令“cd /android4.0/externalmkdir libsmack cd libsmack mkdir include mkdir src”,其中include為標頭檔所在目錄,src為源檔案所在目錄。切換到include目錄中,輸入指令“mkdir smack cd smack vim smack.h”,定義以上三個函數,如下所示:
切換到src目錄下,建立load_smack.c、setsmackrule.c和setsmack.c三個檔案並將這些函數實現。load_smack函數使用mount函數來掛載smackfs,setsmackrule首先格式化參數,然後利用write函數向/smack/load寫入一條smack規則,setsmack利用write函數向“/proc/self/attr/current”中寫入進程安全性標籤。
2. 定義Android.mk檔案
Android.mk檔案是Android源碼的編譯檔案,包含了編譯規則,類似Linux的makefile檔案,Android.mk書寫是有規則可循的,在此不再闡述。在該檔案中加入“include $(BUILD_STATIC_LIBRARY)”和“include $(BUILD_SHARED_LIBRARY)”將其編譯成靜態和動態連結程式庫。