Linux

硬連結創建 - 權限?

  • December 3, 2020

哪些權限會影響硬連結的創建?文件所有權本身重要嗎?


假設使用者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 文件的問題,因此管理員實際上不會完全升級系統。

解決方案是僅當使用者已經是現有文件的所有者,或者他們已經對現有文件具有讀/寫訪問權限時才允許創建硬連結

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