ログインしている間、次のことができます。
mkdir foo
touch foo/bar
chmod 400 foo/bar
chmod 500 foo
次に、vimを開き(root
としてではなく)、bar
を編集し、w!
で強制的に書き込み、ファイルを変更します。
オペレーティングシステムでファイルの変更を禁止するにはどうすればよいですか?
UPDATE 2017年3月2日
chmod 500 foo
は真っ赤なニシンです。ディレクトリへの書き込み権限は、ファイルの内容を変更する機能とは関係がなく、ファイルを作成および削除する機能のみです。
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で同じことを実行できます。
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.
あなたはできる:
root
またはダミーの新しく作成したユーザーに変更しますchmod 440
は、グループ(あなた)による読み取りを許可します。正しいユーザーがこのグループの唯一のユーザーではない場合は、新しいグループを作成し、そのユーザーだけを追加して、このグループをそのグループに使用する必要があります。ただし、あなたはファイルの所有者ではないため、vi
はファイルの所有者を変更できません。
ディレクトリツリー全体を読み取り専用にするには:
cd <directory>
find ./ -print0 | Sudo xargs -I {} -0 chattr +i {}
再び読みやすくするには、+i
から-i
。