摘要:1.SEAndroidapp分类SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型):1)untrusted_app 第三方app,没有android平台签名,没有system权限2)platform_app  有android平台签名,没有system权限3)system_app   有android平台签名和system权限从上面划分,权限等级,理论上:       

  • 1.SEAndroid app分类

    SELinux(或SEAndroid)将app划分为主要三种类型(根据user不同,也有其他的domain类型):

    1)untrusted_app  第三方app,没有android平台签名,没有system权限 2)platform_app    有android平台签名,没有system权限

    3)system_app      有android平台签名和system权限

    从上面划分,权限等级,理论上:untrusted_app < platform_app < system_app

    2.seapp_contexts定义

    external\sepolicy\seapp_contexts

    isSystemServer=true domain=system_server
    user=system seinfo=platform domain=system_app type=system_app_data_file
    user=bluetooth seinfo=platform domain=bluetooth type=bluetooth_data_file
    user=nfc seinfo=platform domain=nfc type=nfc_data_file
    user=radio seinfo=platform domain=radio type=radio_data_file
    user=shared_relro domain=shared_relro
    user=shell seinfo=platform domain=shell type=shell_data_file
    user=_isolated domain=isolated_app levelFrom=user
    user=_app seinfo=platform domain=platform_app type=app_data_file levelFrom=user
    user=_app domain=untrusted_app type=app_data_file levelFrom=user

    从上面可以看出,domain和type由user和seinfo两个参数决定。 比如:

    user=system  seinfo=platform,domain才是system_app

    user=_app,可以是untrusted_app或platform_app,如果seinfo=platform,则是platform_app。

    3.user和seinfo判定方式

    首先看user,user可以理解为UID,例如ps -Z结果如下:

    u:r:system_app:s0              system    2414  1172  com.android.keychain
    u:r:platform_app:s0 u0_a6 2439 1172 com.android.managedprovisioning
    u:r:untrusted_app:s0 u0_a8 2460 1172 com.android.onetimeinitializer
    u:r:system_app:s0 system 2480 1172 com.android.tv.settings
    u:r:untrusted_app:s0 u0_a27 2504 1172 com.android.email
    u:r:untrusted_app:s0 u0_a28 2523 1172 com.android.exchange
    u:r:untrusted_app:s0 u0_a7 2567 1172 com.android.musicfx

    第一列是SContext,第二列是UID,只要UID是system的基本都是system_app,反过来一样。 其他的U0_XXX要么属于platform_app或untrusted_app

    seinfo由external\sepolicy\mac_permissions.xml决定,内容如下:

        <!-- Platform dev key in AOSP -->
    <signer signature="@PLATFORM" >
    <seinfo value="platform" />
    </signer> <!-- All other keys -->
    <default>
    <seinfo value="default" />
    </default>

    即如果签名是platform,seinfo就是platform,其他的比如shared等,seinfo是default。  比如上面ps -Z的结果里面,OneTimeInitializer.apk是untrusted_app,ManagedProvisioning.apk是platform_app。

    分别查看这两个app的Android.mk

    packages\apps\OneTimeInitializer\Android.mk  没有定义LOCAL_CERTIFICATE,默认是shared

    packages\apps\ManagedProvisioning\Android.mk    有定义LOCAL_CERTIFICATE := platform

    因为ManagedProvisioning.apk有platform签名,所以seinfo是platform。

    TvSettings是system_app,查看对应的参数:

    packages\apps\TvSettings\Settings\Android.mk  有定义LOCAL_CERTIFICATE := platform

    packages\apps\TvSettings\Settings\AndroidManifest.xml  有定义android:sharedUserId="android.uid.system"

    TvSettings user是system,seinfo是platform,所以是system_app

    packages\apps\ManagedProvisioning\AndroidManifest.xml 没有定义android:sharedUserId="android.uid.system"

    所以ManagedProvisioning虽然seinfo是platform,但是user不是system,因此只是platform_app,而不是system_app。

    4.app对应的te文件 system_app  ->  external\sepolicy\system_app.te  untrusted_app ->  external\sepolicy\untrusted_app.te  platform_app  ->  external\sepolicy\platform_app.te  对应的权限,通过allow语句给予,比如只有system_app才可以设置prop:

    # Write to properties
    unix_socket_connect(system_app, property, init)
    allow system_app debug_prop:property_service set;
    allow system_app net_radio_prop:property_service set;
    allow system_app system_radio_prop:property_service set;
    auditallow system_app net_radio_prop:property_service set;
    auditallow system_app system_radio_prop:property_service set;
    allow system_app system_prop:property_service set;
    allow system_app ctl_bugreport_prop:property_service set;
    allow system_app logd_prop:property_service set;

    总结: 在引入SEAndroid后,app开发需要注意需要哪些权限,根据配置(shareuid和签名)来决定domain,从而决定权限大小。

