sunwengang blog

developer | android display/graphics

  1. 1. selinux相关命令
    1. 1.1. 抓取SELinux Log
  2. 2. File_contexts
    1. 2.1. domain.te
    2. 2.2. selinux没有对某个文件的权限(有neverAllow)处理方法
  3. 3. Service_contexts
  4. 4. Property_contexts
  5. 5. Hwservice_contexts
  6. 6. te语法

在新增一个HIDL Service后,需要对其进行权限配置,不然通过adb shell ps -A|grep NAService会发现该service无法启动,也会通过抓取log发现一堆的avc: denied权限问题。关于SELinux可以推荐文档:https://www.pianshen.com/article/6549296922/, 非常详细,本文只是作为记录部分常用的笔记。

Android sepolicy,SEAndroid是一种基于安全策略的MAC安全机制。SEAndroid安全机制中的安全策略就是在安全上下文的基础上进行描述的,也就是说,它通过主体和客体的安全上下文,定义主体是否有权限访问客体。

例如添加一个service,在.rc文件定义了service,还需要在sepolicyfile_context中添加权限。

selinux相关命令

1
2
3
4
5
// 查看进程的sContext
ps -Z

// 查看文件权限
ls -Z

查看selinux开关状态:adb shell getenforce

可能返回结果有三种:Enforcing、Permissive 和 Disabled。Disabled 代表 SELinux 被禁用,Permissive 代表仅记录安全警告但不阻止可疑行为,Enforcing 代表记录警告且阻止可疑行为。

一般调试通过以下命令关闭SELinux权限(需重启生效):

1
2
adb root
adb shell setenforce 0

抓取SELinux Log

  1. 抓kernel log,adb shell dmesg
  2. 抓kernel log,使用命令,可以直接提出avc的log:adb shell "cat /proc/kmsg | grep avc" > avc_log.txt
  3. adb logcat –b events,搜索关键字:avc: denied

File_contexts

用于声明文件的安全上下文,plat前缀的文件用于声明system、rootfs、data等与设备无关的文件。Nonplat 用于声明vendor、data/vendor等文件。

domain.te

该策略文件会限制一些特征文件的权限,一般不建议修改。

selinux没有对某个文件的权限(有neverAllow)处理方法

参考:https://blog.csdn.net/ly890700/article/details/54645212

1
01-01 08:03:22.410000   217   217 W applypatch: type=1400 audit(0.0:16): avc: denied { read } for name="mmcblk0p15" dev="tmpfs" ino=3364 scontext=u:r:install_recovery:s0 tcontext=u:object_r:block_device:s0 tclass=blk_file permissive=0

意思是说明install_revovery没有block_device的权限

只要在install_recovery.te中加入下面权限就可以了。

  • allow install_recovery recover_block_device:blk_file { open read write };

Service_contexts

用于声明java service 的安全上下文, O上将该文件拆分为platnonplat前缀的两个文件,但nonplat前缀的文件并没有具体的内容(vendor和system java service不允许binder操作)。

Property_contexts

用于声明属性的安全上下文,plat 前缀的文件用于声明system属性,nonplat前缀的文件用于声明vendor 属性。ril.开头的属性的安全上下文为u:object_r:radio_prop:s0,这意味着只有有权限访问Type为radio_prop的资源的进程才可以访问这些属性。

Hwservice_contexts

新增文件,用于声明HIDL service 安全上下文。

1
2
3
4
5
6
7
8
9
10
11
12
android.hardware.vibrator::IVibrator                u:object_r:hal_vibrator_hwservice:s0
android.hardware.vr::IVr u:object_r:hal_vr_hwservice:s0
android.hardware.weaver::IWeaver u:object_r:hal_weaver_hwservice:s0
android.hardware.wifi::IWifi u:object_r:hal_wifi_hwservice:s0
android.hardware.wifi.hostapd::IHostapd u:object_r:hal_wifi_hostapd_hwservice:s0
android.hardware.wifi.offload::IOffload u:object_r:hal_wifi_offload_hwservice:s0
android.hidl.allocator::IAllocator u:object_r:hidl_allocator_hwservice:s0
android.hidl.base::IBase u:object_r:hidl_base_hwservice:s0
android.hidl.manager::IServiceManager u:object_r:hidl_manager_hwservice:s0
android.hidl.memory::IMapper u:object_r:hidl_memory_hwservice:s0
android.hidl.token::ITokenManager u:object_r:hidl_token_hwservice:s0
android.system.net.netd::INetd u:object_r:system_net_netd_hwservice:s0

te语法

  • allow signal
1
2
allow domain domain : process signal; # 每个进程都能向它自己和其它进程发送signal  
allow domain self : process signal; # 每个进程都能向它自己发送signal

参考文档:

本文作者 : sunwengang
本文使用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议
本文链接 : https://alonealive.github.io/Blog/2020/03/25/2020/200325_android_sepolicy_study/

本文最后更新于 天前,文中所描述的信息可能已发生改变