Android Selinux详解[一]---整体介绍,Android Selinux详解系列(一),整体介绍与概览

马肤

温馨提示:这篇文章已超过470天没有更新,请注意相关的内容是否还可用!

摘要:本篇文章为Android Selinux的详解系列之一,主要提供整体介绍。文章将概述Android系统中Selinux(Security Enhanced Linux)的重要性,包括其增强系统安全性的作用和功能。文章将简要介绍Selinux的基本概念和原理,以及它在Android系统中的实施方式和应用场景。通过本文,读者可以对Android Selinux有一个初步的了解和认识。

    Android 使用安全增强型 Linux (SELinux) 对所有进程强制执行强制访问控制 (MAC),甚至包括以 Root/超级用户权限运行的进程(Linux 功能)。

Android Selinux详解[一]---整体介绍,Android Selinux详解系列(一),整体介绍与概览 第1张
(图片来源网络,侵删)

    借助 SELinux,Android 可以更好地保护和限制系统服务、控制对应用数据和系统日志的访问、降低恶意软件的影响,并保护用户免遭移动设备上的代码可能存在的缺陷的影响。

    SELinux 按照默认拒绝的原则运行:任何未经明确允许的行为都会被拒绝。SELinux 可按两种全局模式运行:

Android Selinux详解[一]---整体介绍,Android Selinux详解系列(一),整体介绍与概览 第2张
(图片来源网络,侵删)
  • 宽容模式permissive:权限拒绝事件会被记录下来,但不会被强制执行。
  • 强制模式enforcing:权限拒绝事件会被记录下来并强制执行.

    下面大概介绍一下工作中经常遇到的Selinux相关知识

    目录

    1. 如何打开/关闭Selinux

    1.1 打开Selinux

    1.2 关闭Selinux

    2. 关于Android12 高通平台Selinux的目录介绍

    2.1 原生Sepolicy目录

    2.2 QSSI侧Sepolicy定制目录

     2.3 VENDOR侧Sepolicy定制目录

    3. 一些使用场景的分析

    3.1 假如我们的功能都实现在QSSI侧,实现的是一个系统服务, 我们想让它被vendor侧访问,应该在哪里添加type才能被vendor侧访问呢?

    3.2 假如我们的功能都实现在VENDOR侧,实现的是一个hal服务, 我们想让它被system侧访问,应该在哪里添加type才能被system侧访问呢?

    3.3 假如我们的功能都实现在QSSI侧,实现的是一个系统服务, 我们不想让它被vendor侧访问,应该在哪里添加type才能不被vendor侧访问呢?

    3.4 假如我们的功能都实现在VENDOR侧,实现的是一个HAL服务, 我们不想让它被system侧访问,应该在哪里添加type才能不被system侧访问呢?


    1. 如何打开/关闭Selinux

    1.1 打开Selinux

    打开Selinux即将Selinux处于enforcing模式,所以权限事件都会被记录下来并强制执行。

        adb root

        adb shell setenforce 1

        adb shell getenforce

          Enforcing           (返回结果)

    如果Selinux处于打开状态下,权限事件的log如下, 可以看到permissive=0,即可以确定当前处于enforcing模式,这时候test进程是不可以读取test.json的,会被明确拒绝。

    01-01 20:15:07.355  1035  1035 I auditd  : type=1400 audit(0.0:23): avc: denied { read } for comm="test" name="test.json" dev="sda12" ino=25609 scontext=u:r:test:s0 tcontext=u:object_r:test_file:s0 tclass=file permissive=0 

    1.2 关闭Selinux

    关闭Selinux即将Selinux处于permissive模式,所以权限事件都会被记录下来,但不会强制执行。

        adb root

        adb shell setenforce 0

        adb shell getenforce

          Permissive     (返回结果)

    如果Selinux处于关闭状态下,权限事件的log如下, 可以看到permissive=1,即可以确定当前处于permissive模式,这时候test进程可以读取test.json的,虽然log也打印出来了,但是这个log只是打印出来供用户读取,并不会起到任何拒绝的作用

    01-01 20:15:07.355  1035  1035 I auditd  : type=1400 audit(0.0:23): avc: denied { read } for comm="test" name="test.json" dev="sda12" ino=25609 scontext=u:r:test:s0 tcontext=u:object_r:test_file:s0 tclass=file permissive=1

    2. 关于Android12 高通平台Selinux的目录介绍

    Android 12 上,高通的主目录分为两个,一个是QSSI, 一个是VENDOR,  QSSI下存放着Android原生的一些东西, VENDOR下放着厂商定制的东西。Selinux策略sepolicy在QSSI和VENDOR下都有,sepolicy分为原生sepolicy 和厂商自己定制的sepolicy

    2.1 原生Sepolicy目录

    请不要在原生的sepolicy目录下修改文件,否则会导致CTS失败。请在Sepolicy定制目录下根据需求添加。

    根目录子目录编译后的生成路径如果在这个目录下定义一个新的type,system/vendor访问限制

    QSSI/system

    /sepolicy/

    privateout/target/product/qssi/

    system/etc/selinux

    system可以访问,vendor无法访问
    publicout/target/product/qssi/

    system/etc/selinux

    system,vendor都可访问
    private/compat------当在system/sepolicy/public新增一个type的时候,需要在compat/api/api.ignore.cil中添加这个新增的标签,否则会编译失败

    2.2 QSSI侧Sepolicy定制目录

    QSSI侧Sepolicy定制目录,如果是我们自己添加Selinux策略,请添加到此处,

    根目录子目录编译后的生成路径如果在这个目录下定义一个新的type,system/vendor访问限制
    QSSI/device/

    qcom/sepolicy/

    generic/

    private

    out/target/product/qssi/

    system_ext/etc/selinux

    system可以访问,vendor无法访问
    publicout/target/product/qssi/

    system_ext/etc/selinux

    system,vendor都可访问
    private/compat-----当在device/qcom/sepolicy/generic/public新增一个type的时候,需要在compat/api/api.ignore.cil中添加这个新增的标签,否则会编译失败

     2.3 VENDOR侧Sepolicy定制目录

    VENDOR侧Sepolicy定制目录

    根目录子目录编译后的生成路径如果在这个目录下定义一个新的type,system/vendor访问限制
    VENDOR/device/

    qcom/

    sepolicy_vndr/

    generic/

    vendor/

    common

    所有芯片共用的

    out/target/product/qssi/

    vendor/etc/selinux

    vendor可以访问,system无法访问
    还有其他子目录,分别是不同的芯片不同的sepolicy

    3. 一些使用场景的分析

    3.1 假如我们的功能都实现在QSSI侧,实现的是一个系统服务, 我们想让它被vendor侧访问,应该在哪里添加type才能被vendor侧访问呢?

        答案是,在QSSI/device/qcom/sepolicy/generic/public下添加相关的type声明,并在QSSI/device/qcom/sepolicy/generic/private/compat/api/api.ignore.cil中添加这个新增的标签。

    allow语句在哪里添加都可以

    3.2 假如我们的功能都实现在VENDOR侧,实现的是一个hal服务, 我们想让它被system侧访问,应该在哪里添加type才能被system侧访问呢?

        答案是,在QSSI/device/qcom/sepolicy/generic/public下添加相关的type声明,并在QSSI/device/qcom/sepolicy/generic/private/compat/api/api.ignore.cil中添加这个新增的标签。

    allow语句在哪里添加都可以

    3.3 假如我们的功能都实现在QSSI侧,实现的是一个系统服务, 我们不想让它被vendor侧访问,应该在哪里添加type才能不被vendor侧访问呢?

    答案是,在QSSI/device/qcom/sepolicy/generic/private下添加相关的type声明,并且只能在这个目录下添加相关allow语句。

    3.4 假如我们的功能都实现在VENDOR侧,实现的是一个HAL服务, 我们不想让它被system侧访问,应该在哪里添加type才能不被system侧访问呢?

    答案是,在VENDOR/device/qcom/sepolicy_vndr/generic/vendor/common下添加相关的type声明,并且只能在这个目录下添加相关allow语句。


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码