Linux
硬連結創建 - 權限?
哪些權限會影響硬連結的創建?文件所有權本身重要嗎?
假設使用者
alice
想要創建指向target.txt
目錄中文件的硬連結target-dir
。
- 和都
alice
需要哪些權限?target.txt``target-dir
- 如果
target.txt
由 user擁有bill
並且target-dir
由 user 擁有chad
,它會改變什麼嗎?我試圖模擬這種情況,在文件系統中創建以下文件夾/文件結構
ext4
:#> ls -lh . * .: drwxr-xr-x 2 bill bill 60 Oct 1 11:29 source-dir drwxrwxrwx 2 chad chad 60 Oct 1 11:40 target-dir source-dir: -r--r--r-- 1 bill bill 0 Oct 1 11:29 target.txt target-dir: -rw-rw-r-- 1 alice alice 0 Oct 1 11:40 dummy
雖然
alice
可以創建到 的軟連結target.txt
,但她不能創建硬連結:#> ln source-dir/target.txt target-dir/ ln: failed to create hard link ‘target-dir/target.txt’ => ‘source-dir/target.txt’: Operation not permitted
如果
alice
擁有target.txt
且未更改任何權限,則硬連結成功。我在這裡想念什麼?
要創建硬連結
alice
,需要在所有情況下write+execute
獲得權限。target-dir
所需的權限target.txt
會有所不同:
- 如果
fs.protected_hardlinks = 1
然後alice
需要所有權target.txt
或至少read+write
對其的權限。- 如果
fs.protected_hardlinks = 0
那麼任何一組權限都可以;即使是000也可以。This answer to a similar question缺少回答這個問題的資訊。
來自http://kernel.opensuse.org/cgit/kernel/commit/?id=800179c9b8a1
$$ emphasis mine $$:
硬連結:
在與系統文件在同一分區上具有使用者可寫目錄的系統上,長期存在的一類安全問題是基於硬連結的檢查時間-使用時間競賽,最常見於全域可寫目錄像/tmp。利用此漏洞的常用方法是在遵循給定的硬連結時跨越權限邊界(即根程序遵循另一個使用者創建的硬連結)。此外,存在使用者可以“固定”潛在易受攻擊的 setuid/setgid 文件的問題,因此管理員實際上不會完全升級系統。
解決方案是僅當使用者已經是現有文件的所有者,或者他們已經對現有文件具有讀/寫訪問權限時才允許創建硬連結。