Android 进程和文件的UID/GID
一、文件的操作权限和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相关推荐
- 【Android 逆向】Android 进程注入工具开发 ( 远程进程 注入动态库 文件操作 | Android 进程读取文件所需的权限 | fopen 打开文件标志位 | 验证文件权限 )
文章目录 前言 一.Android 进程读取文件所需的权限 二.fopen 打开文件标志位 三.验证文件权限 前言 一.Android 进程读取文件所需的权限 通过 注入工具 , 将 libbridg ...
- 【Android 逆向】Android 进程注入工具开发 ( 总结 | 源码编译 | 逆向环境搭建使用 | 使用进程注入工具进行逆向操作 ) ★★★
文章目录 一.Android 进程注入工具开发系列博客 二.Android 进程注入工具 源码下载编译 三.逆向环境搭建 四.使用注入工具进行逆向操作 1.获取远程进程号 2.注入工具准备 3.注入动 ...
- 【Android 逆向】Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 )
文章目录 一.编译注入工具 二.编译结果文件说明 三.注入过程说明 一.编译注入工具 在 Visual Studio 2019 中打开了一个 " 生成文件项目 " , 该项目就是注 ...
- 【Android 逆向】Android 系统文件分析 ( cpuinfo 处理器信息文件 | self 当前进程信息文件 | meminfo 当前内存信息文件 )
文章目录 一.cpuinfo 处理器信息 二.self 当前进程信息文件 三.meminfo 当前内存信息文件 一.cpuinfo 处理器信息 cpuinfo 文件中 , 会标明 CPU 型号 , A ...
- android进程间传递文件描述符原理
在Linux中,进程打开一个文件,返回一个整数的文件描述符,然后就可以在这个文件描述符上对该文件进行操作.那么文件描述符和文件到底是什么关系?进程使用的是虚拟地址,不同进程间是地址隔离的,如何在两个进 ...
- Android init.rc文件解析过程详解(三)
Android init.rc文件解析过程详解(三) 三.相关结构体 1.listnode listnode结构体用于建立双向链表,这种结构广泛用于kernel代码中, android源代码中定义了l ...
- 理解Android进程创建流程
基于Android 6.0的源码剖析, 分析Android进程是如何一步步创建的,本文涉及到的源码: /frameworks/base/core/java/android/os/Process.jav ...
- Android 系统(243)---Android进程系列第一篇---进程基础
Android进程系列第一篇---进程基础 内容预览.png 概述: 本文主要讲解进程基础,更深入的认识有血有肉的进程,内容涉及进程控制块,信号,进程FD泄露等等.仅供参考,欢迎指正. 一.从Linu ...
- Android 进阶——系统启动之Android进程造物者Zygote 进程启动详解(六)
引言 前面系列文章介绍了Android系统的第一个用户进程--init进程由解析init.rc脚本启动,完成属性系统的初始化等工作后紧接着启动Android系统上的造物者--Zygote进程,这篇文章 ...
- Android 进程保活手段分析
如何进行进程保活,首先我们应该先分析一下进程被杀死的原因开始 Android进程被杀死的场景分析: 从 Android 的进程被杀死的场景分析,查看被杀死的原因 一.Android手机的进程回收策略 ...
最新文章
- android edittext输入邮箱,[Android教程]EditText怎样限制用户的输入?数字/字母/邮箱
- 概率论与数理统计中的算子半群 第一讲 Banach-Steinhaus定理1 Baire‘s Category与Banach-Steinhaus定理的证明
- WebShop WebSocket server 和WebSocket客户端的一对多关系维护
- openlayers 3读取加载geojson格式数据
- [设计模式] - Singleton单例模式
- JAVA字节流(读写文件)
- OpenCV-绘制简易直方图DrawHistImg
- paip.编程语言方法重载实现的原理及python,php,js中实现方法重载
- 自动驾驶 10-3: 全球导航卫星系统 (GNSS)The Global Navigation Satellite Systems
- win7资源服务器未响应,win7电脑怎么设置服务器未响应
- mysql front连接_如何用MySQL-Front远程连接MySql?
- 计算机快速看图教程,CAD快速看图教程:CAD图纸测量方法集锦
- CVE-2018-7490 uWSGI PHP Plugin目录遍历
- eclipse下改变 匹配标签和匹配括号的颜色
- python本科毕设_关于本科毕设选题请教问题
- TFTP服务器与客户端的安装
- scrapy爬取豆瓣电影教程
- 计算机信息专业考研院校排名,2017年电子信息工程专业考研院校排名
- win7安装eclipse
- AHB2APB 同步桥的设计代码(Verilog)
热门文章
- 域名注册查询批量筛选工具
- android 最新 九宫格,Android布局案例之人人android九宫格
- Linux 管道 管道命令 命名管道
- 中国打造国产“谷歌地球”清晰度吓人
- mac系统怎么打开ftp服务器,mac系统怎么打开ftp服务器
- html新闻公告滚动效果,好用的滚动公告HTML代码
- 笔记本电脑连接无线网总是突然断网
- 多节点什么网络取得技术性突破_我国学者研究“多节点量子网络”取得基础性突破...
- java编辑word文档,向word文档尾部添加图片
- 关于pandas的时间序列中的freq频率参数如何设置的官方参考说明【以date_range方法中的freq参数举例】