為什麼非特權使用者無法更改文件所有權?

為什麼非特權使用者無法更改文件所有權?

來自 chown(2):

只有特權進程(Linux:具有 CAP_CHOWN 功能的進程)可以更改檔案的擁有者。文件的擁有者可以將文件的群組變更為該所有者所屬的任何群組。特權進程(Linux:使用 CAP_CHOWN)可以任意更改群組。

這個限制的原因是什麼?為什麼非特權使用者無法更改其擁有的文件的文件所有權(即沒有 /etc/shadow)?

$ touch blah
$ chown root:root blah
chown: changing ownership of `blah': Operation not permitted

答案1

透過允許使用者「贈送」文件,您會與作業系統的各種功能發生衝突。例如:

Taking up another user's disk quota.
Impersonating another user (or even root) via setuid.
Having insufficient privileges to undo a mistaken chown.
Making it appear that someone else had created a given file.
Setting up cron jobs to run on other user's accounts.
And many more...

答案2

這只是 Linux 設計者的個人選擇不允許它——所有的偽安全原因,給定,是似是而非的,因為有 UNIX 系統允許這樣做。

我認為這個功能取決於你的 UNIX 的行為是否遵循“System-V”(AT&T)或伯克利的 UNIX(BSD)...

至於提到的其他安全問題:

  • 透過 setuid 冒充另一個使用者(甚至 root)。

    非問題:更改“所有者”會清除任何“setXid”位元(U/G)

  • 沒有足夠的權限來撤銷錯誤的 chown

    並不是真正的“安全風險”,但是,它可能在允許更改用戶的系統上,如果它位於您擁有的目錄中,您可以將其更改回來,否則:“小心”!

  • 使給定文件看起來是其他人創建的。

    它仍然位於您可寫入的目錄中。也就是說,您無法將其移至他們的主目錄中,除非將其開啟以寫入您的群組或所有人(或特別是您,如果 ACL 可用)。

  • 設定 cron 作業以在其他使用者的帳戶上執行。

    再說一遍,這是行不通的——因為 crondirs 是由用戶擁有的,甚至沒有設定為可讀的被其他用戶使用,更不用說可寫了。

  • 如果任何人都可以更改所有權,那麼任何人都可以更改權限以存取系統上的任何檔案。

    不:僅當使用者「擁有」包含該檔案的目錄時。即,我可以將名為「passwd」的檔案提供給root,但我無法將其移至/etc/,除非我具有對/etc/的寫入權限。

  • 配額

    一個可能有效的觀點—如果您使用配額,但如果您按 home-dir 匯總磁碟空間,似乎很容易檢測到;唯一的問題是多個使用者可寫入的目錄。在這種情況下,可能會由該「目錄」的擁有者進行。它可能在那些支援「贈送」文件的系統上,您只能在您「擁有」的目錄中執行此操作,但自從我實際上使用允許這樣做的系統以來已經很長時間了,所以我不這樣做不記得具體的限制了。

我似乎記得允許“放棄文件”需要進行一些“權衡”...例如,在允許這樣做的系統上,不允許Linux允許的其他東西,但不記得那是關閉的手...

我想說上面的“答案”應該不被標記為答案,因為它不是真正的答案。它更多的是設計決策——我只是不知道權衡是什麼。

可能存在上面未提出的安全問題,這些問題是有效的,但上面的問題是無效的。

IMO,它應該是“/proc”中系統可設定的“值”,但一般來說,我認為大多數人並不太在意。

如果強烈需要它,可以增強「chown」的安全性並對其進行修改以允許它,然後設定 w/setuid「root」以使其能夠實施這樣的策略。

答案3

好吧,如果任何人都可以更改所有權,那麼任何人都可以更改權限以存取系統上的任何檔案。這不僅從惡意軟體的角度來看(不需要 sudo),而且從系統管理員的角度來看都是不好的。如果任何使用者可以更改任何文件,則文件權限就沒用了。

答案4

因為這樣使用者就可以逃避檔案系統配額。如果我有 100MB 的配額,而你有 100MB 的配額,我可以上傳 100MB,chmod a+r,chown 你,然後再上傳 100MB。

相關內容