Android中UID、GID和PID

版权声明:本文为CSDN博主「晓涵涵」的原创文章,本人仅做转发记录
原文链接:https://blog.csdn.net/xk7298/article/details/102291785

一、概述
在实际的开发中经常会碰到各种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"/>
1
权限提示暴露:在AndroidMaindfest.xml中申明Activity、Service或ContentProvider时,添加了permission,表明如果其他应用需要访问该类时,需要在该应用添加该类声明时的权限,如下所示。
声明私有的权限。
<activity android:name=".TestActivty" android:permission="com.xiaohan.permission"/>
1
添加访问的权限说明。

<uses-permission android:name="com.xiaohan.permission"/>
1
私有暴露:不同于以上两种类的暴露方式,如果想对于不同应用之间可以互相访问任何数据,则需要通过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"/>
1
添加很方便,但是不能随意使用,因为在同一个应用(PID)中,设计到程序之间最多的是线程间的通信,一旦独立出PID则涉及到进程间通信,类似于不同的两个应用,当然也可以通过上面的私有暴露和权限暴露的方式实现数据的通信,但是系统的开销较大。

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

不同的应用具有唯一的UID,同一个UID可具有不同的PID;
针对不同的PID之间数据的暴露可采用私有暴露和权限暴露,针对不同的UID之间可通过完全暴露的方式;
如果一个应用是系统应用,则不需要其他应用暴露,便可直接访问该应用的数据。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 修改文件的giduid可以使用chown命令。其gid表示文件所属的组,uid表示文件所属的用户。使用chown命令时,可以通过指定新的giduid来修改文件的所属组和所属用户。例如,要将文件file.txt的所属组修改为group1,所属用户修改为user1,可以使用以下命令: chown user1:group1 file.txt 其,user1和group1分别表示新的所属用户和所属组,file.txt表示要修改的文件名。注意,使用chown命令需要具有足够的权限。 ### 回答2: 要修改文件的giduid,首先需要明确目标文件的路径和名称。然后,我们可以使用chown命令来修改文件的uidgid。 chown命令的语法如下: chown [选项]... [所有人][:所属组] 文件... 其,选项是一些附加参数,如-R用于递归修改目录下的所有文件和子目录,其余的选项根据实际需要选择使用。[所有人]表示要修改的用户ID,[所属组]表示要修改的组ID,这两者可以使用用户名或用户ID进行标识。文件是要修改权限的目标文件或目录的路径。 例如,如果我们要将文件file1的uidgid修改为1000和2000,可以通过以下命令完成: chown 1000:2000 file1 如果我们需要递归地将目录dir1下的所有文件和子目录的uidgid修改为1000和2000,可以使用-R选项: chown -R 1000:2000 dir1 注意,在修改文件的uidgid之前,需要确保我们具有足够的权限来更改文件的所有权。否则,我们可能会收到"Operation not permitted"的错误提示。 总结起来,要修改文件的giduid,我们可以使用chown命令并提供要修改的用户ID和组ID。这样,我们就可以在不同的目标文件上修改文件的所有权。 ### 回答3: 修改文件的giduid是通过使用chown命令来实现的。chown命令用于改变文件或目录的拥有者和所属组。 要修改文件的gid,可以使用以下命令: chown :newgid filename 其,newgid是要修改为的新的所属组的gid,filename是要修改的文件的路径和名称。这样,文件的所属组就会被修改为newgid。 要修改文件的uid,可以使用以下命令: chown newuid filename 其,newuid是要修改为的新的拥有者的uid,filename是要修改的文件的路径和名称。这样,文件的拥有者就会被修改为newuid。 可以同时修改文件的uidgid,可以使用以下命令: chown newuid:newgid filename 其,newuid是要修改为的新的拥有者的uid,newgid是要修改为的新的所属组的gid,filename是要修改的文件的路径和名称。这样,文件的拥有者和所属组都会被同时修改。 需要注意的是,修改文件的giduid需要具有足够的权限才能进行操作。通常,只有root用户或者具有root权限的用户才能修改文件的拥有者和所属组。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值