前面说过,SetUID操作的对象是可执行的二进制文件或程序。但是SetGID还稍微有些不同。
首先是SetGID针对文件的作用:
只有可执行的二进制程序才能设置SGID权限
命令执行者要对该程序拥有x权限
命令在执行的时候,组身份升级为该程序文件的所属组
SetGID权限同样只在该程序执行过程中有效,即组身份的改变只在程序执行过程中有效
我们已经知道locate命令的搜索是在/var/lib/mlocate/mlocate.db这个数据库当中,比find命令执行的更快。原因在于:find是搜索整个磁盘,locate是搜索数据库。
数据库mlocate.db的权限是640,普通用户没有任何权限,。普通用户不是通过cat或者vim命令搜索这个数据库,而是通过locate命令搜索mlocate.db这个数据库。由于locate命令具有SGID权限的,普通用户执行locate命令的同时,身份组切换为slocate。另外一边mlocate.db这个数据库的所属组就是slocate,拥有r的权限。所以普通用户也是可以使用locate搜索系统当中的文件或者文件名的。
SGID对二进制文件或者程序与SUID是类似的。
------------------------------------------------
SetGID除了可以针对二进制文件或者程序,还能针对单独的目录使用。
普通用户必须对此目录拥有r和x权限,才能进入此目录。
普通用户在此目录中的有效组会变成此目录的所属组。
如普通用户对此目录拥有w权限时,新建文件的默认所属组是这个目录的所属组。
比如这样:
mkdir /tmp/SGID //在tmp下新建SGID的目录
cd /tmp
chmod 2777 SGID //赋予SGID目录SGID权限
ls -ld /tmp/SGID
su - st1
touch /tmp/SGID/file
st1用户新建file文件的默认所属组不是st1,而是/tmp/SGID这个目录的所属组。一般在实际工作中,SGID针对目录的使用场景比较少,SGID最主要还是针对二进制文件或程序。
------------------------------------------------
赋予SGID:
chmod 2755 文件名
chmod g+s 文件名
取消SGID:
chmod 755 文件名
chmod g-s 文件名
领取专属 10元无门槛券
私享最新 技术干货