SUID,SGID,SBIT初探以及解决无法撤销目录SGID的问题

测试环境:虚拟机+CentOS6.564位)

问题:无法用chmod加数字法的命令形式撤销目录的SGID权限。

 

众所周知,在Linux中,除了usergroupother中的r,w,x这三个基本的权限以外,还有SUID,SGID,SBIT三个特殊的权限。

用小写的s来取代user中的x,就具有了SUID权限


用小写的s来取代group中的x,就具有了SGID权限


用小写的t来取代other中的x,就具有了SBIT的权限


SUID是针对二进制程序设置的。SUID权限使一般用户在执行该二进制程序期间能暂时获得该程序拥有者的权限。例如,以普通用户登录shell,使用cat指令去读取/etc/shadow的内容时,shell提示权限不足,这是因为/etc/shadow文件是只有root能去读的文件,而且该指令没有设置SUID权限,所以无法读取。类似的,你也无法用cat读取/etc/gshadow的内容。

SUID,SGID,SBIT初探以及解决无法撤销目录SGID的问题_第1张图片

当你用在root下用chmod赋予cat指令SUID权限后,再以一般用户登录使用cat时,就可以读取/etc/shadow内容,因为一般用户使用cat指令在执行器件暂时获得了root权限。


 

SGID是针对目录的设置。针对某个目录设置SGID权限后,若使用者在此目录下具有w的权限,则使用者所创建的新文件的所在群组与该目录所在群组相同。当我们以普通账户登录shell时,该账户默认所在的群组与账户名相同,若不采用newgrp切换有效群组,则创建的新文件默认属于与账户名相同的群组中。

SUID,SGID,SBIT初探以及解决无法撤销目录SGID的问题_第2张图片

Sgid_test这个目录还没设置SGID权限,而且vbird1用户没有切换有效群组到mygroup,所以在/other/sgid_test目录下所创建的文件,默认属于vbird1这个群组。

/other/sgid_test目录设置SGID权限后,vbird1创建的文件将默认属于mygroup这个群组。

SUID,SGID,SBIT初探以及解决无法撤销目录SGID的问题_第3张图片

所以SGID这个功能对于团队开发一个项目时,具有比较大的作用。可以让各个群组成员创建的文件归同一群组所有,方便修改和操作。

 


SBIT是针对目录设置的。当使用者在设置了SBIT属性的目录下创建文件或目录时,仅有root和自己才有权利删除该文件。

在下面的例子中,/other/sbit_test目录未设置SBIT权限时,由于该目录的other中开放了r,w,x权限,所以root创建的文件都可以被一般用户vbird1删除。

SUID,SGID,SBIT初探以及解决无法撤销目录SGID的问题_第4张图片


在对/other/sbit_test目录设置SBIT权限后,仅有root和自己才有权利删除自己建立的文件。

SUID,SGID,SBIT初探以及解决无法撤销目录SGID的问题_第5张图片

在以上的测试中,我都是通过chmod加数字的命令形式来修改SUID,SGID,SBIT的属性。

但是在撤销属性的时候,发现无法成功。在该目录下创建的文件仍然归mygroup群组所有

SUID,SGID,SBIT初探以及解决无法撤销目录SGID的问题_第6张图片


来折腾一番后,采用chmod加字母的命令形式成功撤销SGID属性

SUID,SGID,SBIT初探以及解决无法撤销目录SGID的问题_第7张图片

同样,对于SUIDSBIT都有类似的情况,也建议采用chmod加字母的命令形式来撤销。

至于这两种赋予权限的方式有什么区别,暂时还不知道,如果有懂的朋友,麻烦指点我一下,感谢!!!

 


你可能感兴趣的:(Linux一二事)