admin 管理员组

文章数量: 1184232


2024年3月18日发(作者:dubbo连接池)

Linux文件特殊权限 SUID/SGID/Sticky Bit

前面一直提到文件的重要权限,就是rwx这3个读、写、执行的权限。但是,怎么 /tmp

权限有些奇怪?还有, /usr/bin/passwd也有些奇怪,怎么回事呢?

[root@linux ~]# ls -ld /tmp ; ls -l /usr/bin/passwd

drwxrwxrwt 5 root root 4096 Jul 20 10:00 /tmp

-r-s--x--x 1 root root 18840 Mar 7 18:06 /usr/bin/passwd

不是只有rwx吗?为什么还有其他的特殊权限呢?不要担心,我们这里先不谈这两个权限,

只是先介绍一下而已。因为必须要有账号的ID概念,以及程序的进程(process)概念后,才

能够进一步了解这些特殊权限所表示的意义。

Set UID

会创建s与t权限,是为了让一般用户在执行某些程序的时候,能够暂时具有该程序拥有

者的权限。举例来说,我们知道,账号与密码的存放文件其实是 /etc/passwd与 /etc/shadow。

而 /etc/shadow文件的权限是“-r--------”。它的拥有者是root。在这个权限中,仅有root

可以“强制”存储,其他人是连看都不行的。

但是,偏偏笔者使用dmtsai这个一般身份用户去更新自己的密码时,使用的就是

/usr/bin/passwd程序,却可以更新自己的密码。也就是说,dmtsai这个一般身份用户可以存

取 /etc/shadow密码文件。这怎么可能?明明 /etc/shadow就是没有dmtsai可存取的权限。

这就是因为有s权限的帮助。当s权限在user的x时,也就是类似 -r-s--x--x,称为Set UID,

简称为SUID,这个UID表示User的ID,而User表示这个程序(/usr/bin/passwd)的拥有

者(root)。那么,我们就可以知道,当dmtsai用户执行 /usr/bin/passwd时,它就会“暂

时”得到文件拥有者root的权限。

SUID仅可用在“二进制文件(binary file)”,SUID因为是程序在执行过程中拥有文件

拥有者的权限,因此,它仅可用于二进制文件,不能用在批处理文件(shell脚本)上。这是因

为shell脚本只是将很多二进制执行文件调进来执行而已。所以SUID的权限部分,还是要看

shell脚本调用进来的程序设置,而不是shell脚本本身。当然,SUID对目录是无效的。这点

要特别注意。

Set GID

进一步而言,如果s的权限是在用户组,那么就是Set GID,简称为SGID。SGID可以用

在两个方面。

文件:如果SGID设置在二进制文件上,则不论用户是谁,在执行该程序的时候,它的有

效用户组(effective group)将会变成该程序的用户组所有者(group id)。

目录:如果SGID是设置在A目录上,则在该A目录内所建立的文件或目录的用户组,将

会是此A目录的用户组。

一般来说,SGID多用在特定的多人团队的项目开发上,在系统中用得较少。

Sticky Bit

这个Sticky Bit当前只针对目录有效,对文件没有效果。SBit对目录的作用是:“在具有


本文标签: 文件 权限 程序 执行 目录