Linux

如何使文件不可修改?

  • March 15, 2019

登錄後,我可以執行以下操作:

mkdir foo
touch foo/bar
chmod 400 foo/bar 
chmod 500 foo

然後我可以打開 vim(不是 as root),編輯bar,用 強制寫入w!,文件被修改。

如何使作業系統不允許任何文件修改?

2017 年 3 月 2 日更新

  1. chmod 500 foo是一條紅鯡魚:目錄的寫權限與修改文件內容的能力無關 - 只有創建和刪除文件的能力。
  2. chmod 400 foo/bar實際上確實阻止了文件的內容被更改。但是,它不會阻止更改文件的權限——文件的所有者總是可以更改他的文件的權限(假設他們可以訪問該文件,即對所有祖先目錄的執行權限)。事實上,strace(1) 揭示了 vim (7.4.576 Debian Jessie) 正在做的事情——vim 呼叫 chmod(2) 臨時為文件所有者添加寫權限,修改文件,然後呼叫 chmod( 2)再次刪除寫權限。這就是為什麼使用chattr +i有效——只有 root 可以呼叫chattr -i. 從理論上講,如果以 root 身份執行,vim(或任何程序)可以對 chattr 執行與對不可變文件使用 chmod 執行相同的操作。

您可以為 Linux 中的大多數文件系統設置“不可變”屬性。

chattr +i foo/bar

要刪除不可變屬性,請使用-而不是+

chattr -i foo/bar

要查看文件的目前屬性,可以使用 lsattr:

lsattr foo/bar

chattr(1)聯機幫助頁提供了所有可用屬性的描述。以下是 的描述i

  A  file with the `i' attribute cannot be modified: it cannot be deleted
  or renamed, no link can be created to this file  and  no  data  can  be
  written  to  the  file.  Only the superuser or a process possessing the
  CAP_LINUX_IMMUTABLE capability can set or clear this attribute.

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