Files
當使用者對父目錄沒有寫權限時,為什麼 chmod 在文件上成功?
我正在嘗試了解 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中,而不是在目錄中。
創建、重命名、移動或刪除文件涉及修改目錄,因此需要目錄的寫權限。