android selinux-170821

SELinux常見問題-sepolicy問題確認(rèn)

如果懷疑是sepolicy權(quán)限導(dǎo)致的問題,首先需要確認(rèn)是否真的是權(quán)限導(dǎo)致的枉疼。

確認(rèn)方法是:關(guān)閉SELinux现喳,查看問題是否存在吟税。

關(guān)閉SELinux的方法:

1、運(yùn)行時(shí)關(guān)閉稀轨,重啟失效:

adb shell setenforce 0

2扼脐、開機(jī)階段關(guān)閉:

1)修改kernel cmdline:

androidboot.selinux=permissive

2)修改init代碼:

selinux_is_enforcing函數(shù)返回false

SELinux常見問題-denied log

在kernel log、event log或main log中奋刽,搜索denied 關(guān)鍵字:

08-19 14:34:40.044160 1 1 E [ 27.054100].(1)[1:init]init: avc: denied { set } for property=sys.oppo.reboot pid=1608 uid=10013 gid=10013 scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:system_prop:s0 tclass=property_service permissive=0

1瓦侮、查看denied信息,顯示platform_app domain無法對安全上下文u:object_r:system_prop:s0的屬性進(jìn)行設(shè)置操作佣谐;

2脏榆、在system/sepolicy/中找到platform_app domain的定義,一般在platform_app.te中即(domain名字).te中台谍,查看是否有對應(yīng)的neverallow以及是否與要添加的權(quán)限沖突须喂;

3、查看vendor/oppo/sepolicy/common/目錄是否有platform_app.te文件趁蕊,如沒有則新建該文件新建文件的命名規(guī)則是:以scontext的內(nèi)容為名坞生,添加對應(yīng)的權(quán)限。

a)allow platform_app system_prop:property_service { set };

b)system_prop由文件安全上下文獲取掷伙,property_service由tclass獲取是己,對應(yīng)的操作就不用說了。這里提一點(diǎn)任柜,在system/sepolicy/te_macros中定義了相關(guān)操作的宏卒废,可按需要查看。

4宙地、remake system/sepolicy后再$OUT/obj/ ETC/sepolicy_intermediates/policy.conf文件中保存了臨時(shí)生成的安全策略摔认,可查看自己的修改是否已經(jīng)生效。

SELinux常見問題-mls

有時(shí)發(fā)現(xiàn)如下的denied log:

07-13 10:03:38.042 5587 5587 W ndroid.incallui: type=1400 audit(0.0:4215): avc: denied { add_name } for name="Recordings" scontext=u:r:platform_app:s0:c512,c768 tcontext=u:object_r:system_data_file:s0 tclass=dir permissive=0

在配置 allow platform_app system_data_file:dir add_name; 后宅粥,沒有生效参袱,這時(shí)候就是Mutil-Level Security(MLS)機(jī)制導(dǎo)致的操作被denied了。

配置:

type platform_app, domain, mlstrustedsubject; 即可

SELinux常見問題-ioctl

08-07 10:49:20.149 4795 4795 I iwpriv : type=1400 audit(0.0:3457): avc: denied { ioctl } for path="socket:[1607798]" dev="sockfs" ino=1607798 ioctlcmd=8bfc scontext=u:r:system_app:s0 tcontext=u:r:system_app:s0 tclass=udp_socket permissive=1

在setenfoce 0和配置allow system_app self:udp_socket ioctl; 后操作依然被denied秽梅,這是由于ioctl的控制在底層劃分的更細(xì)抹蚀,需要允許對應(yīng)ioctlcmd操作。

具體方法為:

1企垦、查找對應(yīng)的ioctlcmd在ioctl_defines中的定義环壤,如上文中的8bfc,對應(yīng)的是SIOCIWFIRSTPRIV_1C

2钞诡、在對應(yīng)的文件加入如下的配置:

allowxperm system_app self:udp_socket ioctl SIOCIWFIRSTPRIV_1C;

這樣郑现,在ioctl操作時(shí)湃崩,對應(yīng)的ioctlcmd就會被允許了。

SELinux常見問題-新增app類型

當(dāng)前系統(tǒng)中app的domain和文件類型默認(rèn)的分配原則為:

1懂酱、platform簽名 + share systemuid -> system_app + system_app_data_file竹习;

2誊抛、platform簽名 + 普通用戶-> platform_app + app_data_file列牺;

3、platform簽名 + 特定用戶 : 如bluetooth拗窃,對應(yīng)的domain為bluetooth + bluetooth_data_file

4瞎领、三方應(yīng)用 -> untrusted_app + app_data_file

根據(jù)特性需求,需要新增app類型:

1随夸、system/sepolicy/mac_permissions.xml

2九默、seapp_contexts

user=_app seinfo=theme name=com.nearme.themespace* domain=theme_app type=theme_app_data_file levelFrom=user

3、file.te

type theme_app_data_file, file_type, data_file_type;

4宾毒、theme_app.te

type theme_app, domain, mlstrustedsubject;

這樣驼修,簽名是@THEME(定義在system/sepolicy/keys.conf文件)和包名是comthemespace的應(yīng)用,domain是theme_app诈铛,對應(yīng)的文件類型是theme_app_data_file

SELinux常見問題-新增乙各、修改文件類型

如某些需求,需要新增文件類型幢竹,只允許特定的domain訪問耳峦,如存放字體文件的目錄,只允許主題應(yīng)用寫入和刪除焕毫,其他domain只有讀的權(quán)限蹲坷。

1、file_contexts

/data/system/font(/.*)? u:object_r:font_data_file:s0

2邑飒、file.te

type font_data_file, file_type, data_file_type;

3循签、system/core/rootdir/init.rc

在restorecon_recursive /data之前加入:

mkdir /data/system/font 0777 system system

