一、文件的操作权限和UID,GID以及进程的UID,GID

1. 文件资源的权限力度:UID/GID

2. 文件的可操作权限

3. 进程的标识: PID, UID, GID, GIDs

二、UID,GID的Name 和ID的映射关系以及Chmod/chown命令

1. Name 跟 ID的映射

2. Chmod和chown命令介绍

3. UID/GID的衔接

三、进程的RealUID和EffectiveUID 以及进程UID的继承关系

1. 身份的标识: Real UID

2. 权利的标识: Effective UID

3. 身份和权利的关系

4. ROOT 用户的特权

5. UID的世袭

四、文件的setUID -- 文件的setUID标志以及其作用。

1. 平民身份,皇族特权  需求及解决

2. Linux的文件的setUID的标识

3. chmod设置setUID的方式

4. setUID的安全方式

5. 有RealGID, EffectiveGID, setGID吗

---------------------------------------------------------

一、文件的操作权限和UID,GID以及进程的UID,GID

1. 文件资源的权限力度:UID/GID

* 文件是一类资源

* 在Linux中,一切皆是文件,Socket, Driver

  * 文件资源对不同的Target(用户)的 不同操作权限的需求

* 如何描述和区分不同的Target? ID -> UID 惟一

* 某些场景,允许多个不同的Target(用户) 具有一致的操作权限, 用GID(Group ID)。多个用户合一属于一个GID,一个用户合一属于多个GID

* 文件权限管理: UID(文件的owner),GID, 其他用户

* 上帝用户: ROOT, 他的UID = 0; 上帝用户永远属于任何UID

2. 文件的可操作权限

ls -l 或者 ll

d rwx r-x r-x   UID  GID

d: 是文件夹

rwx: 文件所属UID1 具有的权限

r-x:    文件所属GID,但不是所属UID1,的UID2具有的权限 <=> UID1属于GID, UID2也属于GID

r-x:  既不是文件所属GID, 也不是文件所属UID1,的 其他 UID3具有的权限。<=>  UID3不属于GID

3. 进程的标识: PID, UID, GID, GIDs

PID:  进程的Unique Identity(惟一标识)。 每次Running的PID可能相同,或者不同,由系统分配

UID:  进程的身份标识。每次运行,即便重启后默认都相同。 不同的进程允许有相同的UID(用户身份标识)

GID: 进程的组身份标识。每次运行,即便重启后默认都相同。不同进程允许有相同的GID(组用户身份标识)。同一个进程允许属于多个GID

GIDs: 进程所属的全部GID

二、UID,GID的Name 和ID的映射关系以及Chmod/chown命令

1. Name 跟 ID的映射

userId: 10064

gids: 3003,1006,1015,1023,1028

不同的系统不同,我们这里讨论Android -- android_filesystem_config.h

更多请查看:http://aijiawang-126-com.iteye.com/blog/1046964

上下两张图的映射,就是Name 跟ID(UID, GID) 的映射

普通的apk运行的时候

2. Chmod和chown命令介绍

文件的 R/W/X 在系统内部用 3bit表示。 R是最高位,置位为 0x04; W为中间比特,0x02; X为最低比特,置位为0x01

Shell中表示是,置位使用相应的RWX, 为置位使用-

2.1 改变文件面向群体的操作权限是,使用chmod, 可以用数字, 也可用助记符

(a:all, u: owner user, g: group, +:添加权限, -: 移除权限)

举例:

2.2 chown用于修改文件的UID 和 GID

* Shell命令中常用Name的方式修改,而不是ID方式

* 一般格式: chown newUID : newGID FileName

3. UID/GID的衔接

* 文件基于UID /GID 划分面向群体, 不同的群体 定义不同的权限

* 用户的行为映射为进程的运行

* 进程用UID/GID来标识自己的身份

* 进程的UID和GID和文件的UID/GID 完美衔接

* reboot 这个api 在入口 调用时,可以check UID是不是root,如果不是则reject

三、进程的RealUID和EffectiveUID 以及进程UID的继承关系

1. 身份的标识: Real UID

* 进程的UID只是泛称, 其实有很多种UID

* 进程的 Real UID 是进程身份的标识, 用来说明Who am I, 没有实权

* 进程能做什么 不是有 RealUID来决定的

2. 权利的标识: Effective UID

* 有身份无权利是不行的, 有权利才能为所欲为

* Effective UID 是进程的权利的标识, 标识了该进程的“权利”

* Linux的授权 是 靠 Effective UID 来识别的

* 有权利就能做一切

* 之前说明的,文件、资源以及特权API操作权限 是 通过 Effective UID来识别的

3. 身份和权利的关系

* 默认情况下 Real UID == Effective UID, 所以使用ps命令输出的 就是 Effective UID

* 我们也可以显示完整的 Effective UID 和Real UID

4. ROOT 用户的特权

* Root 用户, 均是指 Effective UID == ROOT的进程

* 不受任何限制,可以为所欲为

* ROOT进程可以调用setUID 修改自己的Real UID,它也可以把自己的Effective UID改为普通的UID

5. UID的世袭

* 在Linux世界里,为了安全考虑,UID世袭规则: 身份可以世袭,权利不能世袭

* 子进程的 Real UID = Effective UID,  继承 父进程的Real UID

若父进程的Effective UID 与 Real UID 不一样,则不具有父进程的权利

四、文件的setUID -- 文件的setUID标志以及其作用。

1. 平民身份,皇族特权(ROOT权限)  需求及解决

1.1  需求:

* Linux的passwd是一个可执行程序, 用于修改用户的密码

* passwd需要修改多用户的账号文件(该文件仅能ROOT用户可以读写)

