記錄 Android/Linux 系統下 SELinux 權限被拒 (avc: denied) 的排查與修改策略方法。
getenforce # 顯示 Enforcing / Permissive / Disabled setenforce 1 # 切換至 Enforcing setenforce 0 # 切換至 Permissive (暫時關閉,重開機失效)
修改核心配置 arch/arm64/configs/xxx_defconfig,移除 CONFIG_SECURITY_SELINUX=y。
cat /proc/kmsg | grep denied 或核心日誌中搜尋 avc: denied。avc: denied { 權限集合 } for pid=XXX comm="進程名" scontext=u:r:來源類型:s0 tcontext=u:r:目標類型:s0 tclass=存取類別 permissive=0.te 檔可能位於:external/sepolicy、device/qcom/sepolicy/common 等目錄。allow 來源類型 目標類型:存取類別 {權限集合};# 核心日誌
avc: denied { getattr read } for pid=7201 comm="xxx.xxx" scontext=u:r:system_app:s0 tcontext=u:r:shell_data_file:s0 tclass=dir permissive=0
# 修改 system_app.te
allow system_app shell_data_file:dir { getattr read };
修改後重新編譯 sepolicy 並刷入生效。