查看权限命令:
cat /proc/kmsg | grep avc
dmesg | grep avc
logcat | grep avc
ps -Z 查看进程上下文(主体)
ls -Z 查看文件上下文(客体)
临时解决:
setenforce 0 关闭权限
setenforce 1 打开权限
永久性解决:由报错分析
(服务权限)
E ServiceManager: add_service('godv',33) uid=1000 - PERMISSION DENIED
I zygote64: option[47]=Xfingerprint:Android/aosp_x86_64/generic_x86_64:8.1.0/OPM1.171019.011/godv06271014:eng/test-keys
D godv : GodvService::godv_open
E SELinux : avc: denied { add } for service=godv pid=6508 uid=1000 scontext=u:r:system_server:s0 tcontext=u:object_r:default_android_service:s0 tclass=service_manager permissive=0
分析过程:
缺少什么权限: { write }权限,
谁缺少权限: scontext=u:r:kernel:s0,
对哪个文件缺少权限:tcontext=u:object_r:block_device
什么类型的文件: tclass=blk_file
解决方法:
kernel.te (谁缺少权限 scontext)
allow kernel block_device:blk_file write; (添加的命令语句)
分析过程:
缺少什么权限: { add }权限,
谁缺少权限: system_server
对哪个文件缺少权限:default_android_service
什么类型的文件: tclass=service_manager
解决方法:
1.在service_contexts文件中添加,在service_contexts中声明godv_service服务对象
godv u:object_r:godv_service:s0 (这个要与service名称一致)
路径(8.0) AOSP/system/sepolicy/private
2.在service.te文件中添加, 在service.te文件中定义godv_service的类型
type godv_service, app_api_service, service_manager_type; (逗号内为6.0权限)
路径(8.0) AOSP/system/sepolicy/public
3.在system_server.te文件中添加
allow system_server godv_service: service_manager add;
路径(8.0) AOSP/system/sepolicy/private
4.还需要修改两个文件 Android : 為系統服務添加 SELinux 權限 (Android 9.0) - 开发者知识库
参考链接
(可执行程序权限)
12-25 11:51:27.260 147 147 W init : type=1400
audit(0.0:4): avc: denied {execute_no_trans } for
path="/system/bin/test" dev="nandd" ino=476
scontext=u:r:init:s0 tcontext=u:object_r:system_file:s0
tclass=file permissive=0
分析过程:
缺少什么权限: execute_no_trans
谁缺少权限: init
对哪个文件缺少权限: system_file
什么类型的文件: file
解决方法:
把缺少的权限添加上去,添加的过程如下。
cd fspad-733/androidL/external/sepolicy
①新建test.te文件中添加
type test,domain;
type test_exec,exec_type,file_type;
init_daemon_domain(test)
②在file_contexts文件中添加
/system/bin/test u:object_r:test_exec:s0
③在init.te文件中添加
allow test system_file:file execute_no_trans;
设备权限:
[53692.570392] type=1400 audit(12565266.940:42): avc: denied
{ read write } for pid=10794 comm="m.example.hello" name="led1"
dev="tmpfs" ino=39430 scontext=u:r:untrusted_app:s0
tcontext=u:object_r:device:s0 tclass=chr_file permissive=0
分析过程:
缺少什么权限: read write
谁缺少权限: scontext=u:r:untrusted_app:s0 untrusted_app
对那个文件缺少权限:tcontext=u:object_r:device:s0 device
什么类型的文件: tclass=chr_file chr_file
解决方法:untrusted_app.te
Allow untrusted_app device:chr_file {read write }
把缺少的权限添加上去,添加的过程如下。
cd fspad-733/androidL/external/sepolicy
①修改file_contexts
/dev/led1 u:object_r:led1_device:s0
②修改device.te
type led1_device, dev_type(, mlstrustedobject); (括号内为6.0权限)
③修改 untrusted_app.te
allow untrusted_app led1_device:chr_file rw_file_perms;
添加好了之后重新编译Android的源码,烧写system.img和boot.img