Android中UID、GID和PID的讲解

一、概述
在实际的开发中经常会碰到各种ID,这是由于在计算机的发展过程中,需要对程序执行的每一步做标记,通过这些标记的关联便于系统的统一管理。像PID、UID、GID、和EUID等,其实对于这些ID不需要刻意记忆,只需要了解其名称含义,就明白其所对应的意义。

二、Linux中的概念解析
2.1 UID

在Linux中用户的概念分为:普通用户、根用户和系统用户。

普通用户:表示平时使用的用户概念,在使用Linux时,需要通过用户名和密码登录,获取该用户相应的权限,其权限具体表现在对系统中文件的增删改查和命令执行的限制,不同用户具有不同的权限设置,其UID通常大于500。

根用户:该用户就是ROOT用户,其UID为0,可以对系统中任何文件进行增删改查处理,执行任何命令,因此ROOT用户极其危险,如操作不当,会导致系统彻底崩掉。

系统用户:该用户是系统虚拟出的用户概念,不对使用者开发的用户,其UID范围为1-499,例如运行MySQL数据库服务时,需要使用系统用户mysql来运行mysqld进程。

2.2 GID

GID顾名思义就是对于UID的封装处理,就是包含多个UID的意思,实际上在Linux下每个UID都对应着一个GID。设计GID是为了便于对系统的统一管理,例如增加某个文件的用户权限时,只对admin组的用户开放,那么在分配权限时,只需对该组分配,其组下的所有用户均获取权限。同样在删除时,也便于统一操作。

除了UID和GID外,其还包括其扩展的有效的用户、组(euid、egid)、文件系统的用户、组(fsuid、fsgid)和保存的设置用户、组(suid、sgid)等。

2.3 PID

系统在程序运行时,会为每个可执行程序分配一个唯一的进程ID(PID),PID的直接作用是为了表明该程序所拥有的文件操作权限,不同的可执行程序运行时互不影响,相互之间的数据访问具有权限限制。

三 、Android中的概念解析
由于Android是基于Linux的基础上开发的,因此的UID(User Identifier)、GID(Group Identifier)和PID(Process Identifier)的概念也是来自于Linux,但是Android是基于客户端的系统,在Linux的基础上又进行了删改。

3.1 UID、GID

在Android中一个UID的对应的就是一个可执行的程序,对于普通的程序其UID就是对应与GID,程序在Android系统留存期间,其UID不变。

在Android中采用沙箱的概念来管理程序,不同的程序具有唯一的UID和PID,通过该UID来标识其所具有的“资源”,包括文件目录、数据库的访问、网络、传感器和日志等。和Linux一样,相互之间互不影响。

 不同的应用程序一般是运行在不同的进程中,相互之间的“资源”不可以访问,但可以通过进程共享的方式,实现不同程序之间的数据访问主要是针对Activity、Service和ContentProvider,其实现方式按照权限暴露级别分为:完全暴露、权限提示暴露和私有暴露三种方式。

完全暴露:是指通过android:exported=”true”实现,在AndroidMaindfest.xml中申明Activity、Service或ContentProvider时,将该属性设置为true后,就表明该类允许外界的数据访问。如果在申明时添加了intentFilter属性,则默认exported就为true,此时也可强制的设置为fasle。如未做其他设置(exported/intentFilter),则默认exported为fasle,即不对外暴露。

<activity android:name=".TestActivty" android:exported="true"/>
权限提示暴露:在AndroidMaindfest.xml中申明Activity、Service或ContentProvider时,添加了permission,表明如果其他应用需要访问该类时,需要在该应用添加该类声明时的权限,如下所示。

声明私有的权限。

<activity android:name=".TestActivty" android:permission="com.xiaohan.permission"/>
添加访问的权限说明。

<uses-permission android:name="com.xiaohan.permission"/>
私有暴露:不同于以上两种类的暴露方式,如果想对于不同应用之间可以互相访问任何数据,则需要通过sharedUserId+同一套签名的方式实现,只有这样才能运行在同一个进程中(同一个沙箱中)保证数据的相互访问。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.xiaohan.test"      //应用包名android:sharedUserId="com.xiaohan.sharedUID"  //暴露的唯一标识android:sharedUserLabel="@string/app_name"  //必须是引入资源文件中的字符串android:versionCode="1"android:versionName="1.1.0"android:installLocation="internalOnly">//安装位置,默认在内部目录,还包括auto:自动、preferExternal:外置SD卡中


3.2 PID

 

