Linux文件权限之设置用户ID和设置组ID(即SUID和SGID)

Linux的文件权限不只有r、w和x,还包括s和t两个比较特殊的权限位,它们与系统的账号和进程有关。

s可以出现在文件拥有者的x权限位上,也可以出现在文件所属组的x权限位上。前者是Set UID,即SUID,后者是Set GID,即SGID。

SUID权限拥有这样的功能:

  • SUID仅对二进制程序有效
  • 执行者对于该程序具有x的可执行权限
  • 执行权限仅在执行程序的过程中有效
  • 执行者将具有该程序拥有者的权限

例如su命令,它的权限是“-rwsr-xr-x”,无论任何人执行了它都将具有root权限,因为它的拥有者是root用户,不过这个权限仅在执行的su命令中有效。这也是su命令能够切换用户权限的实现原理。SUID在Linux系统中是非常常见的,那些需要提供给普通用户,但是又需要root权限才能正确执行的程序基本上都拥有SUID,比如passwd、mount等命令。

SGID权限的功能是这样的:

  • SGID仅对二进制程序有效
  • 执行者对于该程序具有x的可执行权限
  • 执行者在执行的过程中将会获得该程序所属用户组的支持

SGID用在目录上时具有如下功能:

  • 用户若对于此目录拥有r与x权限时,该用户能够进入此目录
  • 该用户在此目录上下的有效用户组将变成该目录的用户组
  • 若用户在此目录下具有w的权限,则用户创建的新文件的用户组与此目录的用户组相同

文件拥有者和用户组的x权限位可以有s,相应的其他用户的权限位对应的是t。t权限的名称是Sticky Bit(粘着位),简称SBIT,仅对目录有效,其功能如下:

  • 用户若对此目录拥有w和x权限,就拥有写的权限
  • 当用户在此目录下创建了文件或者目录,仅自己与root才有权利删除文件

典型的例子是/tmp目录,这个目录允许任何用户在里面创建文件,但是为了避免被其他人删除,则设置了SBIT权限。

你可能感兴趣的:(linux)