一、文件的操作权限和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 逆向】Android 进程注入工具开发 ( 远程进程 注入动态库 文件操作 | Android 进程读取文件所需的权限 | fopen 打开文件标志位 | 验证文件权限 )

    文章目录 前言 一.Android 进程读取文件所需的权限 二.fopen 打开文件标志位 三.验证文件权限 前言 一.Android 进程读取文件所需的权限 通过 注入工具 , 将 libbridg ...

  2. 【Android 逆向】Android 进程注入工具开发 ( 总结 | 源码编译 | 逆向环境搭建使用 | 使用进程注入工具进行逆向操作 ) ★★★

    文章目录 一.Android 进程注入工具开发系列博客 二.Android 进程注入工具 源码下载编译 三.逆向环境搭建 四.使用注入工具进行逆向操作 1.获取远程进程号 2.注入工具准备 3.注入动 ...

  3. 【Android 逆向】Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 )

    文章目录 一.编译注入工具 二.编译结果文件说明 三.注入过程说明 一.编译注入工具 在 Visual Studio 2019 中打开了一个 " 生成文件项目 " , 该项目就是注 ...

  4. 【Android 逆向】Android 系统文件分析 ( cpuinfo 处理器信息文件 | self 当前进程信息文件 | meminfo 当前内存信息文件 )

    文章目录 一.cpuinfo 处理器信息 二.self 当前进程信息文件 三.meminfo 当前内存信息文件 一.cpuinfo 处理器信息 cpuinfo 文件中 , 会标明 CPU 型号 , A ...

  5. android进程间传递文件描述符原理

    在Linux中,进程打开一个文件,返回一个整数的文件描述符,然后就可以在这个文件描述符上对该文件进行操作.那么文件描述符和文件到底是什么关系?进程使用的是虚拟地址,不同进程间是地址隔离的,如何在两个进 ...

  6. Android init.rc文件解析过程详解(三)

    Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...

  7. 理解Android进程创建流程

    基于Android 6.0的源码剖析, 分析Android进程是如何一步步创建的,本文涉及到的源码: /frameworks/base/core/java/android/os/Process.jav ...

  8. Android 系统(243)---Android进程系列第一篇---进程基础

    Android进程系列第一篇---进程基础 内容预览.png 概述: 本文主要讲解进程基础,更深入的认识有血有肉的进程,内容涉及进程控制块,信号,进程FD泄露等等.仅供参考,欢迎指正. 一.从Linu ...

  9. Android 进阶——系统启动之Android进程造物者Zygote 进程启动详解(六)

    引言 前面系列文章介绍了Android系统的第一个用户进程--init进程由解析init.rc脚本启动,完成属性系统的初始化等工作后紧接着启动Android系统上的造物者--Zygote进程,这篇文章 ...

  10. Android 进程保活手段分析

    如何进行进程保活,首先我们应该先分析一下进程被杀死的原因开始 Android进程被杀死的场景分析: 从 Android 的进程被杀死的场景分析,查看被杀死的原因 一.Android手机的进程回收策略 ...

最新文章

  1. android edittext输入邮箱,[Android教程]EditText怎样限制用户的输入?数字/字母/邮箱
  2. 概率论与数理统计中的算子半群 第一讲 Banach-Steinhaus定理1 Baire‘s Category与Banach-Steinhaus定理的证明
  3. WebShop WebSocket server 和WebSocket客户端的一对多关系维护
  4. openlayers 3读取加载geojson格式数据
  5. [设计模式] - Singleton单例模式
  6. JAVA字节流(读写文件)
  7. OpenCV-绘制简易直方图DrawHistImg
  8. paip.编程语言方法重载实现的原理及python,php,js中实现方法重载
  9. 自动驾驶 10-3: 全球导航卫星系统 (GNSS)The Global Navigation Satellite Systems
  10. win7资源服务器未响应,win7电脑怎么设置服务器未响应
  11. mysql front连接_如何用MySQL-Front远程连接MySql?
  12. 计算机快速看图教程,CAD快速看图教程:CAD图纸测量方法集锦
  13. CVE-2018-7490 uWSGI PHP Plugin目录遍历
  14. eclipse下改变 匹配标签和匹配括号的颜色
  15. python本科毕设_关于本科毕设选题请教问题
  16. TFTP服务器与客户端的安装
  17. scrapy爬取豆瓣电影教程
  18. 计算机信息专业考研院校排名,2017年电子信息工程专业考研院校排名
  19. win7安装eclipse
  20. AHB2APB 同步桥的设计代码(Verilog)

热门文章

  1. 域名注册查询批量筛选工具
  2. android 最新 九宫格,Android布局案例之人人android九宫格
  3. Linux 管道 管道命令 命名管道
  4. 中国打造国产“谷歌地球”清晰度吓人
  5. mac系统怎么打开ftp服务器,mac系统怎么打开ftp服务器
  6. html新闻公告滚动效果,好用的滚动公告HTML代码
  7. 笔记本电脑连接无线网总是突然断网
  8. 多节点什么网络取得技术性突破_我国学者研究“多节点量子网络”取得基础性突破...
  9. java编辑word文档,向word文档尾部添加图片
  10. 关于pandas的时间序列中的freq频率参数如何设置的官方参考说明【以date_range方法中的freq参数举例】