SELinux app权限配置的更多相关文章

  1. app ios info权限配置:

    info权限配置: Privacy - Bluetooth Peripheral Usage Description --> App需要您的同意,才能访问蓝牙 Privacy - Calenda ...

  2. HTML5 开发APP( 环境配置)

    上一篇我写了关于新建项目,这一篇说一下配置环境我们新建一个移动app后,会发现一个mainifest.json文件,开发app所要配置的环境就在这个文件里 点击打开文件后会有配置界面,在配置界面的下方 ...

  3. Linux 账号管理与 ACL 权限配置

    要登陆 Linux 系统一定要有账号与口令才行,否则怎么登陆,您说是吧?不过, 不同的使用者应该要拥有不同的权限才行吧?我们还可以透过 user/group 的特殊权限配置, 来规范出不同的群组开发项 ...

  4. 第十四章、Linux 账号管理与 ACL 权限配置

    1. Linux 的账号与群组 1.1 使用者标识符: UID 与 GID 1.2 使用者账号:/etc/passwd 文件结构, /etc/shadow 文件结构 1.3 关于群组: /etc/gr ...

  5. Laravel系列之CMS系统学习 — 角色、权限配置【2】

    一.RBAC分析 基于角色的权限访问控制(Role-Based Access Control),这里存在这么几个玩意儿:角色.权限,用户 表:roles.permissions.role_has_pe ...

  6. Centos6.8 安装mongo3.6以及权限配置和开启外网链接

    目录 安装环境和版本说明,以及参考文档链接 安装MongoDB数据库 运行MongoDB数据库 删除卸载MongoDB 配置MongoDB管理员用户 修改配置文件,允许外网链接 安装配置完成,使用Ro ...

  7. react16 路由按需加载、路由权限配置

    1. 路由按需加载: 不做按需加载,代码全部打包在bundle.js 文件里,首屏渲染很慢,项目文件较多,会出现1分钟加载的可能性. import React, { Component } from ...

  8. Mosquitto搭建Android推送服务(四)Mosquitto服务器用户登录与权限配置

    文章钢要: 1.对服务器进行多用户配置 2.根据不同用户给予不同权限 一.Mosquitto的用户机制 mosquitto中可以添加多个用户,只有使用用户名和密码登陆服务器才允许用户进行订阅与发布操作 ...

  9. 13、Apache中虚拟目录和目录权限配置

    一.虚拟目录 之前的个人主页,为了安全起见,需要把~yanji 用户隐藏起来,这时就可以设置个 虚拟目录. 它在Apache服务器应用比较多,能够隐藏系统的真实目录,实用性非常高. 虚拟目录主要 通过 ...

随机推荐

  1. python之获取当前操作系统(平台)

    Python在不同环境平台使用时,需要判断当前是什么系统,比如常用的windows,linux等 下面介绍一些能够获取当前系统的命令 1.使用sys.platform获取 #!/usr/bin/env ...

  2. web容器 web服务器 servlet/jsp容器 之间的区别和关系

    今天学习tomcat时发现一篇写的比较好的文章,故分享给大家 Web服务器(软件): Apache http server, 这个它的网址,http://httpd.apache.org/downlo ...

  3. Ubuntu下将python从2.7升级到3.5

    在ubuntu 的终端中用代码下载最新的Python sudo apt-get install python3 系统会提示输入Linux 的密码,输入密码后下载 刚才下载的Python程序被安装在us ...

  4. logstash收集syslog日志

    logstash收集syslog日志注意:生产用syslog收集日志!!! 编写logstash配置文件 #首先我用rubydebug测试数据 [root@elk-node1 conf.d]# cat ...

  5. salesforce lightning零基础学习(十二) 自定义Lookup组件的实现

    本篇参考:http://sfdcmonkey.com/2017/01/07/custom-lookup-lightning-component/,在参考的demo中进行了简单的改动和优化. 我们在ht ...

  6. bootbox.js官方文档

    简介 Bootbox.js是一个小型的JavaScript库,基于Bootstrap模态框开发,用于创建可编程的对话框. 不像原生的alert等对话框,所有的Bootstrap模态框生成的都是非阻塞事 ...

  7. shell高效处理文本(1):xargs并行处理

    xargs具有并行处理的能力,在处理大文件时,如果应用得当,将大幅提升效率. xargs详细内容(全网最详细):https://www.cnblogs.com/f-ck-need-u/p/592592 ...

  8. SQLite占用资源少原因

    本篇承接上篇SQLite详解的下篇,介绍SQLIte为什么占用资源少的原因?本文主要参考https://blog.csdn.net/hanyingzhong/article/details/46400 ...

  9. [转]图解Docker容器和镜像

    本文转自:https://www.cnblogs.com/wangqiaomei/p/5818636.html 图解Docker容器和镜像 这篇文章希望能够帮助读者深入理解Docker的命令,还有容器 ...

  10. 【转载】 PhpStudy修改Apache的端口号

    phpStudy是一个PHP调试环境的程序集成包.该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便.好用的 ...