ログインすると、次のことができます。
mkdir foo
touch foo/bar
chmod 400 foo/bar
chmod 500 foo
その後、vim(ではなくroot
)を開いて編集し、bar
force writeを使用するとw!
ファイルが変更されます。
オペレーティングシステムでファイルの変更を禁止する方法は?
2017年3月2日更新
chmod 500 foo
これは赤ニシンです。ディレクトリへの書き込み権限は、ファイルの内容を変更する機能とは何の関係もなく、むしろファイルを作成および削除する機能に関連しています。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
あなたはできます:
- ファイル所有者を
root
新しく作成された仮想ユーザーに変更 - 正しいグループを維持してください。
chmod 440
グループ(たとえば、ユーザー)による読み取りを許可するために使用されます。
正しいユーザーがグループの唯一のユーザーでない場合は、新しいグループを作成してグループに追加し、そのグループを使用する必要があります。ただし、ファイルの所有者ではないため、vi
ファイルの所有者を変更することはできません。
答え3
ディレクトリツリー全体を読み取り専用にするには:
cd <directory>
find ./ -print0 | sudo xargs -I {} -0 chattr +i {}
もう一度読むことができるようにする+i
に変更します-i
。