SEAndroid 原則位於
/external/sepolicy。您可變更這些原則檔案,觀察套用新原則時會發生什麼情形。變更原則檔案時請密切注意,因為錯誤組態可能讓整個系統在開機時終止。以下為範例:
步驟 1:在修改前進行檢查
首先,我們需要檢查檔案「
/device/intel/baytrail/BoardConfig.mk」。此板的 sepolicy 組態如下:
BOARD_SEPOLICY_DIRS :=
device/intel/baytrail/sepolicy
BOARD_SEPOLICY_UNION :=
file_contexts
seapp_contexts
file.te
genfs_contexts
fs_use
device.te
healthd.te
app.te
untrusted_app.te
surfaceflinger.te
vold.te
ecryptfs.te
zygote.te
netd.te
BOARD_SEPOLICY_DIRS 定義裝置特定原則檔案所在的目錄。
BOARD_SEPOLICY_UNION 代表最終原則組態是結合一般原則檔案及裝置特定原則檔案的結果。在 Android 建置程序期間,建置系統將檢查不同原則之間的衝突。若套用
BOARD_SEPOLICY_ REPLACE,就代表裝置特定原則將取代一般原則組態。
第二,我們需要開啟
「/external/sepolicy/untrusted_app.te」檔案,並檢查其中是否存在下列程式行:
Allow untrusted_app shell_data_file:file rw_file_perms
Allow untrusted_app shell_data_file:dir r_dir_perms
以上兩個原則項目提供權限給不受信任的應用程式 (一般應用程式,並不是系統應用程式),以便使用執行階段環境下的
shell_data_file 類型讀取 / 寫入檔案及讀取目錄。
shell_data_file 指向執行階段環境中
/data/local/tmp/ 的任何檔案,在下列開發環境中的
/external/sepolicy/file_contexts定義:
/data/local/tmp(/.*)? u:object_r:shell_data_file:s0
不過前述權限具有某些限制。若檔案及目錄存在於
/data/loacal/tmp/,則不受信任的應用程式可讀取 / 寫入這些檔案,並進入這些目錄。不過不受信任的應用程式不能在
/data/local/tmp/ 建立自己的檔案和目錄。只有系統應用程式或服務可針對不受信任應用程式建立檔案或目錄。如果要向不受信任的應用程式提供更多權限,可依據步驟 2 所述內容進行變更。
步驟 2:新增新原則項目
現在要編輯「
/device/intel/baytrail/sepolicy/untrusted_app.te」檔案,並將下列兩個程式行新增至檔案結尾:
Allow untrusted_app shell_data_file:file create_file_perms
Allow untrusted_app shell_data_file:dir create_dir_perms
這兩個項目提供不受信任的應用程式權限,在執行階段環境的
/data/local/tmp/ 建立檔案及目錄,於下列開發環境中的
/external/sepolicy/file_contexts 定義:
/data/local/tmp(/.*)? u:object_r:shell_data_file:s0
基本檔案 / 目錄權限於
/external/sepolicy/global_macros 定義:
define(`x_file_perms', `{ getattr execute execute_no_trans }')
define(`r_file_perms', `{ getattr open read ioctl lock }')
define(`w_file_perms', `{ open append write }')
define(`rx_file_perms', `{ r_file_perms x_file_perms }')
define(`ra_file_perms', `{ r_file_perms append }')
define(`rw_file_perms', `{ r_file_perms w_file_perms }')
define(`rwx_file_perms', `{ rw_file_perms x_file_perms }')
define(`link_file_perms', `{ getattr link unlink rename }')
define(`create_file_perms', `{ create setattr rw_file_perms link_file_perms }')
define(`r_dir_perms', `{ open getattr read search ioctl }')
define(`w_dir_perms', `{ open search write add_name remove_name }')
define(`ra_dir_perms', `{ r_dir_perms add_name write }')
define(`rw_dir_perms', `{ r_dir_perms w_dir_perms }')
define(`create_dir_perms', `{ create reparent rmdir setattr rw_dir_perms link_file_perms }')
我們可發現如檔案作業「{ getattr open read ioctl lock }」等權限,與真實檔案系統的檔案作業函數相同。
最後我們需要重新建置 Android 來源樹狀結構,並將新映像置入 Bay Trail FFRD8 裝置。
Comments
Post a Comment