Linux SUID SGID 讲解

时间:2023-12-05 11:38:14

SUID属性

UNIX的内核是根据什么来确定一个进程对资源的访问权限的呢?

  • 是这个进程的运行用户的(有效)ID,包括user id和group id。用户可以用id命令来查到自己的或其他用户的user id和group id。
  • 除了一般的user id 和group id外,还有两个称之为effective 的id,就是有效id,上面的四个id表示为:uid,gid,euid,egid。内核主要是根据euid和egid来确定进程对资源的访问权限。
  • 一个进程如果没有SUID或SGID位,则euid=uid egid=gid,分别是运行这个程序的用户的uid和gid。

  • 例如kevin用户的uid和gid分别为204和202,foo用户的uid和gid为200,201,kevin运行myfile程序形成的进程的euid=uid=204,egid=gid=202,内核根据这些值来判断进程对资源访问的限制,其实就是kevin用户对资源访问的权限,和foo没关系。 所以没有访问权限。

  • 如果一个程序设置了SUID,则euid和egid变成被运行的程序的所有者的uid和gid,例如kevin用户运行myfile,euid=200,egid=201,uid=204,gid=202,则这个进程具有它的属主foo的资源访问权限。

  • SUID的作用就是这样:让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源。passwd就是一个很鲜明的例子。

  • SUID的优先级比SGID高,当一个可执行程序设置了SUID,则SGID会自动变成相应的egid。

  • SUID属性只能运用在可执行文件上,当用户执行该执行文件时,会临时拥有该执行文件所有者的权限。
  • 在使用“ls -l”或“ll”命令浏览文件时,如果可执行文件所有者权限的第三位是一个小写的“s”就表明该执行文件拥有SUID属性。
  • 如果在浏览文件时,发现所有者权限的第三位是一个大写的“S”则表明该文件的SUID属性无效,比如将SUID属性给一个没有执行权限的文件。

SGID属性

  • SGID于SUID不同,SGID属性可以应用在目录或可执行文件上。当SGID属性应用在目录上时,该目录中所有建立的文件或子目录的拥有组都会是该目录的拥有组。比如“/charles”目录的拥有组是charles,当“/charles”目录拥有SGID属性时,任何用户在该目录中建立的文件或子目录的拥有组都会时charles;当SGID属性应用在可执行文件上时,其他用户在使用该执行文件时就会临时拥有该执行文件拥有组的权限。
  • 在使用“ls -l”或“ll”命令浏览文件或目录时,如果拥有组权限的第三位是一个小写的“s”就表明该执行文件或目录拥有SGID属性

Sticky属性

  • Sticky属性只能应用在目录,当目录拥有Sticky属性所有在该目录中的文件或子目录无论是什么权限只有文件或子目录所有者和root用户能删除。
  • 在使用“ls -l”或“ll”命令浏览目录时,如果其他用户权限的第三位是一个小写的“t”就表明该执行文件或目录拥有Sticky属性。