android許可權管理

2021-08-08 04:58:38 字數 2413 閱讀 4511

問題

kernel檢查

跟蹤到kernel中net/core/dev.c,在函式dev_ioctl中,會檢查cap_net_admin許可權:

if(!

capable

(cap_net_admin

))

return

-eperm

;

進入這個函式,發現檢查的是程序是否在group aid_net_admin中:

if(

cap

==cap_net_admin

&&in_egroup_p

(aid_net_admin

))

return0;

這裡aid_net_admin跟android在init中的許可權定義有些類似。

android許可權定義

在system/core/include/private/android_filesystem_config.h中,android定義了一組uid和gid,如aid_root, aid_system, aid_net_admin。每乙個id對應有字串,如root, system, net_admin。當使用者程式需要訪問受限資源是,需要保證自己加入到對應的group中。

我在frameworks中搜尋net_admin,沒有找到任何檔案。搜尋藍芽許可權net_bt_admin時,找到了檔案/etc/permissions/platform.xml。這裡存放有androidmanifest.xml中許可權與底層許可權的對應關係:

name

="android.permission.bluetooth_admin"

>

gid="net_bt_admin"

/>

我想,當開發者在androidmanifest.xml中申請許可權時,framework會通過platform.xml將它對應到net_bt_admin,進而確定所屬組aid_***。這樣,每個apk就有不同的許可權。

另外,在android_filesystem_config.h,還可以看到為某些特定目錄和特定檔案靜態設定的group,如/system/bin/ping加入了aid_net_raw。嘗試

我在platform.xml的android.permission.internet許可權下加入了group net_admin,使它變成:

name

="android.permission.internet"

>

gid="inet"

/>

gid="net_admin"

/>

然後,在androidmanifest.xml中請求許可權android.permission.internet。重啟系統後執行apk,發現可以修改mac了!

apk檔案的group設定

packagemanagerservice建構函式會解析platform.xml,建立android許可權和gid的對應關係。然後,掃瞄apk時,會由請求的許可權找到對應的gid,並儲存在package類中。

packagemanagerservice

() readpermissions

();/* 解析/etc/permissions/platform.xml */

readpermissionsfromxml

() readpermission

()/* 建立permisstion名字與gid的關係,放在map msettings.mpermissions中*/

scandirli

() updatepermissionslp

() grantpermissionslp

()

grantpermissionslp

()

protectionlevel有4種:

normal - 安裝時即授予許可權,不需要確認

dangerous - 危險的許可權,需要使用者確認授予

signatureorsystem - 擁有相同的signature,或者放在system image中

i

/activitymanager

(134

):start

proc com

.android

.settings

foractivity com

.android

.settings

/.settings

:pid

=792

uid=

1000

gids

=

後面的就是所在的組的id列表。

Android許可權管理

編譯配置 許可權判斷 feature許可權宣告及分配 frameworks base data etc platform.xml 特殊feature許可權開放 如在 system etc permissions目錄下增加android.hardware.usb.host.xml檔案 handheld...

Android 6 0許可權管理

android 6.0在我們原有的androidmanifest.xml宣告許可權的基礎上,又新增了執行時許可權動態檢測,以下許可權都需要在執行時判斷 身體感測器 日曆攝像頭 通訊錄地理位置 麥克風 簡訊儲存空間 if contextcompat.checkselfpermission this,m...

Android 6 0 許可權管理

android 6.0 之後許可權需要動態的獲取,否則是無法正常使用某些功能的。主布局檔案 主要是來模擬動態的獲取許可權,因此布局檔案中無其他多餘內容,其中textview也可以省略。使用3.1 在全域性中 宣告 private static final int request code camer...