chmod 0777 /data/system/font

這樣,adb shell ls -l -Z /data/system/font 查看到的就是上面配置的文件類型:

-rwxrwxrwx 1 u0_a18 u0_a18 u:object_r:font_data_file:s0:c512,c768 3553188 2017-08-19 16:40 Regular.ttf

SELinux常見問題-新增可執(zhí)行程序和service

在/system/bin下新增可執(zhí)行程序疙咸,以關(guān)鍵log的bin為例

1懦底、file_contexts

/system/bin/criticallog u:object_r:criticallog_exec:s0

2、critical.te

type criticallog, domain;

type criticallog_exec, exec_type, file_type;

3罕扎、system/core/rootdir/init.rc

service criticallog /system/bin/criticallog

這樣聚唐,init在啟動這個(gè)criticallog service時(shí),會根據(jù)對應(yīng)的exec類型設(shè)置進(jìn)程的domain腔召,可以通過 adb shell ps –Z | grep criticallog 來確認(rèn):

u:r:criticallog:s0 system 484 1 17484 4220 binder_thr 72b6e2eaa8 S /system/bin/criticallog

SELinux常見問題-新增service杆查、無對應(yīng)的bin

在init.rc中新增service,但沒有對應(yīng)的bin臀蛛,一般通過sh腳本啟動一些功能亲桦。這類service崖蜜,需要在配置rc時(shí),加上seclabel操作客峭,之后豫领,init啟動service時(shí),就會根據(jù)這個(gè)關(guān)鍵字解析出對應(yīng)的context舔琅。以screen_record service為例

1等恐、system/core/rootdir/init.rc

service screen_record /system/bin/sh /autochmod.sh "screen_record”

seclabel u:r:screen_record:s0

2、screen_record.te

type screen_record, domain;

type screen_record_exec, exec_type, file_type;

init_daemon_domain(screen_record)

binder_use(screen_record)

allow screen_record shell_exec:file {read open execute_no_trans execute getattr entrypoint};

allow screen_record rootfs:lnk_file {getattr};

allow screen_record rootfs:file {read open};

allow screen_record system_file:file { read open execute_no_trans };

allow screen_record toolbox_exec:file { read open execute_no_trans execute getattr};

allow screen_record self:capability dac_override;

allow screen_record self:process execmem;

如上备蚓,新增service需要的默認(rèn)權(quán)限在步驟2中课蔬,需要的時(shí)候拷貝、修改screen_record為對應(yīng)的service即可郊尝。

SELinux常見問題-sepolicy-inject工具

常常有這樣的困擾:selinux權(quán)限要加的太多二跋,每次提示一條,都需要重新打包流昏,很浪費(fèi)時(shí)間扎即!

現(xiàn)在有了sepolicy-inject工具,可以動態(tài)添加配置况凉,不需要重復(fù)打包谚鄙。

sepolicy-inject -s? -t? -c? -p [,,,...] [-P ] [-o

以下的denied信息,就可以用sepolicy-inject工具動態(tài)配置好茎刚,最終打包一次就可以了襟锐。

01-01 08:01:57.902000 353 353 I auditd : type=1400 audit(0.0:2476): avc: denied { getattr } for comm="servicemanager" scontext=u:r:servicemanager:s0 tcontext=u:r:write_on:s0 tclass=process permissive=1

sepolicy-inject –s servicemanager –t write_on –c process –p getattr -l

由于權(quán)限的機(jī)制是有一個(gè)訪問被阻止了,整個(gè)進(jìn)程都會推出膛锭,因此每次可能只打印出一條denied信息粮坞,為了一次打印出盡量多的信息,可以adb shell setenforce 0之后執(zhí)行初狰,可以看到denied信息中最后permissive=1莫杈,只打印信息,不會阻止奢入。這樣就可以盡量多的得到denied信息了筝闹。

最終,所有sepolicy-inject動態(tài)添加的allow配置腥光,都會記錄在/data/seinfo.txt文件关顷,配置完成后,將這個(gè)文件的內(nèi)容復(fù)制到對應(yīng)的TE文件即可武福。

] [-l|--load]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末议双,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子捉片,更是在濱河造成了極大的恐慌平痰,老刑警劉巖汞舱,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異宗雇,居然都是意外死亡昂芜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門赔蒲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來泌神,“玉大人,你說我怎么就攤上這事嘹履∧迳龋” “怎么了债热?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵砾嫉,是天一觀的道長。 經(jīng)常有香客問我窒篱,道長焕刮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任墙杯,我火速辦了婚禮配并,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘高镐。我一直安慰自己溉旋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布嫉髓。 她就那樣靜靜地躺著观腊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪算行。 梳的紋絲不亂的頭發(fā)上梧油,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天,我揣著相機(jī)與錄音州邢,去河邊找鬼儡陨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛量淌,可吹牛的內(nèi)容都是我干的骗村。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼呀枢,長吁一口氣:“原來是場噩夢啊……” “哼胚股!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起硫狞,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤信轿,失蹤者是張志新(化名)和其女友劉穎晃痴,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體财忽,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡倘核,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了即彪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片紧唱。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖隶校,靈堂內(nèi)的尸體忽然破棺而出漏益,到底是詐尸還是另有隱情,我是刑警寧澤深胳,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布绰疤,位于F島的核電站,受9級特大地震影響舞终,放射性物質(zhì)發(fā)生泄漏轻庆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一敛劝、第九天 我趴在偏房一處隱蔽的房頂上張望余爆。 院中可真熱鬧,春花似錦夸盟、人聲如沸蛾方。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽桩砰。三九已至,卻和暖如春唆垃,著一層夾襖步出監(jiān)牢的瞬間五芝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工辕万, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留枢步,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓渐尿,卻偏偏與公主長得像醉途,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子砖茸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355

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