Linux 用户和组
Linux作为一个多用户的操作体系,每个用户在机器上都有一个私有空间,特别是它会具有配额的磁盘空间,以存储文件、接纳私有的mail音讯等。Linux有必要保证这部分私有空间只对它的具有者是可见的(类似于银行账户,当然只能关于储户自己可见啦),并且应该保证没有用户能够运用体系使用程序来侵略其他用户的私有空间(当然也便是不能让他人随意来动我银行账户的资金了).
在Linux操作体系中,一切的用户都是经过仅有的用户ID(UID->User ID)来辨认的。可是假如挑选与其他用户同享材料,同享的用户就应该是一个或许多个组的成员,这个用组ID(GID->group ID)来辨认(几个人出钱成立了一个小公司,这个公司名便是GID,咱们的钱便是同享的资源,我们都能够运用和可见)。每个文件都可与一个切当的组相关联。如:作为文件具有者的用户对该文件的读写权限,而组中其他用户则只具有读权限,体系内非组中的用户则没有任何权限(不行读不行写不行履行)。A8站源码交易平台
超级用户:在Linux体系中,有一个特别的用户->超级用户(root),root用户简直能够在Linux体系中做任何事情,因为OS没有对它采纳一般的防护机制,root用户能够拜访体系上的每个文件,能够办理每一个正在运转的用户程序。
一般用户和超级用户的切换:在Linux指令行输入指令:su -,然后输入root用户的暗码即可切换至root用户,可是主张一般情况下,不要随意运用root用户,因为root用户操作失误会导致体系文件丢掉乃至体系溃散。
在传统核算机上,UID是跟随着「人」(例如核算机的运用者或用户)。Android里的UID是跟随着「软件」(例如Android使用程序)。
因为每个使用程序都有个UID,只要带着此UID,才干存取该UID所包括的有关材料。所以假如AP-1与AP-2的UID不同,则在预设(Default)情况下,两边都无法读取对方的数据。这种分而治之的方法,能够减轻黑客软件的歹意损伤数据,提高手机的安全性。
当手机运用者(即User)下载你(即开发者)的使用程序,在装置(Install)时,Android就会给予一个UID。这个UID可连接到该使用程序的 AndroidManifest.xml档案的内容。所以User在装置你的使用程序时,在屏幕上的窗口里能够检视这个AndroidManifest.xml档案的内容。在检视时,用户会看到你对使用程序的目的、权限等阐明。当你承受这支程序的目的、权限阐明之后,Android就装置它,并给它一个UID。假如在你的使用程序履行期间有出轨(妄图做出非权限规模)的行为时,用户将会得到Android的正告消息。
有一些特别景象下,两支使用程序是能够持有相同的UID。例如,同一位开发者编撰的使用程序,常常需求推出新版别,这两种版别的程序能够持有相同的UID, 才有权限去将旧版程序所发生的数据复制转移到新版软件里。A8站源码交易平台
Pid是进程ID,Uid是用户ID,仅仅Android和核算机不相同,核算机每个用户都具有一个Uid,哪个用户start的程序,这个程序的Uid便是那个用户,而Android中每个程序都有一个Uid,默许情况下,Android会给每个程序分配一个一般等级互不相同的 Uid,假如使用之间要相互调用,只能是Uid相同才行,这就使得同享数据具有了必定安全性,每个软件之间是不能随意取得数据的。而同一个application 只要一个Uid,所以application下的Activity之间不存在拜访权限的问题。
关于APPID UID userid,在单用户的情况下,appid 便是Uid,在多用户的时分经过appid 和userid 从头核算新的uid
public static int getUid(@UserIdInt int userId, @AppIdInt int appId) {
if (MU_ENABLED) {
return userId * PER_USER_RANGE + (appId % PER_USER_RANGE);
} else {
return appId;
}
}
UserHandle包括三种概念:userid,uid,appid
userid:便是有多少个实践的用户罗,例如老爸很穷,要跟儿子共用一台手机,那能够跟手机将两个用户,user 0和user 1。两个用户的使用和数据是独立的。
uid:跟使用进程相关。除了sharduid的使用,每个用户的每个使用的uid不相同的。用户0的使用的uid从一万开端算。
appid:跟app相关,包名相同的appid都相同。即使是不同用户。例如你和儿子都在这台手机装了微信,但这两个微信的appid是相同的。
appid 的规模是
public static final int FIRST_APPLICATION_UID = 10000;
/**
* Last of application-specific UIDs starting at
* {@link #FIRST_APPLICATION_UID}.
*/
public static final int LAST_APPLICATION_UID = 19999;
A8站源码交易平台
关于用户组的进程来说,似于u0_a86这样的UID。这个UID的前一部分表明userId,后一部分表明appId(减去Process.FIRST_APPLICATION_UID的成果)。
//uid 不能超出约束。Android 对 UID 进行了分类,使用 APK 地点进程的 UID 从 10000 开端,
//而体系 APK 地点进程小于 10000
A8站源码交易平台