上一節(jié)中介紹的SetUID只能是針對可執(zhí)行二進制文件。本節(jié)的SetGID權限既可以針對可執(zhí)行二進制文件,又可以針對目錄。針對不同的目標,起到的作用也不相同。
1、SetGID針對文件
- 只有可執(zhí)行的二進制文件才能設置SetGID權限;
- 命令執(zhí)行者要對該程序擁有x(可執(zhí)行)權限;
- 命令執(zhí)行者在執(zhí)行二進制文件的時候,組身份升級為該文件的所屬組;
- SetGID權限同樣只在該文件執(zhí)行過程中有效,當程序執(zhí)行結束后組身份恢復成原來的身份;
我們以搜索命令 locate命令 舉例說明,在 從零開始學習Linux(八):其他文件搜索命令 中我們介紹過locate命令的使用方法。
locate是通過生成一個文件和文件夾的索引數(shù)據(jù)庫 /var/lib/mlocate/mlocate.db ,當用戶在執(zhí)行l(wèi)oacte命令查找文件時,它會直接在索引數(shù)據(jù)庫里查找數(shù)據(jù)。
注意:若該數(shù)據(jù)庫太久沒更新或不存在,則會提示以下錯誤。
解決此問題的辦法,執(zhí)行命令:
updatedb
分別查看locate、mlocate.db文件的權限信息,如下圖所示:
從圖中可以看出:
(1)locate文件權限是 -rwx--s--x,其他人權限是x;
(2)locate所屬組是slocate,所屬組的權限是s,s是代表SetGID;
(3)mlocate.db文件權限是 -rw-r-----,其他人是沒有任何權限的;
(4)mlocate.db文件所屬組是slocate;
雖然其他人沒有l(wèi)ocate命令權限,但是真實情況是我們使用非root用戶登錄的時候,也可以使用locate命令。
執(zhí)行過程說明:
(1)/usr/bin/locate是可執(zhí)行二進制程序,且被賦予了s權限;
(2)用戶對/usr/bin/locate擁有可執(zhí)行權限;
(3)用戶執(zhí)行/usr/bin/locate命令時,組身份會變?yōu)閟locate組,而slocate組對/var/lib/mlocate/mlocate.db文件擁有r權限,所以普通用戶也可以使用locate命令查詢mlocate.db數(shù)據(jù)庫;
(4)命令結束后,用戶組身份恢復之前身份;
整個執(zhí)行過程如下圖所示:
2、SetGID針對目錄
- 普通用戶必須對此目錄擁有r和x權限,才能進入此目錄;
- 普通用戶在此目錄中的有效組會變成此目錄的所屬組;
- 若普通用戶對此目錄擁有w權限,新建的文件默認所屬組是這個目錄的所屬組;
舉例說明SetGID對目錄文件的作用:
(1)進入系統(tǒng)臨時文件/tmp目錄;
(2)在/tmp目錄下面創(chuàng)建testdir目錄;
(3)為testdir目錄賦予SetGID權限;
(4)查看testdir權限信息;
(5)為testdir目錄賦予777(rwxrwxrwx)權限;
(6)切換到zhoujielun用戶;
(7)進入testdir目錄;
(8)創(chuàng)建一個文件qinghuaci;
(9)查看文件qinghuaci的詳細信息;
整個過程執(zhí)行的命令:
[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
執(zhí)行結果如下圖所示:
從圖中可以看到,設置了SetGID權限的目錄,雖然用戶是普通用戶,但是創(chuàng)建的文件所屬組依然是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可忽略掉);