- 对本书的赞誉
- 前言
- 基础篇
- 第 1 章 Android 中锁屏密码加密算法分析
- 第 2 章 Android 中 NDK 开发
- 第 3 章 Android 中开发与逆向常用命令总结
- 第 4 章 so 文件格式解析
- 第 5 章 AndroidManifest.xml 文件格式解析
- 第 6 章 resource.arsc 文件格式解析
- 第 7 章 dex 文件格式解析
- 防护篇
- 第 8 章 Android 应用安全防护的基本策略
- 第 9 章 Android 中常用权限分析
- 第 10 章 Android 中的 run-as 命令
- 第 11 章 Android 中的 allowBackup 属性
- 第 12 章 Android 中的签名机制
- 第 13 章 Android 应用加固原理
- 第 14 章 Android 中的 so 加固原理
- 工具篇
- 第 15 章 Android 逆向分析基础
- 第 16 章 反编译神器 apktool 和 Jadx
- 第 17 章 Hook 神器 Xposed
- 第 18 章 脱壳神器 ZjDroid
- 第 19 章 Native 层 Hook 神器 Cydia Substrate
- 操作篇
- 第 20 章 静态方式逆向应用
- 第 21 章 动态调试 smali 源码
- 第 22 章 IDA 工具调试 so 源码
- 第 23 章 逆向加固应用
- 第 24 章 逆向应用经典案例分析
- 第 25 章 Android 中常见漏洞分析
- 第 26 章 文件加密病毒 Wannacry 样本分析
10.2 Linux 中的 setuid 和 setgid 概念
那么问题来了,为何改了一个权限,就会导致 run-as 运行报错了呢?修改的命令是:
修改之后的权限是:
和修改之前只有一个区别,就是 x 变成了 s,是怎么回事呢?
这就引出了本节的话题:关于 Linux 中的 setuid 和 setgid 问题。Linux 中的 setuid 和 setgid 是什么呢?Android 中有哪些场景会用到它们呢?下面来一一讲解。
1.Linux 中的 setuid 和 setgid 概念
Linux/Unix 下的可执行文件一旦被设置了 setuid 标记,使用该可执行程序的进程就将拥有该执行文件的所有者权限。普通用户执行这个命令,可使自己升级为 root 权限。
设置 setuid 的方法是:chmod 4755 program 或 chmod u+s program(setuid 只对文件有效)。
设置 setgid 的方法是:chmod 2755 dir 或 chmod g+s dir(setgid 只对目录有效)。
同时设置 setuid、setgid 的方法是:chmod 6755 program 被设置粘着位,chmod 1777 file 或 chmod o+t file(粘着位只对文件有效)当一个目录被设置为“粘着位”(用 chmod a+t),则该目录下的文件只能由以下人员删除:
·超级管理员
·该目录的所有者
·该文件的所有者
也就是说,即便该目录是任何人都可以写,但也只有文件的属主才可以删除文件。那么如何使用 chmod 命令修改文件的权限,和这两个函数有什么关系呢?修改文件权限的命令是 chmod,后面跟字母组合或者数字组合。
注意:Android 中的 toolbox 对 chmod 命令做了限制,chmod 只能使用数字代替字母来修改文件的权限,看下面例子:
这里使用字母组合方式来修改文件权限报错了:Bad mode,因为 Google 自带的 toolbox 中 chmod 语法不支持+x、-x。
2.chmod 命令的用法和参数详解
知道 Linux 中的文件权限构造之后,可以使用 ll 命令查看一个文件,格式类似下面这样:
下面解析一下这个格式所表示的意思。
这种表示方法一共有 10 位:
第 9 位表示文件类型,可以为 p、d、l、s、c、b 和-:
·p 表示命名管道文件
·d 表示目录文件
·l 表示符号连接文件
·s 表示 socket 文件
·c 表示字符设备文件
·b 表示块设备文件
·-表示普通文件
第 8~6 位、5~3 位、2~0 位分别表示文件所有者的权限、同组用户的权限、其他用户的权限,其形式为 rwx:
·r 表示可读,可以读出文件的内容,对应的数字是 4。
·w 表示可写,可以修改文件的内容,对应的数字是 2。
·x 表示可执行,可运行这个程序,对应的数字是 1。
那么,可以知道 rwx 的组合就是 7=1+2+4。
如果想修改文件的权限为所有者是 rwx,同组用户的权限是 r--,其他用户的权限是--x,命令如下:
这里看到:u 代表所有者,g 代表同组用户,o 代表其他用户。
使用数字更简单:
·7 代表所有者:1+2+4
·1 代表同组用户:1
·4 代表其他用户:4
如下所示,可以看到文件的权限:
下面再来看一下如何修改文件为 setuid 和 setgid。设置之后文件相应被设置了 SUID 或 SGID 位,分别表现在所有者或同组用户权限的可执行位上。例如:
1)-rwsr-xr-x 表示 SUID 和所有者权限中可执行位被设置。
2)-rwsr--r--表示 SUID 被设置,但所有者权限中可执行位没有被设置。
3)-rwxr-sr-x 表示 SGID 和同组用户权限中可执行位被设置。
4)-rw-r-sr--表示 SGID 被设置,但同组用户权限中可执行位没有被设置。
其实,在 Unix 的实现中,文件权限用 12 个二进制位表示,如果该位上的值是 1,表示有相应的权限:
第 11 位为 SUID 位,第 10 位为 SGID 位,第 9 位为粘着位,第 8~0 位对应于上面的三组 rwx 位。
-rwsr-xr-x 的值为:1 0 0 1 1 1 1 0 1 1 0 1
-rw-r-sr--的值为:0 1 0 1 1 0 1 0 0 1 0 0
1)所有者的 s 位对应的数字是:4
2)所有组的 s 位对应的数字是:2
3)粘着位对应的数字是:1
给文件加 SUID 和 SUID 的命令如下:
1)chmod u+s filename 设置 SUID 位
2)chmod u-s filename 去掉 SUID 设置
3)chmod g+s filename 设置 SGID 位
4)chmod g-s filename 去掉 SGID 设置
也可以用八进制表示方法来设置,如果明白了前面的 12 位权限表示法,八进制方法也很简单。
使用数字来设置文件的 SUID、SGID、粘着位:
第一位的 7 就代表 1+2+4,即设置了三个位。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论