SUID 即 SetUID          SGID 即 SetGID      SBIT 即 Sticky BIT

是linux系统中的三种特殊权限。其实这三种权限,我们是不建议用户手动设置的,但是我们为什么还要学习呢?因为有写系统文件是默认带这些权限的,当然我们为了了解其作用,所以要对这些特殊权限有所了解。在学习的过程中我们也会了解到,如果随意使用这些权限的危险性,从而约束我们自己不会随意使用它们。

还记得我们在使用umask命令查看权限掩码的时候,查得的掩码为 0022 (可能为其它) 那么后三位022对应属主属组其它人权限,第一位0则对应我们今天讨论的这三个特殊权限。

在深入讨论之前我们先明确一些概念 我们用 4 表示SUID权限 2 表示SGID权限 1表示SBIT权限,若需要权限累加可以把数字相加。

设置SUID权限后我们会看到属主权限表示,执行权限位不是原来的x而是变为了s。

Linux-SUID,SGID与SBIT_普通用户

设置SGID权限后我们会看到属组权限表示,执行权限位不是原来的x而是遍为了s。

Linux-SUID,SGID与SBIT_文件名_02

设置SBIT权限后我们会看到其它人权限表示,执行权限位不是原来的x而是遍为了t。

Linux-SUID,SGID与SBIT_普通用户_03

当然此处用abc同一个文件演示这三种权限可能有点不太合适,因为这三种权限不是都适合用在文件上的,但是我们从权限表示符上的变化能看到这三个权限的存在。在赋予上述三种权限的同时,须对对应的文件(广义的文件包括目录)有执行权限才有意义。

如下情况,在对文件没有执行权限的时候加SUID权限,其实是没有意义的,执行位权限变为了S(大写的s),因为你对它都没有执行权限,就不可能发生你在执行此文件的时候身份变为其属主身份这件事,其实此时的S是没有意义的,对此我们可以理解为  s = S + x

Linux-SUID,SGID与SBIT_普通用户_04


1 SUID权限(只针对可执行的文件,针对属主权限)

       只有可以执行的二进制程序才能设定suid权限,并且命令的执行者要对该程序拥有x(执行)权限,给文件设置此权限后,命令执行者在执行该程序的过程中获得该程序文件的属主身份,执行完毕则恢复用户原有身份。

设置SUID权限:

chmod 4755 文件名  或

chmod u+s 文件名

删除SUID权限:

chmod 0755 文件名  或

chmod u-s 文件名

针对此权限,典型的应用就是普通用户修改自己的密码。

/user/bin/passwd  文件属于root,但由于其有SUID权限,那么普通用户在执行该文件的过程中,普通用户的身份在那一瞬间变为了root从而保证普通用户可以执行此命令来修改自己的用户密码。再者,由于限制普通用户执行此命令的时候,不能指定用户,所以普通用户不能修改其它用户的密码。


2 SGID权限(针对可执行的文件和目录,针对属组权限)

此权限针对可执行文件和用户有可执行权限的目录。

当赋予文件SGID权限时,用户在执行该文件的过程中,用户的组身份会切换为文件所属组的身份,执行完毕恢复用户原有组身份。

当SGID针对目录作用时,普通用户在此目录中的有效组会变成此目录的属组。若普通用户对此目录有w权限,新建的文件默认数组是这个目录的属组。

设置SGID权限:

chmod 2755 文件名 或

chmod g+s 文件名

删除SGID权限:

chmod 0755 文件名 或

chmod g-s 文件名


典型应用 locate 命令


3 SBIT权限(只针对目录,针对其它人权限)

SBIT的应用场景是,当一个目录的其它人权限为wx时,或者rwx时,因为对目录不可读是没有意义的,为了避免用户与用户之间文件误删,则需要用SBIT权限来限制用户只能删除自己的文件。

设置SBIT权限:

chmod 1775 文件名  或

chmod o+t  文件名

删除SBIT权限:

chmod 0775 文件名  或

chmod o-t  文件名

典型的应用是  /tmp/   目录,这是一个临时目录,所有用户都可以在此目录下读写执行,但是为了避免用户与用户之间误删,则开启了SBIT来限制。