日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

[Android L]SEAndroid开放设备文件结点权限(读或写)方法(涵盖常用操作:sys/xxx、proc/xxx、SystemProperties)热门干货

發(fā)布時(shí)間:2025/4/16 Android 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Android L]SEAndroid开放设备文件结点权限(读或写)方法(涵盖常用操作:sys/xxx、proc/xxx、SystemProperties)热门干货 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

點(diǎn)擊打開鏈接

溫馨提示

? ? ?建議你先了解一下上一篇博文([Android L]SEAndroid增強(qiáng)Androd安全性背景概要及帶來的影響)所講的內(nèi)容,先對(duì)SEAndroid窺個(gè)全貌,然后再繼續(xù)本節(jié)內(nèi)容。

1 現(xiàn)象描述


基于Android L版本源碼環(huán)境進(jìn)行開發(fā)時(shí),根據(jù)項(xiàng)目需求,APP層需要操作sys/xxx 或 proc/xxx下面的文件結(jié)點(diǎn),但是會(huì)報(bào)出以下權(quán)限異常,無法直接操作這些結(jié)點(diǎn) LedLightFileUtil( 4671): java.io.FileNotFoundException: /sys/class/leds/green/brightness: open failed: EACCES (Permission denied) LedLightFileUtil( 4671): at libcore.io.IoBridge.open(IoBridge.java:456) LedLightFileUtil( 4671): at java.io.FileOutputStream.<init>(FileOutputStream.java:87) LedLightFileUtil( 4671): at java.io.FileOutputStream.<init>(FileOutputStream.java:127) LedLightFileUtil( 4671): at java.io.FileOutputStream.<init>(FileOutputStream.java:116)
【聲明】歡迎轉(zhuǎn)載,但請(qǐng)保留文章原始出處:http://blog.csdn.net/yelangjueqi/article/details/46761987

2 問題原因


自Android L版本,Google對(duì)源碼環(huán)境普遍啟用SELinux安全訪問機(jī)制,APP及framework層默認(rèn)情況下再無權(quán)限訪問設(shè)備節(jié)點(diǎn)如(sys/xxx,proc/xxx)

3 解決方法


下面以三種常用操作角度闡述為system app進(jìn)程或system server進(jìn)程開放權(quán)限的方法 1) SEAndroid 為sys設(shè)備文件結(jié)點(diǎn)開放訪問(讀或?qū)?權(quán)限的方法(如:/sys/class/leds/green/brightness) 2)?SEAndroid 為proc設(shè)備文件結(jié)點(diǎn)開放訪問(讀或?qū)?權(quán)限的方法(如:/proc/touchscreen_feature/gesture_data) 3)?SEAndroid 為SystemProperties的自定義屬性開放set(寫)權(quán)限的方法

3.1?SEAndroid 為sys設(shè)備文件結(jié)點(diǎn)開放訪問(讀或?qū)?權(quán)限的方法(如:/sys/class/leds/green/brightness)

以操作LED燈的設(shè)備文件節(jié)點(diǎn)為例進(jìn)行說明,如綠燈:/sys/class/leds/green/brightness,為APP層system app進(jìn)程開放該節(jié)點(diǎn)訪問權(quán)限(讀或?qū)? 綠燈: /sys/class/leds/green/brightness //快捷方式 /sys/devices/soc.0/gpio-leds.66/leds/green/brightness //實(shí)際節(jié)點(diǎn)
PS:默認(rèn)是在external/sepolicy目錄下面,但是MTK平臺(tái)和QCOM平臺(tái)都創(chuàng)建了自己管理SELinux policy的目錄: MTK:alps/device/mediatek/common/sepolicy QCOM:android/device/qcom/sepolicy/common 所以建議你在其平臺(tái)的相應(yīng)目錄下面去操作,下面以QCOM平臺(tái)為例,MTK平臺(tái)配置步驟方法是一樣的(alps/device/mediatek/common/sepolicy)
3.1.1 在android/device/qcom/sepolicy/common/file.te,定義selinux type:sysfs_wingtk_leds,如下:
type?sysfs_wingtk_leds, fs_type, sysfs_type;
3.1.2 在android/device/qcom/sepolicy/common/file_contexts,綁定sysfs_wingtk_leds到對(duì)應(yīng)的實(shí)際節(jié)點(diǎn),注意是實(shí)際節(jié)點(diǎn)
/sys/devices/soc.0/gpio-leds.66/leds/green/brightness?u:object_r:sysfs_wingtk_leds:s0
PS:可以把/sys/class/leds/green/brightness也聲明下,該句不是必須的:
/sys/class/leds/green/brightness?u:object_r:sysfs_wingtk_leds:s0
匯總:file_contexts的修改如下:
/sys/class/leds/green/brightness u:object_r:sysfs_wingtk_leds:s0 /sys/devices/soc.0/gpio-leds.66/leds/green/brightness u:object_r:sysfs_wingtk_leds:s0
3.1.3 在android/device/qcom/sepolicy/common/system_app.te,申請(qǐng)權(quán)限:
allow system_app?sysfs_wingtk_leds:file rw_file_perms;
PS:也可以為其他process申請(qǐng)相關(guān)的權(quán)限,如:system_server,在android/device/qcom/sepolicy/common/system_server.te
allow system_server sysfs_wingtk_leds:file rw_file_perms;
PS:配置第2步的實(shí)際節(jié)點(diǎn)時(shí),怎么獲取實(shí)際節(jié)點(diǎn),方法如下:
root@K31-t7:/sys/class/leds #?ll -Z lrwxrwxrwx root root u:object_r:sysfs:s0 flashlight -> ../../devices/soc.0/flashlight.64/leds/flashlight lrwxrwxrwx root root u:object_r:sysfs:s0 green -> ../../devices/soc.0/gpio-leds.66/leds/green lrwxrwxrwx root root u:object_r:sysfs:s0 lcd-backlight -> ../../devices/soc.0/1a00000.qcom,mdss_mdp/qcom,mdss_fb_primary.124/leds/lcd-backlight lrwxrwxrwx root root u:object_r:sysfs:s0 mmc0:: -> ../../devices/soc.0/7824900.sdhci/leds/mmc0:: lrwxrwxrwx root root u:object_r:sysfs:s0 mmc1:: -> ../../devices/soc.0/7864900.sdhci/leds/mmc1:: lrwxrwxrwx root root u:object_r:sysfs:s0 red -> ../../devices/soc.0/gpio-leds.66/leds/red lrwxrwxrwx root root u:object_r:sysfs:s0 torch-light0 -> ../../devices/soc.0/qcom,camera-led-flash.65/leds/torch-light0 root@K31-t7:/sys/class/leds #
通過?ll -Z?命令就可以查到。
3.1.4 在AndroidManifest.xml,配置:android:sharedUserId="android.uid.system",該步時(shí)必須的,因?yàn)榈谌绞? allow system_app?sysfs_wingtk_leds:file rw_file_perms;?//僅允許system_app進(jìn)程訪問.
經(jīng)過以上四步,APP層就可以正常讀寫:/sys/class/leds/green/brightness
為了更好地控制訪問權(quán)限,如果存在APP層和framework層都要訪問某個(gè)設(shè)備節(jié)點(diǎn),筆者認(rèn)為最好以此模式來訪問設(shè)備節(jié)點(diǎn),即不讓system_app進(jìn)程訪問,僅僅允許system_server進(jìn)程來訪問,如下: allow system_server sysfs_wingtk_leds:file rw_file_perms;
缺點(diǎn):需要在framework層添加隨系統(tǒng)啟動(dòng)的service,增加代碼量 優(yōu)點(diǎn):1.可以自由控制哪些應(yīng)用可以訪問,哪些應(yīng)用禁止訪問已經(jīng)開放的設(shè)備節(jié)點(diǎn),可以更好的保護(hù)安全問題 2.framework層和APP層都可以訪問該設(shè)備節(jié)點(diǎn).不用再另外進(jìn)行權(quán)限申請(qǐng)

