从零开始学习Linux(二十六):文件特殊权限之SetGID

上一节中介绍的SetUID只能是针对可执行二进制文件。本节的SetGID权限既可以针对可执行二进制文件,又可以针对目录。针对不同的目标,起到的作用也不相同。

1、SetGID针对文件

  • 只有可执行的二进制文件才能设置SetGID权限;
  • 命令执行者要对该程序拥有x(可执行)权限;
  • 命令执行者在执行二进制文件的时候,组身份升级为该文件的所属组;
  • SetGID权限同样只在该文件执行过程中有效,当程序执行结束后组身份恢复成原来的身份;

我们以搜索命令 locate命令 举例说明,在 从零开始学习Linux(八):其他文件搜索命令 中我们介绍过locate命令的使用方法。

locate是通过生成一个文件和文件夹的索引数据库 /var/lib/mlocate/mlocate.db ,当用户在执行loacte命令查找文件时,它会直接在索引数据库里查找数据。

注意:若该数据库太久没更新或不存在,则会提示以下错误。

解决此问题的办法,执行命令:

updatedb

分别查看locate、mlocate.db文件的权限信息,如下图所示:

locate和mlocate.db权限信息

从图中可以看出:
(1)locate文件权限是 -rwx--s--x,其他人权限是x;
(2)locate所属组是slocate,所属组的权限是s,s是代表SetGID;
(3)mlocate.db文件权限是 -rw-r-----,其他人是没有任何权限的;
(4)mlocate.db文件所属组是slocate;

虽然其他人没有locate命令权限,但是真实情况是我们使用非root用户登录的时候,也可以使用locate命令。

执行过程说明:
(1)/usr/bin/locate是可执行二进制程序,且被赋予了s权限;
(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权限,新建的文件默认所属组是这个目录的所属组;

举例说明SetGID对目录文件的作用:
(1)进入系统临时文件/tmp目录;
(2)在/tmp目录下面创建testdir目录;
(3)为testdir目录赋予SetGID权限;
(4)查看testdir权限信息;
(5)为testdir目录赋予777(rwxrwxrwx)权限;
(6)切换到zhoujielun用户;
(7)进入testdir目录;
(8)创建一个文件qinghuaci;
(9)查看文件qinghuaci的详细信息;

整个过程执行的命令:

[root@VM-0-8-centos /]# cd /tmp/
[root@VM-0-8-centos tmp]# mkdir testdir
[root@VM-0-8-centos tmp]# chmod -R g+s testdir/
[root@VM-0-8-centos tmp]# ll -d testdir/
[root@VM-0-8-centos tmp]# chmod -R 777 testdir/
[root@VM-0-8-centos tmp]# su - zhoujielun
[zhoujielun@VM-0-8-centos ~]$ cd /tmp/testdir/
[zhoujielun@VM-0-8-centos testdir]$ touch qinghuaci
[zhoujielun@VM-0-8-centos testdir]$ ll qinghuaci

执行结果如下图所示:

从图中可以看到,设置了SetGID权限的目录,虽然用户是普通用户,但是创建的文件所属组依然是root。

3、设定SetGID的方法

3.1、方法一

命令格式:chmod -R 2755 文件名(-R可忽略掉);

3.2、方法二

命令格式:chmod -R g+s 文件名(-R可忽略掉);

因为SetGID权限改变的是组身份,所以是g+s或g-s来设定或取消权限;

4、取消SetGID的方法

4.1、方法一

命令格式:chmod -R 755 文件名(-R可忽略掉);

4.2、方法二

命令格式:chmod -R g-s 文件名(-R可忽略掉);

你可能感兴趣的:(从零开始学习Linux(二十六):文件特殊权限之SetGID)