鸿蒙应用权限管理和访问控制
鸿蒙系统权限主要解决两个方面的问题
1.应用或服务进程间权限访问的管理
采用的是基于ATM的VerifyPermission,所有接口均为内部接口,仅提供底层能力,不对开发者开放。鉴权过程中直接调用VerifyPermission接口即可。
2.访问控制列表(ACL)
ACL(Access Control List)提供了解决低等级应用访问高等级权限问题的特殊渠道。采用的是应用APL(Ability Privilege Level)等级和授权方式,授权分为system_grant(系统授权)和user_grant(用户授权)。
一、应用和服务间权限管理
OpenHarmony中应用和系统服务均运行在独立的沙箱中,进程空间和程序数据都是相互隔离的,以保护应用数据的安全性;但是运行在独立沙箱中的服务或应用同时需要对外提供一些API以实现所需功能,其他独立沙箱中的应用在跨进程访问这些API时,需要系统提供一种权限管理机制对这些API的访问者进行授权。
- 应用权限管理提供了权限定义机制,允许系统服务和应用为自己的敏感API定义新的权限,其他应用必须申请此权限才能访问此敏感API;
- 应用权限管理提供了权限申请机制,允许应用申请权限,这些权限由系统或者其他应用定义,权限申请通过后就能访问这个权限相关的系统或其他应用提供的敏感API;
- 应用权限管理也为用户提供了一些必须的功能,方便用户查看和管理权限授予情况
应用权限管理为用户程序框架子系统提供权限管理功能,并且为上层应用提供权限申请和授权状态查询接口。
标准系统应用权限管理:此模块主要为标准系统用户程序框架子系统提供权限管理基础校验能力,不对三方app开放(代码目录kits #外部接口层未提供),并提供如下API:
security\permission\interfaces\innerkits\permission_standard\permissionsdk\main\cpp\include\permission\permission_kit.h
class PermissionKit
所有接口均为内部接口,仅提供底层能力,不对开发者开放。鉴权过程中直接调用VerifyPermission接口即可。
- 明确要校验应用的UID及需要校验的权限名称permissionName
- 根据UID获取应用的包名 bundleName
- 根据UID获取应用的用户ID userId
- 将需要校验的权限名permissionName, 包名bundleName和userId传入接口VerifyPermission(string permissionName, string bundleName, int userId)
- 得到校验结果
int PermissionStateManager::VerifyPermission( const std::string& bundleName,
const std::string& permissionName, int userId) const
二、应用权限访问控制
ATM(AccessTokenManager)是OpenHarmony上基于AccessToken构建的统一的应用权限管理能力。Accesstoken信息主要包括应用身份标识APPID、用户ID,应用分身索引、应用APL(Ability Privilege Level)等级、应用权限信息等。
ATM模块主要提供如下功能:
- 提供基于TokenID的应用权限校验机制,应用访问敏感数据或者API时可以检查是否有对应的权限。
- 提供基于TokenID的Accestoken信息查询,应用可以根据TokenID查询自身的APL等级等信息。
主要的采取的策略,访问控制列表(ACL)
ACL(Access Control List)提供了解决低等级应用访问高等级权限问题的特殊渠道。
采用的授权方式,权限类型可分为system_grant(系统授权)和user_grant(用户授权)。
这里的system和权限级别system不是一个概念,系统授权是在App 安装时需要配置的,不管级别的高低,user_grant(用户授权)是弹框,需要用户确认的权限,就算是system级别的也需要提示
三、访问控制开发
默认情况下,应用只能访问有限的系统资源。为了扩展功能的诉求,需要访问额外的系统或其他应用的数据和功能;系统或应用以明确的方式对外提供接口来共享其数据或功能。OpenHarmony提供了一种访问控制机制来保证这些数据或功能不会被不当或恶意使用,即应用权限。
应用权限保护的对象可以分为数据和功能:
- 数据包含了个人数据(如照片、通讯录、日历、位置等)、设备数据(如设备标识、相机、麦克风等)、应用数据。
- 功能则包括了设备功能(如打电话、发短信、联网等)、应用功能(如弹出悬浮框、创建快捷方式等)等。
应用权限是程序访问操作某种对象的通行证。
在进行权限的申请和使用时,需要满足以下基本原则:
- 应用申请的权限,都必须有明确、合理的使用场景和功能说明,确保用户能够清晰明了地知道申请权限的目的、场景、用途;禁止诱导、误导用户授权;应用使用权限必须与申请所述一致。
- 当前不允许应用自行定义权限,应用申请的权限应该从已有的权限列表中选择。
应用APL权限等级说明
APL级别 |
说明 |
system_core等级 |
该等级的应用服务提供操作系统核心能力 |
system_basic等级 |
该等级的应用服务提供系统基础服务 |
normal等级 |
普通应用 |
- normal权限,该类型的权限仅向APL等级为normal及以上的应用开放
允许应用访问超出默认规则外的普通系统资源。这些系统资源的开放(包括数据和功能)对用户隐私以及其他应用带来的风险很小。
- system_basic权限,该类型的权限仅向APL等级为system_basic等级的应用开放
允许应用访问操作系统基础服务相关的资源。这部分系统基础服务属于系统提供或者预置的基础功能,比如系统设置、身份认证等。这些系统资源的开放对用户隐私以及其他应用带来的风险较大。
2.system_core权限,影响程度非常大,目前暂不向任何应用开放
涉及到开放操作系统核心资源的访问操作。这部分系统资源是系统最核心的底层服务,如果遭受破坏,操作系统将无法正常运行。
ACL 和APL的关系
normal低级别的,也可以申请system_grant(系统授权),
system core高级别的,同样需要申请 user_grant(用户授权)
这两者的关系,不是表面的那样
实际上它是一个很有用的特性,如我们可以为某个函数定义一个默认的定义,并将其用WEAK关键字修饰,当调用该函数的用户希望其使用自己定义的特殊实现时,就可以在其它的文件中重新定义一个非WEAK的同名函数,此时链接器链接时就会链接新的定义,而自动忽略掉用WEAK修饰的定义,从而可以实现函数功能的扩展,或者用于一些debug操作等。
鸿蒙应用权限管理和访问控制相关推荐
- 分离权限管理与访问控制
2019独角兽企业重金招聘Python工程师标准>>> 权限管理与访问控制常常被放在一起讨论,不是吗?我们的软件设计往往一来就是一个系统组成模块图,在那个图里面一个傻傻的方框里面写上 ...
- Casbin-authz-plugin:基于Casbin的Docker权限管理、访问控制插件
Docker是目前主流的一种容器技术.为了解决多用户同时访问Docker时产生的安全问题,Docker设计了访问控制插件(Authorization Plugin,见官方文档)这一机制,通过对Dock ...
- linux递归访问文件权限,Linux基础管理——文件权限管理(访问控制)
1.文件权限 1.1.三类权限简述 读.写.执行:rwx. 1.2.文件属性操作chown :设置文件的所有者(属主信息): chgrp :设置文件的属组信息: 1.3.修改文件的属主和属组 1.3. ...
- linux组权限管理,Linux组管理和权限管理
⒈Linux组基本介绍 1)在Linux中的每个用户必须属于一个组,不能独立于组外. 2)Linux中每个文件都有所有者.所在组.其它组的概念 ①所有者 一般(默认)为文件的创建者,谁创建了该文件,就 ...
- ⭐openGauss数据库源码解析系列文章—— 对象权限管理⭐
在前面文章中介绍过"9.3 角色管理整",本篇我们介绍第9章 安全管理源码解析中"9.4 对象权限管理"的相关精彩内容介绍. 9.4 对象权限管理 权限管理是安 ...
- MySQL基础知识点整理 - 账号和权限管理
MySQL基础知识点整理 - 账号和权限管理 一.账号管理 1. 查看账号列表 MySQL用户账号和信息存储在名为 mysql 的数据库中.一般不需要直接访问 mysql 数据库和表,但有时需要直接访 ...
- Linux 访问文件的acl信息,linux文件权限管理与ACL访问控制列表
一.文件属性 1.文件属性: 文件属性操作 chown : change owner ,设置文件所有者 chgrp : change group ,设置文件的属组 文件属主修改: chown 格式 ...
- hbase权限管理(访问控制标签ACL)
全栈工程师开发手册 (作者:栾鹏) 架构系列文章 默认情况下,访问hbase是不需要用户密码等认证方式的. HBase访问控制标签(ACL) HBase中的ACL基于用户的成员身份或组中的排除,以及给 ...
- RHCE系列之权限管理----ACL(访问控制列表)
我们知道,在Linux操作系统中,传统的权限管理分是以三种身份(属主.属組以及其它人)搭配三种权限(可读.可写以及可执行),并且搭配三种特殊权限(SUID,SGID,SBIT),来实现对系统的安全保护 ...
最新文章
- sql server面试题
- CVPR 2021 | pixelNeRF:一种基于NeRF的多视图三维重建网络
- 后香农时代,华为提出10大数学挑战问题
- 338. 比特位计数 golang
- Android -- WebView进度条
- 税务大厅计算机网络安全与管理,峡江县税务局多措并举加强网络安全和保密管理...
- harbor重置mysql密码_Harbor密码重置 密码修改 admin密码重置
- golang mysql 超时_Go语言channel超时机制
- java httpclient 重定向_httpclient 中post请求重定向
- 深度学习之四大经典CNN技术浅析
- python 连接mysql视频教程_Python操作MySQL视频教程
- C语言小项目——电子秒表(毫秒级)
- Java生成二维码QRCode(亲测可通过扫码枪扫出)
- Mac电脑无法从Photoshop 2020作为插件访问DeNoise AI的解决办法
- Redis的数据变成backup
- python 聊天机器人 中文_ 小智,又一个中文聊天机器人
- 如果你35岁恐慌了,那你真的该反思自己了···
- 我要做-微处理器嵌入式系统设计师
- SAP ABAP BOM 创建 CSAP_MAT_BOM_CREATE 多备选BOM
- Vscode配置Vue插件Vetur自动补全和Eslint校验,正在保存“index.vue”: 从 “‘ESLint‘, ‘Vetur‘“ (configure)中获取代码操作