文件的特殊权限:SUID、SGID和SBIT学习笔记

     零、下面是学习这个三个特效权限的总结,并分三个部分来分别介绍他们。

     一、SetUID
          (1)为什么引入SetUID?
          考虑下面一种情形,我们知道在Linux系统中,所有的账号密码都记录在/etc/shadow这个文件中,这个文件的权限为-rw-r----- 1 root shadow,也就是说只有root用户才能修改这个文件,但是我们一般账号可使用passwd命令来修改密码,从而修改这个文件,这是怎么做到呢?答案就是SetUID。
          
          (2)SUID含义理解
          我们可以查看文件/usr/bin/passwd的权限是-rwsr-xr-x,这里的s就被称为SetUID。基本上SUID有这样的限制与功能:
               I)SUID权限仅对二进制程序(binary program)有效;
               II)执行者对于该程序需要具有x的可执行权限;
               III)执行者在执行程序过程中具有程序所有者(owner)的权限;
               IV)该权限仅在执行该程序的过程中(run-time)有效。
          通过上面的描述,我就容易理解(1)中碰到的问题了:/usr/bin/passwd的权限是-rwsr-xr-x,因此一般用户能执行passwd;程序文件passwd的拥有者是root这个账号;一般用户在执行passwd的过程中,会暂时获得root的权限;因此/etc/shadow可以被一般用户所执行的passwd所修改。
          另外,SUID仅可用在二进制程序上,不能够用在shell script上面。这是因为shell script只是将很多的二进制执行文件调进来执行而已。所以SUID的权限部分,还是得看shell script调用进来的程序的设置,而不是shell script本身。当然,SUID对于目录也是无效的,这点要特别留意。

     二、SetGID
          (1)为什么引入SetGID?
          SGID对于文件共享来说非常重要。比如我们创建一个目录,希望该目录所属组的每个用户都共享该目录下的文件,但是在默认情况下,不同用户创建文件是属于不同的组的,此时要想目录所属组的每个成员都能使用其他成员创建的文件,只有修改每个新建文件的所属组了,这样修改起来非常麻烦。解决方案是修改共享目录的SGID位。

          (2)SGUID含义理解
          与SUID不同的是,SGID可以针对文件或目录来设置。如果对文件来说,SGID有如下功能:
               I)SGID对二进制程序有用;
               II)程序执行对于该程序来说,需要具备x的权限;
               III)执行者在执行的过程中将会获得该程序用户组的支持。
          除了二进制程序之外,SGID最常见的用途是用在目录上,当一个目录设置了SGID的权限后,它将具有如下的功能:
               I)用户若对于此目录的具有r与x的权限时,该用户能够进入此目录;
               II)用户在此目录下的有效用户组(effective group)将会变成该目录的用户组。
               III)若用户在此目录下具有w的权限(可以新建文件),则用户所创建的新文件的用户组与此目录的用户组相同。这个特性,对文件共享来说,非常重要。

     三、Sticky Bit
          (1)为什么引入SBIT?
           考虑下面一种情形,如果两个用户对同一个目录都有w和x的权限,则A在该目录下创建一个文件,则用户B就能删除A创建的文件。为了解决这个问题,可以给该目录添加SBIT位。设置SBIT位后,只有文件创建者和root能够删除该文件。

          (2)SBIT含义理解
          SBIT只针对目录有效,对于文件没有效果。SBIT对于目录的有如下功能:
               I)当用户对此目录具有w、x权限,即具有写入的权限时;
               II)当用户在该目录下创建文件或目录时,仅有自己与root才有权利删除该文件。换句话说:当甲这个用户对A目录是具有用户组或其他人的身份,并且拥有该目录w的权限,这表示用户甲对该目录内任何人新建的目录或文件均可进行删除、重命名或移动等操作。不过,如果将A目录加上了SBIT的权限后,则甲只能够对自己的创建的文件或目录进行删除、重命名或移动等操作,而无法删除他人的文件。
          例如目录/tmp的权限是drwxrwxrwt,在这样的权限内容下,任何人都可以在/tmp内添加、修改文件或目录,但仅有文件或目录创建者与root能够删除自己的文件或目录。

     四、SUID/SGID/SBIT权限设置
          在原来的文件权限的三个数字之前再加一个数字的话,最前面的那个数字就代表这几个权限了。4为SUID、2为SGID和1为SBIT。例如:

                                        
     注意我们在最后一行,我们去掉文件的对应位的x权限后,对应的特殊位都变成大写了,这表示这些特殊位都变成无效的了,表示是空的。处理数字法之外,也可以通过符号法来设置,其中SUID为u+s;而SGID为g+s;SBIT则是
o+t。


参考资源:
     《鸟哥的Linux私房菜》第7.4.3节,文件特殊权限:SUID,SGID,SBIT
     《Linux命令行与shell脚本编程大全》(第2版)第6.5节,共享文件
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值