Files

在使用者打開文件時更改 inode 中的文件權限

  • June 22, 2022

根據這個SO question,當我們打開一個文件來讀取它時,我們只在打開它時檢查一次權限。如果我們更改文件的權限並說不再允許使用者從文件中讀取,使用者仍然可以讀取文件。這提出了幾個問題:

  1. 難道我們不需要繼續檢查權限,因為例如我們打開一個文件來讀取它,然後嘗試使用write,我們不應該得到一個錯誤嗎?這意味著我們檢查我們被允許對文件做什麼。(也許我們使用 fd 在本地保存我們允許使用它執行的操作並每次都檢查它們?)
  2. 我們在更新權限的時候,是更新inode表中的inode的單副本還是直接更新磁碟上的副本?因為如果我們直接在磁碟上的副本上更新權限,其他查看 inode 表的程序將看不到更新的版本,所以更新 inode 表並讓作業系統從那裡將更改寫回磁碟。

難道我們不需要繼續檢查權限,因為例如我們打開一個文件來讀取它,然後嘗試使用 write,我們不應該得到一個錯誤嗎?

不,我們不應該!這是有意的。讀取文件時的權限open很重要,而不是以後。這就是 API。

我們在更新權限的時候,是更新inode表中的inode的單副本還是直接更新磁碟上的副本?

這完全是文件系統層的一個實現細節。我們不知道——而且,我們不必在意。我們所知道的是,這應該在多個流程中保持一致,並且在哪裡進行更改並不重要。

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