Linux設(shè)置位S(SetUID)的詳細(xì)教程
Linux 設(shè)置位 S(SetUID)詳解
一、SetUID(S位)的作用
SetUID 是 Linux 文件權(quán)限中的一種特殊權(quán)限,目的是讓普通用戶在執(zhí)行某些程序時,暫時擁有該程序“所屬用戶”的權(quán)限。
經(jīng)典例子:
系統(tǒng)中用于修改密碼的命令 passwd,其路徑通常是 /usr/bin/passwd。
但 /etc/passwd 和 /etc/shadow 文件僅 root 用戶擁有寫權(quán)限。為了讓普通用戶可以修改自己的密碼,passwd命令被設(shè)置了 SetUID 權(quán)限,使其在執(zhí)行時臨時以 root 權(quán)限運行,從而實現(xiàn)修改操作。
二、s 權(quán)限的設(shè)置對象
SetUID:只能應(yīng)用于可執(zhí)行的二進(jìn)制文件s位加在用戶(user)的執(zhí)行權(quán)限上:chmod u+s
三、實際操作示例
查看 passwd 命令路徑:
which passwd
查看權(quán)限(含 S 位):
ll /usr/bin/passwd
正常情況下輸出如下:
-rwsr-xr-x 1 root root 54256 Apr 23 08:32 /usr/bin/passwd
注意rws中的 s,說明已開啟 SetUID,執(zhí)行時臨時使用 root 權(quán)限。
四、如何移除 S 權(quán)限
方法一:直接去除 s 位
chmod u-s /usr/bin/passwd
方法二:重設(shè)權(quán)限位,去除特殊權(quán)限
chmod 0755 /usr/bin/passwd
0755中的前導(dǎo)0表示 不使用任何特殊權(quán)限若要添加 SetUID:
chmod 4755,其中:4代表 SetUID7代表所有者的讀寫執(zhí)行權(quán)限5分別為組和其他用戶的讀執(zhí)行權(quán)限
五、權(quán)限位補(bǔ)充
| 權(quán)限類型 | 數(shù)字表示 | 含義 |
|---|---|---|
| 普通權(quán)限 | 0 | 無特殊權(quán)限(默認(rèn)) |
| SetUID | 4 | 用戶(u)的 s 位 |
| SetGID | 2 | 組(g)的 s 位 |
| Sticky Bit | 1 | 其他用戶(o)的粘著位 |
深度理解 Linux 的 SetUID 權(quán)限
一、SetUID 的本質(zhì):權(quán)限的臨時借用機(jī)制
當(dāng)一個程序文件被設(shè)置了 SetUID,用戶在執(zhí)行這個程序時,進(jìn)程會臨時獲得該文件“屬主”的身份執(zhí)行權(quán)限。
舉個類比:
你是普通用戶,像是沒門卡的訪客;
某個設(shè)置了 SetUID 的程序是管理員提前放好的一把“限時門卡”;
你執(zhí)行程序 = 用了那張卡,權(quán)限升級,能完成只有管理員能做的操作(比如改密碼)。
這個過程是臨時的,程序執(zhí)行完權(quán)限就消失。
二、SetUID 的底層機(jī)制
當(dāng)你執(zhí)行一個二進(jìn)制程序時,系統(tǒng)會進(jìn)行以下判斷:
IF 文件具有 SetUID 且為可執(zhí)行文件 THEN
將執(zhí)行進(jìn)程的有效UID(effective UID)切換為該文件的“所有者UID”
ELSE
使用當(dāng)前用戶的UID 執(zhí)行進(jìn)程
因此:
- passwd 文件所有者是 roo,具有 SetUID
任何用戶執(zhí)行它時,進(jìn)程權(quán)限都會提升為
root可以寫
/etc/shadow文件(否則連讀都不能)
三、SetUID 的使用場景
| 場景 | 說明 |
|---|---|
| 密碼修改程序 | passwd 普通用戶執(zhí)行,程序臨時擁有 root 權(quán)限修改 /etc/shadow |
網(wǎng)絡(luò)工具如 ping(早期) | 需要打開 socket,需要 root 權(quán)限 |
用戶切換 su / sudo | 程序本身不是 root,但執(zhí)行后臨時以 root 運行 |
四、安全風(fēng)險與管理建議
SetUID 是把“雙刃劍”,用得好是便利,用不好是系統(tǒng)漏洞。
潛在風(fēng)險:
程序存在漏洞時(如緩沖區(qū)溢出、任意文件寫入等),攻擊者可能通過 SetUID 程序提權(quán)為 root,拿下整臺機(jī)器。
若不慎給 腳本文件 設(shè)置 S 位(雖然不會生效),仍有可能被誤導(dǎo)濫用。
安全建議:
1、只對系統(tǒng)可信任的二進(jìn)制程序設(shè)置 S 位
2、定期掃描系統(tǒng)中具有 SetUID 的文件:
find / -perm -4000 -type f 2>/dev/null
3、避免對可疑程序設(shè) S 位,如自寫腳本、測試程序
4、使用 sudo 替代部分 SetUID 場景(更安全,可審計)
五、延伸補(bǔ)充:SetUID vs SetGID vs Sticky Bit
| 特殊權(quán)限 | 數(shù)字 | 用途說明 |
|---|---|---|
SetUID(u+s) | 4 | 進(jìn)程以文件“所有者”身份運行 |
SetGID(g+s) | 2 | 進(jìn)程以文件“所屬組”身份運行;或新建文件自動歸組 |
Sticky Bit(+t) | 1 | 應(yīng)用于目錄,只有文件所有者能刪除該目錄下自己的文件(典型如 /tmp) |
六、一個實際對比案例
原始文件權(quán)限:
-rwxr-xr-x 1 root root 54256 Apr 23 08:32 /usr/bin/passwd
任何人可執(zhí)行,但只有 root 能修改 /etc/shadow,普通用戶運行會失敗。
開啟 SetUID:
chmod u+s /usr/bin/passwd
權(quán)限變?yōu)椋?/p>
-rwsr-xr-x 1 root root 54256 Apr 23 08:32 /usr/bin/passwd
此時任何用戶執(zhí)行 passwd 都臨時獲得 root 權(quán)限,能安全修改自己密碼。
總結(jié)一句話:
SetUID 是讓“普通用戶臨時擁有管理員權(quán)限”的關(guān)鍵機(jī)制,強(qiáng)大但危險,務(wù)必在可控范圍內(nèi)使用
以上就是Linux設(shè)置位S(SetUID)的詳細(xì)教程的詳細(xì)內(nèi)容,更多關(guān)于Linux設(shè)置位S的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
linux下用tar命令將當(dāng)前目錄下文件按子目錄壓縮歸檔的實現(xiàn)
下面小編就為大家?guī)硪黄猯inux下用tar命令將當(dāng)前目錄下文件按子目錄壓縮歸檔的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12
Linux解決rsyslog服務(wù)占用內(nèi)存過高的辦法
當(dāng)我們使用top命令查看內(nèi)存占用時,發(fā)現(xiàn)rsyslogd內(nèi)存占用很高,所以接下來這篇文章給大家介紹了Linux解決rsyslog服務(wù)占用內(nèi)存過高的辦法,文中有詳細(xì)的圖文介紹,需要的朋友可以參考下2024-05-05
Linux系統(tǒng)中kill命令殺死進(jìn)程常用小技巧分享
這篇文章主要介紹了Linux系統(tǒng)中kill命令殺死進(jìn)程常用小技巧,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
關(guān)于Linux的mariadb數(shù)據(jù)庫
這篇文章主要介紹了關(guān)于Linux的mariadb數(shù)據(jù)庫的相關(guān)資料,主要就是用戶可以對文件中的數(shù)據(jù)進(jìn)行新增、截取、更新、刪除等操作,需要的朋友可以參考下面文章內(nèi)容2021-09-09
Linux下雙網(wǎng)卡Firewalld的配置流程(推薦)
firewalld提供了一個 動態(tài)管理的防火墻,用以支持不同網(wǎng)絡(luò)區(qū)域的規(guī)則,分配對一個網(wǎng)絡(luò)及其相關(guān)鏈接和界面一定程度的信任。這篇文章給大家介紹了Linux下雙網(wǎng)卡Firewalld的配置流程,需要的朋友參考下吧2018-04-04

