Bash
為什麼我不能為“其他人”設置 setuid?
我無法設置其他人的 setuid 位。為什麼?有安全鎖嗎?
$ ls -l -rwxrwxr-x 1 allexj allexj 16784 Mar 11 17:30 a.out $ chmod o=+s a.out $ ls -l -rwxrwx--- 1 allexj allexj 16784 Mar 11 17:30 a.out
傳統的 Unix 權限由 12 位組成
user group other extra 0 0 0 0 0 0 0 0 0 0 0 0 r w x r w x r w x s s t
這些額外的位允許您啟用三個“附加模型”$$ 1 $$:
- 第一個位(通常表示為小寫的 s 字母)是setuid位,當您使用它執行執行檔時,它允許任何使用者擁有他們的EUID$$ 2 $$設置為執行檔所有者的 UID。
- 第二位(也被描述為小寫的 s 字母)是setgid位,它與 setuid 位具有相同的效果和含義,但與 setuid 不同的是,它與組和EGID 一起有效地允許任何使用者執行執行檔,就像他們將他們的組設置為文件所有者的組。
- 最後第三位是粘性位$$ 3 $$(也稱為限制刪除標誌)。它幾乎總是用於目錄,並允許任何人在其中創建文件,並確保文件“粘”到其所有者,不允許任何人(除了 root)刪除它們。在現代系統上,它最常見的用途是與**/tmp**目錄一起使用。每個人都可以在其中創建文件,並且只有他們可以刪除它們,這樣可以確保每個人都可以共享一個目錄,同時保證沒有一個使用者可以弄亂其他使用者的文件。對於目錄,該位在大多數 Unix(和類 Unix)系統上具有基本相同的行為。然而,它用於文件,在不同的 Unix(和類 Unix)系統中並不統一,例如,現代 Linux 核心完全忽略它,其他系統可能有一些特殊用途$$ 4 $$
所以,既然我們知道這些位在現代系統上是如何執行的,那麼問自己一個問題:如果第 12 位不是專用於上述行為,那麼如果我們將 setuid 位的行為應用於“其他”使用者,它會是什麼樣子? ? 使用 setuid 和 setgit 很明顯,但是“允許任何使用者將其有效使用者 ID 用作任何其他使用者的 ID”是什麼意思?對我來說,這看起來像是除以零,這沒有邏輯意義,因為答案可能是“有效的使用者 ID 將同時是任何和所有其他可能的使用者 ID”。沒有安全鎖或影響,擁有這樣的東西沒有任何意義。最初的 Unix 設計者可能沒有
希望這可以幫助。
man chmod
有一個關於 setuid 和 setgid 的特殊部分。
但首先,只要仔細看看名字:set u id, set g id。
對於其他人,應該設置o id 位。但它不存在,因為擁有這樣一點沒有任何意義。