一、SetUID
SetUID(或者 s 权限):当一个具有执行权限的文件设置SetUID权限后,用户执行这个文件时将以文件所有者的身份执行。passwd命令具有SetUID权限,所有者为root(Linux中的命令默认所有者都是root),也就是说当普通用户使用passwd更改自己密码的时候,那一瞬间突然 “灵魂附体” 了,实际在以passwd命令所有者root的身份在执行,root当然可以将密码写入/etc/shadow文件(root是一个bug的存在,在Linux中就没有它不能干的事),命令执行完成后该身份也随之消失。
-
SetUID条件:
-
必须具备以下几个条件(前提):
只有可执行的二进制程序才可以设置SetUID
所有者必须对欲设置SetUID的文件具备 可执行(x) 权限
命令执行过程中,其它用户获取所有者的身份(灵魂附体)
SetUID具有时间限制,即完成该程序执行后就消失(不能霸占住不放吧?)
-
-
设置和取消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权限!
-
SetGID条件:
-
针对文件:
可执行的二进制文件 命令执行者(即所属组)对该文件具备 x 权限 执行时,执行者被所属组灵魂附体 权限只在执行过程中有效
-
针对目录:
普通用户对目录具备r和x权限,才可以进入到该目录 普通用户在此目录中的有效组会变成此目录的所属组 如普通用户对该目录具备w权限,新建文件的所属组为该目录的所属组
-
-
设置和取消SetGID
-
设置SetGID
chmod 2xxx
-
取消SetGID
chmod xxx
-
三、SBIT
Stick Bit,粘滞位。
-
作用:
只对目录有效 普通用户对该目录有w和x权限
若没有粘滞位,则普通用户可以对目录下的文件/子目录进行删除操作(因为普通用户对目录具有w权限),包括其它用户建立的目录/文件;但若赋了SBIT,则普通用户只能删除自己创建的文件/目录,而不能删除不属于自己的文件/目录!
-
设置和取消SBIT
-
设置SBIT
chmod 1xxx < dir-name > chmod o+t < dir-name >
-
取消SBIT
chmod xxx < dir-name > chmod o-t < dir-name >
-