MTK平臺-Android O版本 App 如何獲取自定義節(jié)點的訪問權(quán)限-SELinux

前言

工作中可能會遇到SELinux 的一些錯誤,希望本文可以幫助工程師提高開發(fā)效率

知識點:
1.Android O 版本 SELinux Policy 路徑的一些思考
2.Android O 版本 APP 如何獲取sys file system 中節(jié)點的寫權(quán)限
3.Android O 版本 APP 如何獲取proc file system 中節(jié)點的寫權(quán)限

1.SELinux Policy 路徑

O 版本: 將SELinux Policy 文件存放在下面目錄
1). Google 原生目錄 alps/system/sepolicy
2). MTK 配置目錄 alps/device/mediatek/sepolicy/
注意的是里面有basic, bsp, full 目錄.
其中basic 目錄所有的版本都會吃到; bsp 目錄則是bsp 版本 + Turnkey 版本都會吃到; full 目錄則是只有Turnkey 版本會吃到
那么我們到底應(yīng)該改basic, bsp, full哪個路徑呢?
device/mediatek/mt6580/BoardConfig.mk

BoardConfig.mk

如果MTK_BSP_PACKAGE為yes,那么系統(tǒng)將編譯basic, bsp這2個目錄
否則編譯basic, bsp,full這三個目錄
MTK_BSP_PACKAGE定義在device/mediateksample/tecno8321p2_6953/ProjectConfig.mk

ProjectConfig.mk

結(jié)論:修改basic和bsp任意一個目錄都可以,最終這2個目錄下都會整合成一個te文件?。?!

2.Android O APP 如何獲取sys file system 中節(jié)點的寫權(quán)限

平時工作中,我們會自定義節(jié)點去做一些功能,例如:
創(chuàng)建節(jié)點: /sys/devices/virtual/torch/torch/torch_level
寫入1 ,后手電筒亮,寫入0 ,后手電筒滅。

當你添加完需求之后,可能會遇到SELinux的錯誤

 avc: denied { write } for name="torch_level"  dev="sysfs"  ino=9205 
 scontext=u:r:system_app:s0  tcontext=u:object_r:sysfs:s0  tclass=file  
permissive=0
   分析過程:
    缺少什么權(quán)限:      { write }權(quán)限,
    誰缺少權(quán)限:        scontext=u:r:system_app:s0
    對哪個文件缺少權(quán)限:tcontext=u:object_r:sysfs:s0
    什么類型的文件:     tclass=file
    解決方法:誰缺少權(quán)限,我們就改動{誰.te},這里改動system_app.te

方案一:暴力解決方案,不推薦

  1. device/mediatek/sepolicy/basic/non_plat/system_app.te
    或者device/mediatek/sepolicy/bsp/non_plat/system_app.te
    allow system_app sysfs:file { write };
    2.system/sepolice/private/app.te
    注釋掉谷歌官方邏輯



    這樣改雖然可以解決問題, 但是Google 默認禁止app , 包括system app, radio app
    等直接寫/sys 下面的文件, 認為這個是有安全風險的。
    如果直接放開SELinux 權(quán)限, 會導致CTS 無法通過.因此不推薦這種改法。

方案二:自定義類型,推薦

  1. 在device/mediatek/sepolicy/basic/non_plat/file.te 定義torch_level SELinux type
type  app_torch_file,   fs_type,sysfs_type; 

//這里app_torch_file名字可以隨意取,原則是方便理解

  1. 在device/mediatek/sepolicy/bsp/non_plat/file_context 綁定 torch_level 對應(yīng)的label
/sys/devices/virtual/torch/torch/torch_level  u:object_r:app_torch_file:s0
  1. 在device/mediatek/sepolicy/basic/non_plat/system_app.te 中申請權(quán)限.
        allow   app   system_app_torch_file:file   rw_file_perms;

這里的rw_file_perms是一個包含所有的讀寫權(quán)限
define(r_file_perms',{ getattr open read ioctl lock }')
define(w_file_perms',{ open append write }')
define(rw_file_perms',{ r_file_perms w_file_perms }')

  1. 為其它的process 申請相關(guān)的權(quán)限(如果需要)
device/mediatek/sepolicy/basic/non_plat/system_server.te
allow   system_server   app_torch_file:file   rw_file_perms;

5.device/mediatek/mt6580/init.mt6580.rc
或者device/mediateksample/{Project}/init.project.rc

如果以上4步都無法訪問,請?zhí)砑右韵聶?quán)限
chmod 0666 /sys/devices/virtual/torch/torch/torch_level
chown root system /sys/devices/virtual/torch/torch/torch_level

方案三:綁定service訪問,推薦 (需要應(yīng)用工程師配合)
通過system server service 或者 init 啟動的service 讀寫,
然后app 通過binder/socket 等方式連接APP 訪問.
此類安全可靠, 并且可以在service 中做相關(guān)的安全審查, 推崇這種方法.

3.Android O APP 如何獲取proc file system 中節(jié)點的寫權(quán)限

同樣有3種方案,這里只講
方案二:自定義類型,推薦
具體的做法下面以 fm app 控制/proc/fm_antenna_en來說明.
方案二:自定義類型,推薦

  1. 在device/mediatek/sepolicy/basic/non_plat/file.te 定義proc_fm_antenna_en SELinux type
type proc_fm_antenna_en, fs_type; 

//這里proc_fm_antenna_en名字可以隨意取,原則是方便理解

  1. 在sepolicy/basic/non_plat/genfs_contexts 綁定 proc_fm_antenna_en對應(yīng)的label
genfscon  proc  /fm_antenna_en   u:object_r:proc_fm_antenna_en:s0

//這里格式要注意, /fm_antenna_en是去掉proc后具體的節(jié)點路徑

  1. 在device/mediatek/sepolicy/basic/non_plat/platform_app.te 中申請權(quán)限.
allow      platform_app     proc_fm_antenna_en:file       rw_file_perms;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,663評論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,125評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 175,506評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,614評論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,402評論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,934評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,021評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,168評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,690評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 40,596評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,784評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,288評論 5 357
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,027評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,404評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,662評論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,398評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,743評論 2 370

推薦閱讀更多精彩內(nèi)容

  • 綜述 項目需求:客戶有一個老化apk,自動測試閃光燈。新增以下節(jié)點,控制閃光燈亮滅。/sys/devices/vi...
    c楓_擼碼的日子閱讀 3,582評論 0 3
  • 快速閱讀 框架 SELinux介紹 看Android怎么寫? 如何確認是SELinux 約束引起? 怎么抓取SEL...
    鋤禾豆閱讀 36,830評論 12 17
  • 歷史 Android的安全模型是基于一部分應(yīng)用程序沙箱(sandbox)的概念, 每個應(yīng)用程序都運行在自己的...
    惡魔殿下_HIM閱讀 34,772評論 4 24
  • 收拾完辦公室最后一點東西,心情終于放松了一些。 八年了,那一柜子的書,筆記,資料,承載著多少個奮斗,拼...
    小煙MM閱讀 250評論 0 1
  • 大概真的是老了,累了吧,開始不斷地懷念,不斷地思索,聽那些過去的歌開始忍著淚水微笑,從前不覺得會有人因為一首歌動什...
    丟了心的火龍果閱讀 152評論 0 0