Bash

為什麼我不能為“其他人”設置 setuid?

  • March 11, 2022

我無法設置其他人的 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 位。但它不存在,因為擁有這樣一點沒有任何意義。

引用自:https://unix.stackexchange.com/questions/694040