
來自 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。