1. 程式人生 > >繞過selinux許可權一種方法

繞過selinux許可權一種方法

問題:在Android應用中刪除一些敏感的資料夾會有許可權問題,但是按照下面更改之後CTS認證會Fail。

allow system_app system_app_data_file:file execute;
allow system_app system_data_file:dir write

思路:

依據一:init.rc中service的啟動流程絕對不會有許可權問題

依據二:刪除操作可以用rm -rf等shell命令操作

需求:刪除操作要求重啟後生效

想法:

把需要執行的命令寫在shell指令碼中,作為service嵌到init.rc檔案中。通過判斷自定義屬性值決定是否執行,而這個屬性值可以在應用中設定。

部分程式碼如下:

init.kane.rc

...
# 開機程式判斷屬性值,執行指令碼
service deldata /cleansettingsdata.sh
    class main
    user root
    group root
    disabled
    oneshot

on property:factory.deldata=1
    start deldata
...

cleansettingsdata.sh

# 刪除指令碼示例
rm -rf /data/system/usr/0

device.mk

...
# 匯入指令碼
PRODUCT_COPY_FILES += $(DEVICE_FOLDER)/cleansettingsdata.sh:root/cleansettingsdata.sh
...

下面兩個檔案是對屬性進行進一步設定用的,可以不加。

property_contexts

...
# 給屬性打標籤
factory.deldata u:object_r:factory_deldata_prop:s0
...

factory.te

...
# 定義型別,用於設定這個屬性的許可權
type factory_deldata_prop,property_type;
...