ファイルを変更できないようにするには?

ファイルを変更できないようにするには?

ログインすると、次のことができます。

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

その後、vim(ではなくroot)を開いて編集し、barforce writeを使用すると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機能する理由ですchattr -i。理論的には、rootとして実行すると、vim(またはすべてのプログラム)はchattrを使用して不変ファイルでchmodとして実行できるのと同じことを実行できます。

答え1

Linuxでは、ほとんどのファイルシステムに「不変」属性を設定できます。

chattr +i foo/bar

不変属性を削除するには、次のように-します+

chattr -i foo/bar

ファイルの現在の属性を表示するには、lsattrを使用できます。

lsattr foo/bar

これチャット(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.

答え2

あなたはできます:

  1. ファイル所有者をroot新しく作成された仮想ユーザーに変更
  2. 正しいグループを維持してください。
  3. chmod 440グループ(たとえば、ユーザー)による読み取りを許可するために使用されます。

正しいユーザーがグループの唯一のユーザーでない場合は、新しいグループを作成してグループに追加し、そのグループを使用する必要があります。ただし、ファイルの所有者ではないため、viファイルの所有者を変更することはできません。

答え3

ディレクトリツリー全体を読み取り専用にするには:

cd <directory>
find ./ -print0 | sudo xargs -I {} -0 chattr +i {}

もう一度読むことができるようにする+iに変更します-i

関連情報