Linux文件权限与属性之SetUID、SetGID、SBIT

一、SetUID

SetUID(或者 s 权限):当一个具有执行权限的文件设置SetUID权限后,用户执行这个文件时将以文件所有者的身份执行。passwd命令具有SetUID权限,所有者为root(Linux中的命令默认所有者都是root),也就是说当普通用户使用passwd更改自己密码的时候,那一瞬间突然 “灵魂附体” 了,实际在以passwd命令所有者root的身份在执行,root当然可以将密码写入/etc/shadow文件(root是一个bug的存在,在Linux中就没有它不能干的事),命令执行完成后该身份也随之消失。

  1. SetUID条件:

    • 必须具备以下几个条件(前提):

      只有可执行的二进制程序才可以设置SetUID
      所有者必须对欲设置SetUID的文件具备 可执行(x) 权限
      命令执行过程中,其它用户获取所有者的身份(灵魂附体)
      SetUID具有时间限制,即完成该程序执行后就消失(不能霸占住不放吧?)

  2. 设置和取消SetUID

    • 设置SetUID

        chmod 4xxx < file-name >
        chmod u+s < file-name >
      
    • 取消SetUID

        chmod xxx < file-name >
        chmod u-s < file-name >
      

二、SetGID

其实,SetGID基本与SetUID相同,无非也就是一个设置所有者的权限,GID为设置所属组的特殊权限!
区别点在于:SetGID也可以设置目录的相关SetGID权限!

  1. SetGID条件:

    • 针对文件:

        可执行的二进制文件
        命令执行者(即所属组)对该文件具备 x 权限
        执行时,执行者被所属组灵魂附体
        权限只在执行过程中有效
      
    • 针对目录:

       普通用户对目录具备r和x权限,才可以进入到该目录
       普通用户在此目录中的有效组会变成此目录的所属组
       如普通用户对该目录具备w权限,新建文件的所属组为该目录的所属组
      
  2. 设置和取消SetGID

    • 设置SetGID

        chmod 2xxx
      
    • 取消SetGID

        chmod xxx
      

三、SBIT

Stick Bit,粘滞位。

  1. 作用:

     只对目录有效
     普通用户对该目录有w和x权限
    

若没有粘滞位,则普通用户可以对目录下的文件/子目录进行删除操作(因为普通用户对目录具有w权限),包括其它用户建立的目录/文件;但若赋了SBIT,则普通用户只能删除自己创建的文件/目录,而不能删除不属于自己的文件/目录!

  1. 设置和取消SBIT

    • 设置SBIT

        chmod 1xxx < dir-name >
        chmod o+t < dir-name >
      
    • 取消SBIT

        chmod xxx < dir-name >
        chmod o-t < dir-name >
      

参考资料:https://www.cnblogs.com/Jimmy1988/p/7260215.html

你可能感兴趣的:(服务器)