国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux SetGID(SGID)文件特殊權限用法詳解

2024-08-27 23:56:52
字體:
來源:轉載
供稿:網友
前面學習了 SetUID,那么,什么是 SetGID 呢?很簡單,當 s 權限位于所屬組的 x 權限位時,就被稱為 SetGID,簡稱 SGID 特殊權限。例如:

[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 只針對可執行文件有效,換句話說,只有可執行文件才可以被賦予 SGID 權限,普通文件賦予 SGID 沒有意義。
  • 用戶需要對此可執行文件有 x 權限;
  • 用戶在執行具有 SGID 權限的可執行文件時,用戶的群組身份會變為文件所屬群組;
  • SGID 權限賦予用戶改變組身份的效果,只在可執行文件運行過程中有效;

其實,SGID 和 SUID 的不同之處就在于,SUID 賦予用戶的是文件所有者的權限,而 SGID 賦予用戶的是文件所屬組的權限,就這么簡單。

就以本節開頭的 locate 命令為例,可以看到,/usr/bin/locate 文件被賦予了 SGID 的特殊權限,這就意味著,當普通用戶使用 locate 命令時,該用戶的所屬組會直接變為 locate 命令的所屬組,也就是 slocate。

我們知道,locate 命令是用于在系統中按照文件名查找符合條件的文件的,當執行搜索操作時,它會通過搜索 /var/lib/mlocate/mlocate.db 這個數據庫中的數據找到答案,我們來看看此數據庫的權限:

[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 權限,但對于普通用戶執行 locate 命令來說,已經足夠了。一方面,普通用戶對 locate命令擁有執行權限,其次,locate 命令擁有 SGID 權限,這使得普通用戶在執行 locate 命令時,所屬組身份會變為 slocate,而 slocate 對 mlocate.db 數據庫文件擁有 r 權限,所以即便是普通用戶,也可以成功執行 locate 命令。

再次強調,無論是 SUID,還是 SGID,它們對用戶身份的轉換,只有在命令執行的過程中有效,一旦命令執行完畢,身份轉換也隨之失效。

SetGID(SGID)對目錄的作用

事實上,SGID 也能作用于目錄,且這種用法很常見。

當一個目錄被賦予 SGID 權限后,進入此目錄的普通用戶,其有效群組會變為該目錄的所屬組,會就使得用戶在創建文件(或目錄)時,該文件(或目錄)的所屬組將不再是用戶的所屬組,而使用的是目錄的所屬組。

也就是說,只有當普通用戶對具有 SGID 權限的目錄有 rwx 權限時,SGID 的功能才能完全發揮。比如說,如果用戶對該目錄僅有 rx 權限,則用戶進入此目錄后,雖然其有效群組變為此目錄的所屬組,但由于沒有 x 權限,用戶無法在目錄中創建文件或目錄,SGID 權限也就無法發揮它的作用。

舉個例子:

[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權限已經生效
[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
#在此目錄中創建新的文件 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 用戶創建的 abc 文件和 zimulu 目錄,但它們的所屬組都不是 lamp(lamp 用戶的所屬組),而是 root(dtest 目錄的所屬組)。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 元江| 信宜市| 冷水江市| 缙云县| 克拉玛依市| 库尔勒市| 天全县| 肃北| 紫金县| 德化县| 长子县| 梁河县| 东乌珠穆沁旗| 金昌市| 七台河市| 舞钢市| 东阿县| 韶关市| 化德县| 鹤岗市| 深圳市| 青岛市| 吕梁市| 房山区| 明光市| 望奎县| 浦东新区| 汾西县| 桃源县| 深州市| 商河县| 深水埗区| 合阳县| 云安县| 万载县| 深圳市| 彭山县| 宁国市| 龙川县| 花莲市| 滨州市|