3.2?SEAndroid 為proc設(shè)備文件結(jié)點(diǎn)開放訪問(讀或?qū)?權(quán)限的方法(如:/proc/touchscreen_feature/gesture_data),以MTK平臺(tái)為例

修改記錄
細(xì)節(jié)展開

3.2.1 在alps/mediatek/common/sepolicy/file.te 定義selinux type: proc_quick_gesture,如下: type proc_quick_gesture, fs_type;
3.2.2?在 alps/mediatek/common/sepolicy/genfs_contexts,綁定proc_quick_gesture到對(duì)應(yīng)的實(shí)際節(jié)點(diǎn) genfscon proc /touchscreen_feature/gesture_data ? u:object_r:proc_quick_gesture:s0

3.2.3?在alps/mediatek/common/sepolicy/common/system_app.te,申請(qǐng)權(quán)限 allow system_app?proc_quick_gesture:file rw_file_perms;
3.2.4 在AndroidManifest.xml,配置:android:sharedUserId="android.uid.system" 經(jīng)過以上4步,system_app進(jìn)程就具備權(quán)限(讀或?qū)?訪問/proc/touchscreen_feature/gesture_data等節(jié)點(diǎn)啦

3.3?SEAndroid 為SystemProperties的自定義屬性開放set(寫)權(quán)限的方法

問題描述 SystemProperties對(duì)自定義屬性沒有寫權(quán)限,即set時(shí)提示沒有權(quán)限,導(dǎo)致寫不成功 解決方法 以"persist.backgrounddata.enable"為例介紹開放屬性權(quán)限方法
以QCOM平臺(tái)為例 3.3.1?android/device/qcom/sepolicy/common/property.te
type persist_backgrounddata_prop, property_type;
3.3.2?android/device/qcom/sepolicy/common/property_contexts
persist.backgrounddata.enable u:object_r:persist_backgrounddata_prop:s0
3.3.3?android/device/qcom/sepolicy/common/system_app.te,為system_app進(jìn)程開放權(quán)限
allow system_app persist_backgrounddata_prop:property_service set;
3.3.4?在AndroidManifest.xml,配置:android:sharedUserId="android.uid.system"
經(jīng)過以上4步,就可以使用SystemProperties.set("persist.backgrounddata.enable"", xx)設(shè)置屬性了。

延伸閱讀

如果通過以上步驟正確配置之后,你仍沒有權(quán)限讀寫sys或proc節(jié)點(diǎn),是不是DAN都碎了。再告訴你下,你需要到init.rc里面配置: chown system system 文件結(jié)點(diǎn),然后chmod下文件結(jié)點(diǎn)。兩個(gè)平臺(tái)配置路徑,項(xiàng)目不同略有差異 MTK:alps/device/mediatek/mt6735/init.mt6735.rc QCOM:xx/xx/init.target.rc

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的[Android L]SEAndroid开放设备文件结点权限(读或写)方法(涵盖常用操作:sys/xxx、proc/xxx、SystemProperties)热门干货的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。