一、SUID
介绍:SUID是一种对二进制程序进行设置的特殊权限,能够让二进制程序的执行者临时拥有所有者的权限(仅对拥有执行权限的二进制程序有效)。
(一)语法格式
chmod u+s 文件名(设置SUID权限)
chmod u-s 文件名(取消SUID权限)
#文件属主的x权限,用s代替.表示被设置了SUID
#如果属主位没有x权限,会显示为大写S,表示有故障(权限无效)
(二)普通用户quintin对vim是有执行权限的,而对/etc/passwd则没有编辑权限.
(三)通常情况下quintin启动vim后,系统会创建一个以当前用户quintin为属主属组的vim进程,此时vim进程的属主属组为quintin:quintin,由于无论是属主还是属组都不具有对/etc/passwd的编辑权限,所以这个vim进程无权编辑/etc/passwd.
(四)而给/usr/bin/vim设置了SUID之后,quintin或任何用户启动vim程序时,系统创建的vim进程的属主则是取了/usr/bin/vim这个程序文件自身的属主root,所以此时vim进程的属主属组为root:quintin. 系统检查发现正好匹配了/etc/passwd的属主,于是放行vim进程
(五)案例
1、使用SUID修改root用户的文件
(1)复制/etc/passwd 为passwd1,切换到普通用户进行编辑,可以发现无法保存,没有写入权限
(2)修改vim二进制文件,使普通用户在在编辑时拥有所属人的权限
(3)切换到普通用户,并编辑passwd1文件,并保存(提示只读不用管,强制保存即可。)
(4)取消对vim的SUID,在次尝试能否修改。
2、练习:使用SUID实现touch命令创建文件,所属人为root。(自己练习)
二、SGID
介绍:SGID特殊权限有两种应用场景:
(一)语法格式
1、chmod g+s 目录或文件(设置SGID权限)
2、chmod g-s 目录或文件(取消SGID权限)
3、#文件属组的x权限,用s代替.表示被设置了SGID
4、#如果属组位没有x权限,会显示为大写S,表示有故障(权限无效)
(二)当对二进制程序进行设置时,能够让执行者临时获取文件所属组的权限
1、使用SUID创建文件的效果,使用普通用户runoob创建文件asd时,所属人成为了root。
2、使用SGID创建文件的效果,使用普通用户runoob创建文件asd时,所属组成为了root。
(三)当对目录进行设置时,则是让目录内新创建的文件自动继承该目录原有用户组的名称
1、新建两个目录,分别分配给两个不同的用户组,用于测试。
2、对这两个目录赋予777、SGID权限
3、新建test01用户,并使用test01用户登录,进入两个目录创建文件,查看文件所属组是否与目录相同
(效果1)
(效果2)
三、SBIT
介绍:SBIT特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。换句话说,当对某个目录设置了SBIT粘滞位权限后,那么该目录中的文件就只能被其所有者执行删除操作了。
(一)语法格式
1、chmod o+t 目录(设置SBIT权限)
2、chmod o-t 目录(取消SBIT权限)
3、#文件其他人的x权限,用t代替.表示被设置了SBIT
4、#如果其他人位没有x权限,会显示为大写T,表示有故障(权限无效)
(二)SBIT通常设置在目录中,对于一个多人可写的目录,如果设置了SBIT,则每个用户仅能删除和改名自己的文件或目录;只能作用在目录上.普通文件设置无意义,且会被linux内核忽略
(三)案例:各个用户只能删除自己的文件
1、先赋予/tmp目录777权限,即所属人、所属组、其他人可读可写可执行。
2、测试普通用户能否删除root用户的文件,结论,可以删除。
3、配置SBIT权限,请使用root用户进行配置
4、切换到普通用户,再次尝试删除root用户文件,提示权限不足
5、切换到其他用户,尝试删除test01用户的文件,可以看到也无法删除
6、使用test01进行删除,可以删除。