新聞中心
SetGID,簡稱
SGID 特殊權限。例如:

成都創(chuàng)新互聯(lián)公司是一家專注于成都做網(wǎng)站、成都網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設與策劃設計,湘鄉(xiāng)網(wǎng)站建設哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設十多年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:湘鄉(xiāng)等地區(qū)。湘鄉(xiāng)做網(wǎng)站價格咨詢:028-86922220
[root@localhost ~]# ll /usr/bin/locate
-rwx--s--x. 1 root slocate 35612 8月24 2010 /usr/bin/locate
與 SUID 不同的是,SGID 既可以對文件進行配置,也可以對目錄進行配置。
SetGID(SGID)對文件的作用
同 SUID 類似,對于文件來說,SGID 具有如下幾個特點:
- SGID 只針對可執(zhí)行文件有效,換句話說,只有可執(zhí)行文件才可以被賦予 SGID 權限,普通文件賦予 SGID 沒有意義。
- 用戶需要對此可執(zhí)行文件有 x 權限;
- 用戶在執(zhí)行具有 SGID 權限的可執(zhí)行文件時,用戶的群組身份會變?yōu)槲募鶎偃航M;
- SGID 權限賦予用戶改變組身份的效果,只在可執(zhí)行文件運行過程中有效;
其實,SGID 和 SUID 的不同之處就在于,SUID 賦予用戶的是文件所有者的權限,而 SGID 賦予用戶的是文件所屬組的權限,就這么簡單。
就以本節(jié)開頭的 locate 命令為例,可以看到,/usr/bin/locate 文件被賦予了 SGID 的特殊權限,這就意味著,當普通用戶使用 locate 命令時,該用戶的所屬組會直接變?yōu)?locate 命令的所屬組,也就是 slocate。
我們知道,locate 命令是用于在系統(tǒng)中按照文件名查找符合條件的文件的,當執(zhí)行搜索操作時,它會通過搜索 /var/lib/mlocate/mlocate.db 這個數(shù)據(jù)庫中的數(shù)據(jù)找到答案,我們來看看此數(shù)據(jù)庫的權限:
[root@localhost ~]# ll /var/lib/mlocate/mlocate.db
-rw-r-----. 1 root slocate 1838850 1月20 04:29 /var/lib/mlocate/mlocate.db
可以看到,mlocate.db 文件的所屬組為 slocate,雖然對文件只擁有 r 權限,但對于普通用戶執(zhí)行 locate 命令來說,已經(jīng)足夠了。一方面,普通用戶對 locate命令擁有執(zhí)行權限,其次,locate 命令擁有 SGID 權限,這使得普通用戶在執(zhí)行 locate 命令時,所屬組身份會變?yōu)?slocate,而 slocate 對 mlocate.db 數(shù)據(jù)庫文件擁有 r 權限,所以即便是普通用戶,也可以成功執(zhí)行 locate 命令。
再次強調(diào),無論是 SUID,還是 SGID,它們對用戶身份的轉換,只有在命令執(zhí)行的過程中有效,一旦命令執(zhí)行完畢,身份轉換也隨之失效。
SetGID(SGID)對目錄的作用
事實上,SGID 也能作用于目錄,且這種用法很常見。
當一個目錄被賦予 SGID 權限后,進入此目錄的普通用戶,其有效群組會變?yōu)樵撃夸浀乃鶎俳M,會就使得用戶在創(chuàng)建文件(或目錄)時,該文件(或目錄)的所屬組將不再是用戶的所屬組,而使用的是目錄的所屬組。
也就是說,只有當普通用戶對具有 SGID 權限的目錄有 rwx 權限時,SGID 的功能才能完全發(fā)揮。比如說,如果用戶對該目錄僅有 rx 權限,則用戶進入此目錄后,雖然其有效群組變?yōu)榇四夸浀乃鶎俳M,但由于沒有 x 權限,用戶無法在目錄中創(chuàng)建文件或目錄,SGID 權限也就無法發(fā)揮它的作用。
舉個例子:
[root@localhost ~]# cd /tmp
#進入臨時目錄做此實驗。因為只有臨時目錄才允許普通用戶修改
[root@localhost tmp]# mkdir dtest
#建立測試目錄
[root@localhost tmp]# chmod g+s dtest
#給測試目錄賦予SetGID權限
[root@localhost tmp]# ll -d dtest
drwxr-sr-x 2 root root 4096 Apr 19 06:04 dtest
#SetGID權限已經(jīng)生效
[root@localhost tmp]# chmod 777 dtest
#給測試目錄賦予777權限,讓普通用戶可以寫
[root@localhost tmp]# su - lamp
[lamp@localhost ~]# grep lamp /etc/passwd /etc/group
/etc/passwd:lamp:x:501:501::/home/lamp:/bin/bash
/etc/group:lamp:x:501:
#切換成普通用戶lamp,此用戶的所屬群組為 lamp
[lamp@localhost ~]$ cd /tmp/dtest/
#普通用戶進入測試目錄
[lamp@localhost dtest]$ touch abc
[lamp@localhost dtest]$ mkdir zimulu
#在此目錄中創(chuàng)建新的文件 abc 和子目錄 zimulu
[lamp@localhost dtest]$ ll
total 0
-rw-rw-r--. 1 lamp root 0 Apr 19 06:07 abc
drwxrwsr-x. 2 lamp root 40 Apr 19 06:07 zimulu
可以看到,雖然是 lamp 用戶創(chuàng)建的 abc 文件和 zimulu 目錄,但它們的所屬組都不是 lamp(lamp 用戶的所屬組),而是 root(dtest 目錄的所屬組)。
文章題目:LinuxSetGID(SGID)文件特殊權限用法詳解
文章來源:http://m.fisionsoft.com.cn/article/cdhhcpc.html


咨詢
建站咨詢
