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

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

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

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.

おすすめ記事