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

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

作者: 通靈鹿小六 | 来源:发表于2020-12-17 07:03 被阅读0次

    上一节中介绍的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

        本文链接:https://www.haomeiwen.com/subject/pqxngktx.html