Linux中,文件除了有rwx,这个三个读、写、执行权限之外(如果不清楚这三个权限,请戳这里),还有其他特殊权限,那就是SUIDSGIDSBIT


SUID

SUID全称Set User ID,当设置了这个特殊权限之后,当拥有者拥有文件执行权限x,在文件拥有者的x权限位上显示s,而不是显示x;而拥有者没有文件的执行权限时,x位上显示的是S

SUID 限制与功能

  • SUID权限仅对二进制程序(Binary Program)有效
  • 执行者对于该程序需要具有x的可执行权限
  • 执行者在执行具有SUID权限的二进制程序过程中,暂时获得该程序拥有者(owner)的权限

讲个经典例子,Linux系统中,所有用户的账号存在/etc/passwd文件里面(好像之前账号密码都在这个文件里),密码存在/etc/shadow文件里面,看一下这shadow文件和用于修改密码的passwd命令的权限

shadow

passwd

对于shadow文件来说,对于文件的所有者也就是root用户才有w的权限,所属组和其他用户都没有w权限,但是普通用户也能自己修改自己的密码呀,没有写权限,却能修改文件里密码,这是为什么呢?这个先放放

再来看看passwd命令,我们都知道修改用户密码需要用到passwd命令,分析一下权限,对于当前这个系统来说,系统上的每个用户都有这个命令的执行权,但是我们注意到在文件所有者权限第三位,也就是一般放x的位置上现在是s,这说明了这个二进制执行文件设置了特殊权限,也就是SUID权限

到现在就可以知道为什么普通用户对存放密码的shadow文件没有写权限,却能修改密码,因为普通用户修改密码需要执行passwd命令,而这个命令设置了SUID权限,所以普通用户在执行passwd命令时会临时获得这个命令的所有者(owner)也就是root的权限,也就能修改shadow文件了

但如果使用cat命令去查看shadow文件,是不能读取了,因为cat命令没有设置SUID的权限,当普通用户使用cat命令去读取shadow文件时,他是以一个普通用户去读取,刚刚分析了shadow文件的权限,除了文件所有者和所属组的用户可以读文件之外,其他用户是不能读,这就可以解释为什么cat不到shadow文件了

注:SUID仅对可执行二进制文件上,不能够用在shell脚本上,当然对于目录也是无效的

SGID

SGID全称Set Group ID,当s标志在文件所有者的x位上位SUID,那么当s在所属组的x位上就称SGID

与SUID不同的是,SGID可以针对文件或目录来设置

对于文件来说,SGID有以下功能

  • SGID对二进制程序有用
  • 程序执行者对于该程序来说,需具备x的权限
  • 执行者在执行的过程中将会获得该程序用户组的支持(获得所属组的权限)

对于目录来说,SGID有以下功能

  • 用户若对此目录具有rx的权限时,该用户能够进入此目录
  • 用户在此目录下的有效用户组(Effective Group)将会变成该目录的用户组
  • 用途:若用户在SGID的目录下所创建的文件或目录的所属组不再是创建用户的所属组,而是SGID目录(上级目录)的所属组

其实也就跟SUID差不多

SBIT

SBIT全称Sticky Bit,目前SBIT只针对目录有效,对于文件已经没有效果了

SBIT对于目录的作用

  • 当前用户对于此目录具有wx权限,即具有写入的权限
  • 当用户在该目录下建立文件或目录时,仅有自己和root才有权力删除该文件

简单说,就是当用户甲A目录具有用户组(所属组)或者其他用户的权限,并且拥有A目录w的权限,意味着用户甲可以在A目录内任何人建立的目录或文件进行删除、更名、移动等操作。不过,当A目录设置了SBIT权限选项时,用户甲只能够针对自己所建立的文件或目录进行删除、更名、移动等操作,而无法删除其他用户所创建的目录或文件

标签: 特殊权限

添加新评论