返回介绍

10.2 Linux 中的 setuid 和 setgid 概念

发布于 2024-10-10 22:32:17 字数 3667 浏览 0 评论 0 收藏 0

那么问题来了,为何改了一个权限,就会导致 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文