web-dev-qa-db-ja.com

ファイルを変更不可にするにはどうすればよいですか?

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

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

次に、vimを開き(rootとしてではなく)、barを編集し、w!で強制的に書き込み、ファイルを変更します。

オペレーティングシステムでファイルの変更を禁止するにはどうすればよいですか?

UPDATE 2017年3月2日

  1. chmod 500 fooは真っ赤なニシンです。ディレクトリへの書き込み権限は、ファイルの内容を変更する機能とは関係がなく、ファイルを作成および削除する機能のみです。

  2. chmod 400 foo/barは、実際にはファイルの内容が変更されるのを防ぎます。 しかし、それは行いますnotファイルのアクセス許可が変更されるのを防ぎます-ファイルの所有者は常にファイルのアクセス許可を変更できます(ファイルにアクセスできる場合、つまりすべての祖先の実行アクセス許可を前提とします)ディレクトリ)。実際、strace(1)は、これがvim(7.4.576 Debian Jessie)が行っていることを明らかにします-vimはchmod(2)を呼び出して、ファイルの所有者の書き込み権限を一時的に追加し、ファイルを変更してから、chmod( 2)再度書き込み権限を削除します。そのため、chattr +iを使用しても機能します。ルートのみがchattr -iを呼び出すことができます。理論的には、vim(または任意のプログラム)は、ルートとして実行された場合に、不変ファイルのchmodと同じようにchattrで同じことを実行できます。

37
user2141130

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.
52
jordanm

あなたはできる:

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

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

1
yo'

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

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

再び読みやすくするには、+iから-i

0
Robin A. Meade