在3.1中已经不断的提及PID的概念,一般为了防止不同应用之间的相互干扰而分配唯一的PID,但是对同一个安卓应用可以具有多个PID,添加也很方便,只需要在声明类时指定进程名称即可,如下所示:

 <activity android:name=".TestActivty" android:process="com.xiaohan.test"/>
添加很方便,但是不能随意使用,因为在同一个应用(PID)中,设计到程序之间最多的是线程间的通信,一旦独立出PID则涉及到进程间通信,类似于不同的两个应用,当然也可以通过上面的私有暴露和权限暴露的方式实现数据的通信,但是系统的开销较大。

四、总结
本文主要讲述UID、GID和PID概念 ,在Linux和Android中的应用说明,这里针对Android系统需要特别注意以下几点:

不同的应用具有唯一的UID,同一个UID可具有不同的PID;

针对不同的PID之间数据的暴露可采用私有暴露和权限暴露,针对不同的UID之间可通过完全暴露的方式;

如果一个应用是系统应用,则不需要其他应用暴露,便可直接访问该应用的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620658.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

Linux中的UID、GID和SID

一、 UID和GID vi /etc/passwd查看用户配置情况 GID 是组ID (Group Identify)&#xff0c;表示组的身份唯一标识 UID 是用户ID (User Identify)&#xff0c;表示用户身份唯一标识 用户分类 centos6 超级用户 UID0 root 普通用户 UID500起 oldboy 虚拟用户 UID1-499 存在满足…

GiD初步使用

GiD软件具有全面的几何建模、网格划分、CAD数据导入、后处理结果显示等功能。GiD采用类似于CAD的操作模式&#xff0c;用户在使用GiD创建复杂模型问题时&#xff0c;会感受到前所未有的方便和轻松。它易于操作、方便灵活、直观便捷。 1. 下载与安装 到官方网站下载适合电脑配…

用户账号-用户标识符:UID与GID

虽然我们登录Linux主机的时候&#xff0c;输入的是我们的账号&#xff0c;但是其实Linux主机并不会直接认识你的“账号名称”的&#xff0c;它仅认识ID。ID与账号的对应关系在/etc/passwd当中。 每个登录的用户至少都会取得两个ID&#xff0c;一个是用户ID&#xff08;UserID&…

Android 安全机制(1)uid 、 gid 与 pid

1、概述 Android 安全机制来源于Linux&#xff0c;并且以Linux权限管理为基础&#xff0c;要了解Android的安全机制&#xff0c;需要从linux中的安全机制了解开始&#xff0c;而用户的权限管理又是linux安全机制的最基本的一个组成. Android的创新之处是在linux用户权限管理的…

UID、EUID、GID和EGID

UID、EUID、GID和EGID Linux中id真是太多了进程有pid&#xff0c;然后用户还有UID这种&#xff0c;真是有点绕。 在Linux当中一个进程&#xff08;程序&#xff09;拥有四个ID:真实用户UID、有效用户EUID、真实组GID和有效组EGID。 这里以真实用户UID和有效用户EUID为例&…

用户和用户组-UID和GID

用户和用户组-UID和GID Linux用户和用户组用户UID用户组GID/etc/passwd 文件结构/etc/shadow 文件结构 Linux用户和用户组 Linux采用一个32位的整数记录和区分不同的用户。这个区分不同用户的数字被称为User ID&#xff0c;简称UID。Linux系统中用户分为3类&#xff0c;即普通…

linux uid gid 作用,Linux uid和gid

Linux uid和gid教程 我们在登陆 Linux 系统时&#xff0c;虽然输入的是自己的用户名和密码&#xff0c;但其实 Linux 并不认识你的用户名称&#xff0c;它只认识用户名对应的 ID 号(也就是一串数字)。Linux 系统将所有用户的名称与 ID 的对应关系都存储在 /etc/passwd 文件中。…

GiD 自定义 简介

目录 Blog Links一、前言二、GiD的程序架构三、问题类型系统四、主配置文件/.spd文件4.1 单位制4.2 截面属性4.3 局部轴 五、Tcl文件5.1 GiD程序调用GiD-Tcl5.2 执行程序的命名空间 六、参考文献 Blog Links DalNur | 博客总目录 GiD 实用教程 GiD 前处理 实例 GiD 自定义 简…

GiD 实用教程

目录 Blog Links一、前言二、用户界面2.1 界面组成2.2 快捷键2.3 模式切换2.4 图层功能2.5 删除功能2.6 视图切换2.7 渲染视图 三、帮助与实例3.1 帮助文档3.2 官方实例 四、GiD Basics五、几何模型5.1 点的定义5.2 线的创建5.3 面的创建5.4 体的创建 六、网格划分6.1 布设种子…

