1. SetGID针对文件的作用
- 对文件使用SetGID前提条件
只有可以执行的二进制程序才能能设置SetGID权限
命令执行者要对该程序拥有x(执行)权限 - SetGID权限的作用
- 命令执行在执行程序的时候,组身份升级为该程序文件的属组
- SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效
举个栗子:
locate命令,使用这个命令的时候其实是去locate搜索
Locate命令相比find命令快的原因是locate是搜索的是mlocate.db这样的一个数据库,这个文件会记录当前系统所有文件的文件名。find相当于把整个磁盘都扫描了一遍,慢但准确率更高,功能更强大。通过locate命令来搜索这个数据库。
进行分析: locate.db命令是是在mlocate.db数据库中搜索文件,但是mlocate.db本身是没有对其他人是没有读写执行权限的,但是因为locate有setGID权限,普通用户在执行locate这个命令时,组身份升级为该程序文件的属组,又因为locate控制的是mlocate.db这个文件,并且这个文件对所属组mlocate.db具有读权限。 - (1) /usr/bin/locate是科执行的二进制程序,可以赋予SetGID
(2) 用户对/usr/bin/locate命令拥有执行权限
(3) 执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库
(4) 命令结束后,普通用户的组身份又恢复为自己原来的组身份
2.SetGID针对目录的作用
- 普通用户必须对此目录拥有r和x权限,才能进入此目录
- 普通用户在此目录中的有效组会变成此目录的属组
- 若普通用户对此目录拥有w权限时,新建的文件的默认属组时扎个目录的属组
举个栗子:
在root用户中,在/tmp下建立一个test的目录,给这个目录赋予setGID权限,同时给test 777的权限。然后再全换成st用户,再/tmp/test下创建一个文件,看一下它的所属组是谁???再/tmp/test/下新建的文件的所属组跟test目录的所属组一样都是root.而不是st
小提示:(1)对目录r(ll命令)x(可以执行cd命令)
(2)setGID权限对目录就没有这么危险
(3)这个在实际工作中的意义不大
(4)这个权限还是针对二进制文件的用处,setGID和setUID不允许普通用户或者自己来修改某个命令的suid,而是系统利用了suid,sgid这些权限,来完成这些必须给普通用户分配权限,比如说设置密码,locate搜索数据库这样的命令。这两个命令还是比较危险的,所以小心,不要没事干,给二进制文件赋予这两个权限。
3.设定SetGID
- 2代表SetGID
命令:chmod 2755 文件名
命令:chmod g+s 文件名
4.取消SetGID
- 命令:
chmod 755 文件名
命令:chmod g-s 文件名