企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
## SetGID (文件和目录权限) >[success] SGID 即可以针对文件生效,也可以针对目录生效,这和 SUID 明显不同。 >[info] 如果针对文件,SGID 的含义如下: > > 只有可执行的二进制程序才能设置 SGID 权限 > > 命令执行者要对该程序拥有 x(执行)权限 > > 命令执行在执行程序的时候,组身份升级为该程序文件的属组 > > SetGID 权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效 ``` [root@localhost ~]# ll /var/lib/mlocate/mlocate.db -rw-r-----. 1 root slocate 2843732 11月 11 10:28 /var/lib/mlocate/mlocate.db [root@localhost ~]# ll /usr/bin/locate -rwx--s--x. 1 root slocate 40520 4月 11 2018 /usr/bin/locate 当普通用户 user1 执行 locate 命令时,会发生如下事情: /usr/bin/locate 是可执行二进制程序,可以赋予 SGID 执行用户 user1 对/usr/bin/locate 命令拥有执行权限 执行/usr/bin/locate 命令时,组身份会升级为 slocate 组,而 slocate 组对 /var/lib/mlocate/mlocate.db 数据库拥有 r 权限,所以普通用户可以使用 locate 命令查询 mlocate.db 数据库 命令结束,user1 用户的组身份返回为 user1 组 ``` >[info] 如果 SGID 针对目录设置,含义如下: > > 普通用户必须对此目录拥有 r 和 x 权限,才能进入此目录 > > 普通用户在此目录中的有效组会变成此目录的属组 > > 若普通用户对此目录拥有 w 权限时,新建的文件的默认属组是这个目录的属组 ``` #进入临时目录做此实验。因为临时目录才允许普通用户修改 [root@localhost ~]# cd /tmp/ #建立测试目录 [root@localhost tmp]# mkdir dtest #给测试目录赋予SGID [root@localhost tmp]# chmod g+s dtest #SGID已经生效 [root@localhost tmp]# ll -d dtest/ drwxr-sr-x 2 root root 4096 1 月 20 06:04 dtest/ #给测试目录权限,让普通用户可以写 [root@localhost tmp]# chmod 777 dtest/ #切换成普通用户user1 [root@localhost tmp]# su – user1 #普通用户进入测试目录 [user1@localhost ~]$ cd /tmp/dtest/ #普通用户建立abc文件 [user1@localhost dtest]$ touch abc 总用量 0 [user1@localhost dtest]$ ll -rw-rw-r-- 1 user1 root 0 1月 20 06:07 abc #abc文件的默认属组不再是user1用户组,而变成了dtest组的属组root ```