* 但是 普通用户 也要修改自己的密码

* passwd虽然 是平民身份(由普通用户启动),但是却需要皇族的权限  ---- 身份 和 权利不同

1.2 解决:

* 临时替身进程的Effective UID, 而维持身份不变(Real UID), 让他能够利用特权,而又不传给子进程

2. Linux的文件的setUID的标志

文件的Owner UID设置为特权用户(如ROOT)

文件面向 Owner UID的群体和操作权限 增加额外的setUID标志

Linux系统保证,任何用户(进程)执行该文件时(Fork一个新的进程来加载该可执行文件),子进程的Real UID仍然继承起父进程的RealUID, Effective UID 却被提升 到特权UID

setUID的前提是可执行文件,其他文件不能setUID

rws,用s替代了x;而且s包含了x

3. chmod设置setUID的方式

chmod 4775 test.txt    4就是特殊的设置方法

chmod 0775 test.txt    0可以清楚该标志

chmod u+s test.txt 也具有相同的效果

chmod u-s test.txt

4. setUID的安全问题

setUID的进程的EUID提升了, RUID没有提升

但是如果该进程为自己正身(将自己的RUID改成了和EUID一样的)了, 它的所有子进程都具有了该特殊权限

passwd没有正身

Android将自己的su 正身了

5. 有RealGID, EffectiveGID, setGID吗

答案是存在

Android 进程和文件的UID/GID的更多相关文章

  1. Android 的 so 文件加载机制

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 最近碰到一些 so 文件问题,顺便将相关知识点梳理一下. 提问 本文的结论是跟着 System.loadlibrary() 一层层源 ...

  2. 理解Android进程创建流程(转)

    /frameworks/base/core/java/com/android/internal/os/ - ZygoteInit.java - ZygoteConnection.java - Runt ...

  3. [转]Android进程与线程基本知识

    转自:http://www.cnblogs.com/hanyonglu/archive/2012/04/12/2443262.html 本文介绍Android平台中进程与线程的基本知识. 很早的时候就 ...

  4. Android进程永生技术终极揭秘:进程被杀底层原理、APP应对技巧

    1.引言 上个月在知乎上发表的由“袁辉辉”分享的关于TIM进程永生方面的文章(即时通讯网重新整理后的标题是:<史上最强Android保活思路:深入剖析腾讯TIM的进程永生技术>),短时间内 ...

  5. 【系统之音】Android进程的创建及启动简述

    Android系统中的进程(这里不包括init等底层的进程)都是通过Zygote fork而来的,那这些进程的启动流程都是怎样的呢? 这里将Android进程分为两个部分: (1)系统框架进程Syst ...

  6. Android so库文件的区节section修复代码分析

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78818917 一.Android so库文件的节表secion修复方案整理 1.简 ...

  7. 【腾讯Bugly干货分享】Android进程保活招式大全

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57ac4a0ea374c75371c08ce8 作者:腾讯——张兴华 目前市面上 ...

  8. Android进程整理

    一.概括 系统启动架构图: 上图在Android系统-开篇中有讲解,是从Android系统启动的角度来分析,本文是从进程/线程的视角来分析该问题. 1.1 父进程 在所有进程中,以父进程的姿态存在的进 ...

  9. Android 进程常驻----native保活5.0以上方案推演过程以及代码

    正文: 上一篇我们通过父子进程间建立双管道,来监听进程死掉,经过测试,无耗电问题,无内存消耗问题,可以在设置中force close下成功拉起,也可以在获取到root权限的360/cleanmaste ...

随机推荐

  1. Android4.0 以后不允许在主线程进行网络连接

    Android4.0 以后不允许在主线程进行网络连接,否则会出现 android.os.NetworkOnMainThreadException.因此,必须另起一个线程进行网络连接方面的操作. pac ...

  2. Power of Cryptography

    //只用一行核心代码就可以过的天坑题目............= = 题目: Description Current work in cryptography involves (among othe ...

  3. 关键字instanceof和final

    Instanceof关键字(类似oc的isKindOfClass 和 isMemberOfClass) instanceof(实例类型) 关键字作用: 1.判断某一个对象是否属于某一个类 2.inst ...

  4. SQL 中having 和where的区别分析

    在select语句中可以使用groupby子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句限制返回的结果集 在select语句中可以使用groupby子 ...

  5. [置顶] 文件io(一)--unix环境高级编程读书笔记

    unix-like(后面以linux为例)系统中的文件操作只需要五个函数就足够了,open.close.read.write以及lseek.这些操作被称为不带缓存的io,这里有必要说一下带缓存和不带缓 ...

  6. .NET DataTable转化为json格式

    标准的json用“分隔,不用' public static string DataSetToJson(DataTable dt) {        string json = string.Empty ...

  7. .h头文件 .lib库文件 .dll动态库文件之间的关系

    .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的. 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够 ...

  8. SQL高级优化之经常使用的优化策略-2(The Return Of The King)

    1.2 索引 索引不是越多越好,你须要知道索引建立多了.写入数据的效率会减少.怎样使用索引要看你的项目的应用场景,做出合理的測试评估. 1.2.1 统计数量 统计数量上.假设字段(fieldName) ...

  9. 也许是关于C#的一些常见误区

    写这点东西主要是看到知乎上有人在讨论相关的问题,但是有不少人都在说一些不严谨,甚至是完全错误 但是流传甚广的东西,甚至是一些大神都在说,以下根据我的回答总结.    一个很常见又很低级的误区是:认为引 ...

  10. 如何正确合理的建立MYSQL数据库索引

    索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytabl ...