Android selinux 導(dǎo)入之后,在 linux 原有的 uid gid 權(quán)限基礎(chǔ)上增加了更強大的控制。
比如android 系統(tǒng)app,即便有了 android.uid.system權(quán)限,還是無法訪問某些應(yīng)用目錄。
讀寫這些目錄可能會提示 Permission denied。
這就是被 sepolicy 給限制了,檢查原因可以通過:
cat /proc/kmsg | grep avc
或者
dmesg | grep avc
查看內(nèi)核輸出信息,當(dāng)然必須 adb root 之后才能看這些信息。
比如輸出這樣錯誤:
audit(1441759284.810:5): avc: denied { read } for pid=1494 comm="sdcard" name="0" dev="nandk" ino=245281 scontext=u:r:sdcardd:s0 tcontext=u:object_r:system_data_file:s0 tclass=dir permissive=0
解決辦法是,修改 scontext 里對應(yīng)的sdcardd.te文件,修改對象是 tcontext里的對象,賦予權(quán)限即可:
allow sdcardd system_data_file:dir rw_dir_perms;