1、setUID、setGID 和 Sticky BIT 的功能詳解
setuid 功能:
1、只有可執行的二進制文件程序才能設定 SUID 權限(前提)
2、命令執行者要對該程序有執行(x)權限(必要條件)
3、命令執行者再執行該程序時獲得該程序文件屬主的身份
4、setuid 權限只在該程序執行過程中生效
setgid 功能: -- 對文件而言
1、只有可執行的二進制程序設置SGID
2、命令執行者要對該程序擁有執行(x)權限
3、命令執行再執行程序的時候,組身份升級爲該程序文件的屬組
4、setgid 權限童謠只在該程序執行過程中有效
sticky BIT 功能:
1、粘位一般用於對目錄進行操作
2、普通用戶對該目錄擁有 w 和 x 權限
3、設置了粘位的目錄,其目錄下的文件只有由那個創建的人才能刪除,其他人即使擁有w權限也是不行的(root管理員除外)
2、setuid、setgid 和 sticky BIT的實例應用
setuid和setgid
setuid 和setgid位是讓普通用戶可以以root用戶的角色運行只有root帳號才能運行的程序或命令。比 如我們用普通用戶運行passwd命令來更改自己的口令,實際上最終更改的是/etc/passwd文件我們知道/etc/passwd文件是用戶管理的 配置文件,只有root權限的用戶才能更改
作爲普通用戶如果修改自己的口令通過修改/etc/passwd肯定是不可完成的任務,但是不是可以通過一個命令來修改呢答案是肯定的,作爲普通用 戶可以通過passwd 來修改自己的口令這歸功於passwd命令的權限我們來看一下;
因爲/usr/bin/passwd 文件已經設置了setuid 權限位(也就是r-s--x--x中的s),所以普通用戶能臨時變成root,間接的修改/etc/passwd,以達到修改自己口令的權限
我們在Linux 系統中的超級權限的控制中 有提到過我們知道Linux的用戶管理是極爲嚴格的,不同的用戶擁有不同的權限,爲了完成只有root用戶才能完成的工作,我們必須爲普通用戶提升權 限,最常用的方法就是su或sudo雖然setuid 和setgid也是讓普通用戶超越自身擁有的普通權限達到root權限的方法,但我不推薦大家使用,因爲它能爲系統帶來隱患!!
注意:setuid和setgid會面臨風險,所以儘可能的少用
我們想讓一個普通用戶 qiuyu 擁有root用戶擁有超級rm刪除權限,我們除了用su或sudo 臨時切換到 root身份操作以外,還能怎麼做呢?
rm: 無法刪除 beinantest.txt: 權限不夠
那我們怎麼才能讓qiuyu 這個普通用戶也擁有root超級的rm 刪除功力呢?
我們只是設置了rm 的setuid位,讓普通用戶在rm指令上有超級root的刪除超級權力
通過這個例子,我們應該能明白setuid和setgid位的應用了,如同前面所說,讓普通用戶超越本身的能力,讓普通用戶能執行只有root才能 執行的命令在這一點,我們要和su和sudo 區分開來請參見su和sudo的文檔:Linux 系統中的超級權限的控制
sticky BIT
我們知道 /tmp 是系統的臨時文件目錄,所有的用戶在該目錄下擁有所有的權限,也就是說在該目錄下可以任意創建、修改、刪除文件,那如果用戶A在該目錄下創建了一個文件,用戶B將該文件刪除了,這種情況我們是不能允許的。爲了達到該目的,就出現了stick bit(粘滯位)的概念。它是針對目錄來說的,如果該目錄設置了stick bit(粘滯位),則該目錄下的文件除了該文件的創建者和root用戶可以刪除和修改/tmp目錄下的stuff,別的用戶均不能動別人的,這就是粘滯位的作用。
設置 /tmp目錄的粘位:
再由 qihuan 用戶進入該目錄下新建 aa 文件並操作:
再用 qiuyu 用戶對 aa 進行刪除操作:
3、setuid、setgid和 sticky BIT的設置方法
Chmod命令中的特殊權限位含義:
1、S_ISUID 04000 文件的 (set user-id on execution)位
2、S_ISGID 02000 文件的 (set group-id on execution)位
3、S_ISVTX 01000 文件的sticky 位
上面的都是8進制數。
如何設置UID、GID、STICK_BIT:
SUID:置於 u 的 x 位,原位置有執行權限,就置爲 s,沒有了爲 S .
chmod u+s xxx # 設置setuid權限
chmod 4551 file // 權限: r-sr-x—x
SGID:置於 g 的 x 位,原位置有執行權限,就置爲 s,沒有了爲 S .
chmod g+s xxx # 設置setgid權限
chmod 2551 file // 權限: r-xr-s--x
STICKY:粘滯位,置於 o 的 x 位,原位置有執行權限,就置爲 t ,否則爲T .
chmod o+t xxx # 設置stick bit權限,針對目錄
chmod 1551 file // 權限: r-xr-x--t
4、注意事項
注意:特殊權限只對可執行權限的文件有效,沒有執行權限的文件被設置成特殊限位時毫無意義的
沒有可執行權限的文件被設置成特殊權限位的標誌:
SUID---S(大寫)---不可用狀態
SGID---S(大寫)---不可用狀態
SBIT----T(大寫)---不可用狀態