Android开发Android开发经验谈Android开发

属性问题展开的selinux权限介绍

2019-06-28  本文已影响3人  十八砖

从android5.0开始,强制开启了SELinux,对系统属性的访问权限也由selinux进行限制。

SELinux非常繁杂,8.0开始的Treble Project后,为了实现system、vendor分区的隔离,selinux的机制变的更加繁琐。本文不打算全面讲解android上selinux,通过概览全貌和常见案例分析,让大家在"不求甚解"的情况下,能够处理系统定制中80%的selinux权限问题。

1.SELinux的基本介绍

kernel/fs/read_write.c:
int rw_verify_area(int read_write, struct file *file, const loff_t *ppos, size_t count)
{
    ......
    /* 基础权限检查 */
    if (unlikely(!access_ok(VERIFY_READ, buf, count)))
        return -EFAULT;
    ......
    /* selinux权限检查 */
    retval = security_file_permission(file,
                read_write == READ ? MAY_READ : MAY_WRITE);
    ......
}

2.android上selinux相关文件

3.my_system_prop定义

property.te:
type my_system_prop, property_type;
property_contexts:
persist.my. u:object_r:my_system_prop:s0
system_app.te:
set_prop(system_app, my_system_prop)

案例

模块编译selinux:make sepolicy
关闭selinux:setenforce 0

    neverallow check failed at out/target/product/sailfish/obj/ETC/plat_sepolicy.cil_intermediates/plat_sepolicy.cil:6373 from system/sepolicy/public/domain.te:1133
  (neverallow base_typeattr_144 file_type (file (execmod)))
    <root>
    allow at out/target/product/sailfish/obj/ETC/vendor_sepolicy.cil_intermediates/vendor_sepolicy.cil:1396
      (allow platform_app_28_0 app_data_file_28_0 (file (execute execmod)))

如上看出,具体是public/domain.te:1133的限制影响了新加权限,找到对应行数观察:

neverallow { domain -untrusted_app_all } file_type:file execmod;

解决方式:

  1. 直接注释到该行
# neverallow { domain -untrusted_app_all } file_type:file execmod;
  1. 只规避受影响的platform_app
neverallow { domain -untrusted_app_all -platform_app } file_type:file execmod;
上一篇下一篇

猜你喜欢

热点阅读