linux特殊权限SetGID-37

来源:互联网 发布:iphone越狱后抹掉数据 编辑:程序博客网 时间:2024/06/07 21:23

linux特殊权限SetGID

前面学习了SUID是针对所有者对可执行二进制程序的特殊权限,而今天要学的SGID顾名思义,是针对所属组的特殊权限,但是与SUID有所不同。

一、SetGID针对文件的作用

–> 只有可执行的二进制程序才能设置SGID权限
–> 命令执行者要对该程序拥有X(执行)权限
–> 命令在执行程序的时候,组身份升级为该程序文件的所属组身份。
–> SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效。

SGID针对文件的作用和SUID差不多,区别无非就是一个是变身为文件的所有者身份,而一个是升级为文件的所属组身份。

SGID本身用的并不是很多,一般主要是针对locate这个索引式的搜索命令的。我们用find命令来搜索文件的时候是执行全盘搜索,不但占用系统资源,而且速度还很慢,而locate命令在执行搜索的时候是搜索自己的索引库mlocate.db里的内容,所以速度非常快。

首先我们看看locate命令的路径:whereis locate
locate: /usr/bin/locate
然后我们看看这个命令的权限:ll /usr/bin/locate
-rwx–s–x. 1 root slocate 38464 10月 10 2012 /usr/bin/locate
如图:
locate命令的sgid权限
所有者是root,所属组是slocate,三个身份都具有x权限,同时所属组还多出一个s权限,也就是SGID权限。为什么要多出一个SGID权限呢?

那么我们来看看locate的索引数据库的路径:locate mlocate.db
/var/lib/mlocate/mlocate.db
然后我们来查看一下他的权限:ll /var/lib/mlocate/mlocate.db
-rw-r—–. 1 root slocate 1626905 10月 17 13:47 /var/lib/mlocate/mlocate.db
如图:
locate索引库的权限
大家不用看其他信息,就看他的权限和所属组,首先所属组是slocate和locate命令在同一个组里,而且其他人这个组连读权限都没有。但是我们在用locate来搜索的时候是任何普通用户都有读权限的啊,为什么呢?

也就是因为locate命令的所属组身份具有SGID权限,普通用户执行locate命令的时候所属组就变成了locate的组身份slocate,而这个组本身的身份是对库文件有读权限的,所以自然执行这个命令的普通用户也就具备了读权限。

那么我们来看看这个过程:
–> /usr/bin/locate是可执行二进制程序,可以赋予SGID
–> 普通用户对/usr/bin/locate命令拥有执行权限
–> 执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对/var/lib/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库
–> 命令结束后,执行用户的组身份返回到自己的所属组。

二、SetGID针对目录的作用
那么SetGID权限除了可以为可执行文件设置还可以给目录设置,这是与SUID权限最大的不同之处。

–> 普通用户必须对此目录拥有r和x权限,才能进入此目录
–> 普通用户在此目录中的有效组会变成此目录的所属组
–> 若普通用户对此目录拥有w权限时,新建的文件的默认所属组是这个目录的所属组。

我们来操作一下:
首先我们在/tmp目录下新建一个目录test
mkdir /tmp/test
我们查看一下这个目录的权限信息:
ll -d /tmp/test

然后我们给这个目录设置SGID权限:
设置SGID权限有两种方法,分别为数字法和g+s方法,前面讲SUID的时候讲过,如下:
chmod 2777 /tmp/test [数字法,2代表为给g添加s权限]
chmod g+s /tmp/test [直接给g添加一个s特殊权限]
我们这里用第一种方法:
设置为777目的是让普通用户对这个目录有写权限,以方便实验。
好的,我们查看一下这个目录的权限,如图:
SGID权限设置

那么我们用普通用户分别在test目录之外和在test目录下新建文件来试试:
如图:
SGID权限的应用
大家看出不同了吧,是不是在拥有了SGID权限的test目录里新建的文件的所属组和父目录test的所属组是相同的。而在非SGID权限的目录新建的文件的所属组为用户的默认所属组。

那么如何删除SGID身份呢?
这个就非常简单了,上节课我们学习过。
chmod 777 /tmp/test就可以了,
chmod g-s /tmp/test也同样

那么其实SGID权限基本是用不到的,我们还是只做了解就行,而且也一定不要轻易设置这些特殊权限,这样等于自己给自己留后面,会有隐患的。

本教程原创作者:mageo,出自每集博客,尊重作者劳动,转载请注明出处:http://www.ql2015.cn,谢谢!

0 0
原创粉丝点击