python 双向链表

双向链表基本介绍 双向链表增删改查操作思路分析 双向链表增删改查操作代码实现 """ 双向链表的增删改查 """# 英雄类 class HeroNode:next None # 指向下一个节点&#xff0c;默认为空pre None # 指向前一个节点&#xff0c;默认为空def …

小马哥的CSS驿站

目录 第一章 CSS概述 1.1语法 1.2注释 1.3CSS的创建 第二章 CSS选择器 1.id选择器 2.class选择器 3.标签选择器 4.子代选择器 5.后代选择器 6.相邻兄弟选择器 7.后续兄弟选择器 8.交集选择器 9.并集选择器 第三章 CSS样式 1.文本与文字样式 &#xff08;1&…

35 岁财务自由的小马哥,我想跟他学学!

如果说 Java 工程师&#xff0c;有什么一定要“死磕”拿下的东西&#xff0c;那一定是 Spring 无疑了。 众所周知&#xff0c;Spring 无论在 Java 生态系统&#xff0c;还是在就业市场&#xff0c;是绝对的王者。Spring AOP 作为 Spring 框架的核心内容之一&#xff0c;其重要性…

计算机网络(速率、宽带、吞吐量、时延、发送时延)

速率&#xff1a; 最重要的一个性能指标。 指的是数据的传送速率&#xff0c;也称为数据率 (data rate) 或比特率 (bit rate)。 单位&#xff1a;bit/s&#xff0c;或 kbit/s、Mbit/s、 Gbit/s 等。 例如 4 1010 bit/s 的数据率就记为 40 Gbit/s。 速率往往是指额定速率或…

什么盒模型

一、盒模型 1.什么是盒模型 在我们HTML页面中&#xff0c;每一个元素都可以被看作一个盒子&#xff0c;而这个盒子由&#xff1a;内容区&#xff08;content&#xff09;、填充区&#xff08;padding&#xff09;、边框区&#xff08;border&#xff09;、外边界区&#xff0…

1.1 编辑楼层标高

在任意视图内批量编辑楼层。点击 按钮&#xff0c;弹出楼层管理器界面&#xff0c;可以对模型中已有的楼层高度进行修改、批量修改楼层名称。在创建楼层时&#xff0c;可以设定起始楼层序号&#xff0c;后续楼层将自动排序,当前文件中的新建楼层在“确定”完成前允许自由删除操…

2.3 轴生墙

按照已创建的弧形/ 直线轴生成墙。点击 按钮&#xff0c;弹出轴线生墙对话框&#xff0c;如图所示&#xff1a;在基本墙中选择需要添加的墙类型&#xff0c;在顶高和底高中选择楼层&#xff0c;并可以勾选是否按楼层切分墙。可在墙上定位线中选择墙的中心或者外边缘等为定位线…

3.5 连接管线

通过Revit管线建模功能&#xff0c;或是通过翻模软件创建的管线往往是不连接的&#xff0c;如果要把它们连接起来很费力&#xff0c;同时也不容易指定连接的角度。模盒提供的连接管线”功能可以很好地连接各种管线&#xff0c;并根据所选管线的空间位置&#xff0c;智能提示可以…

1.7 删轴线

点击 按钮&#xff0c;选择任意需要删除的轴线即可完成删除&#xff0c;与已删除轴线同组的后续众轴线编号会自动向前进位&#xff0c;以保持轴网编号的连续性。 先图AGI模盒下载地址&#xff1a; 先图官网&#xff1a;http://www.agicloud.com 安装下载&#xff08;腾讯微云&a…

Retina时代的前端视觉优化

随着New iPad的发布&#xff0c;平板也将逐渐进入Retina时代&#xff0c;在高分辨率设备里图片的显示效果通常不尽人意&#xff0c;为了达到最佳的显示效果就需要对图片进行优化&#xff0c;这里介绍一些优化方法&#xff1a; 一、用CSS替代图片 这一点在任何时候都适用&#x…

3.4 分割管线

Revit中创建的管线为与实际施工结合&#xff0c;往往需要按指定的安装长度进行打断。按照传统手段进行打断&#xff0c;效率低下。可以通过模盒提供的批量分割打断管线功能&#xff0c;对机电的管线进行一次性打断。 可以打断的机电管线包括&#xff1a;风管、水管和桥架。 点击…