Files

當使用者對父目錄沒有寫權限時,為什麼 chmod 在文件上成功?

  • March 29, 2015

我正在嘗試了解 Linux 中的文件/目錄權限。使用者可以使用列出目錄中的文件

cd test
ls -l 

即使發出上述命令的使用者對 test 目錄中的任何文件都沒有讀、寫或執行權限,他仍然可以列出它們,因為他/她對 test 目錄具有讀權限。

那麼為什麼在以下場景中使用者B可以更改他擁有但沒有父目錄寫權限的文件的權限?

使用者 A,創建一個測試目錄並讓其他使用者能夠在其中寫入:

mkdir test
chmod o+w test

使用者 B,在測試文件夾中創建一個文件。

cd test
touch b.txt

使用者A從目錄中刪除其他人的寫權限

chmod o-w test

使用者 B,可以成功更改權限,即使權限是目錄的一部分,並且該使用者對他擁有的文件的父目錄沒有寫權限

chmod g-r b.txt

為什麼chmod沒有失敗,因為使用者無法修改具有文件資訊的目錄 - 權限等?

當您更改文件的元數據(權限、所有權、時間戳等)時,您並沒有更改目錄,而是更改了文件的 inode。這需要x目錄的權限(訪問文件)和文件的所有權(只有擁有文件的使用者才能更改其權限)。

如果您記得文件可以在多個目錄中具有硬連結,我認為這很直覺。該目錄包含一個將文件名映射到 inode 的表。如果一個文件在多個目錄中以多個名稱連結,那仍然是一個inode,具有一組權限、所有權等,這表明文件的元數據在inode中,而不是在目錄中。

創建、重命名、移動或刪除文件涉及修改目錄,因此需要目錄的寫權限。

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