详解Linux中文件的特殊权限:SGID、SUID、SBIT

时间:2022-03-13 15:12:03

Set UID(SUID)

什么是SUID?

  当s这个标志出现在文件所有者owner的权限x上时,例如/usr/bin/passwd的权限状态是”-rwsr-xr-x”,这样的形式就被称为SetUID。

SUID的有什么样的限制和功能呢?

  我们首先将SUID拥有的限制和功能列出来,然后再通过一个具体的例子进行解释:

  1. 首先,SUID仅对二进制程序有效;
  2. 执行者要对该程序具有x权限;
  3. 这个权限是在程序的执行过程中发挥作用的;
  4. 执行者将暂时拥有程序owner的权限。

  接下来我们通过一个具体的例子来加深对上面的限制和概念的理解。在Linux系统中,所有的帐号密码都记录在/etc/shadow文件中,这个文件的权限是”r- - - - - - - - 1 root root”(其中1表示i node节点的数目),意思就是只有root可对读这个文件而且可以对这个文件进行强制写入。但是普通用户也是可以通过passwd命令修改自己的密码的。你可能会觉得奇怪,明明其他用户是没有权限访问/etc/shadow这个文件的,为什么密码可以被修改呢?这就是SUID的功能啦。例如,我的当前用户是flyonthemap(在地图上飞行),对应上面的功能和限制的解释则有:

  1. usr/bin/passwd的权限状态是“-rwsr-xr-x”,因此flyonthemap对有x的权限,也就是说可以执行passwd命令。
  2. passwd的拥有者是root。
  3. 我在执行的过程中可以暂时的获得root的权限,强制写入修改的内容。
  4. /etc/shadow可以被vbird所执行的passwd所修改。

  但是flyonthemap这个账户是不能用cat读取/etc/shadow这个文件的,这又是为什么呢?查看/bin/cat的权限状态“rwxr-xr-x”发现并没有特殊权限s,因此我们就不能临时获得root权限了,当然也就不能读取/etc/shadow文件的内容了。

Set GID(SGID)

什么是SGID?

  与SUID类似,SGID就是s在表示Group权限的x处。

SGID具有什么功能呢?

  SGID的功能主要分为两方面一是对文件,二是对目录,首先我们看SGID对文件有哪些功能:

  1. SGID同样是对二进制程序有效。
  2. SGID同样要求程序的执行者要具有x权限。
  3. 与SETUID类似的是,程序的执行者会在执行的过程中获得用户组的支持。

  我们还是通过一个例子来加深对这些功能的理解,例如我们可以通过/usr/bin/locate程序查询/var/lib/mlocate/mlocate.db这个文件中的内容,这两个文件的权限状态分别是“rwx– –s – – x 1 root slocate”、“rwxr– – – – – 1 root slocate”。
  首先flyonthemap账户不属于slocate用户组,但是flyonthemap账户具有x执行权限,这样在程序的执行过程中flyonthemap(others)账户就能够获得用户组的支持,从而具有r权限。
  接下来,我们在看一下SGID使用在目录上将具有哪些功能:
  如果一个directory (xyz)的group是group1,xyz有SGID (如2775; 2表示SGID), 那么group1里任何一个用户在xyz内产生的新文件自动归group1,即group1内的任何用户都可以编辑此文件。

Sticky Bit(SBIT)

什么是SBIT?

  SBIT即Sticky Bit,它出现在其他用户权限的执行位x上,只能用来修饰一个目录。当某一个目录拥有SBIT权限时,则任何一个能够在这个目录下建立文件的用户,该用户在这个目录下所建立的文件,只有该用户自己和root可以删除,其他用户均不可以。

总结

  前面介绍了SUID、SGID和SBIT的权限和功能,那么我们应该如何对这些权限进行设置呢?类似于rwx分别对应于数字421,SUID、SGID、SBIT也分别对应于数字421。
  假设你想将文件file的权限改为“-rwsr-xr-x”,注意到s在user中,那么在原来的755之前还要加上4,即用命令

chmod 4755 file;

  值得注意的是在原来s和t出现的位置上还可能出现大写S和T情况,这主要是文件相应位置上拥有着x权限缺失造成的。这其实也很好理解,如果文件的拥有者都不能执行文件,其他人还怎么获得特殊权限呢?