『chattr』コマンドで属性を変更し追記専用や削除不可能なファイルにする

Windowsのファイル属性には、Linuxで利用される編集権限や読み取り権限、実行権限などのほか、データの追記のみ許可したり、削除出来ないような権限を与える事が出来る。

で、Linuxには同様の権限、機能が無いのか?というと、ext2、3、4で利用できる拡張属性を設定することで可能となる。
そんな拡張属性を変更できるのが『chattr』コマンドだ。コマンドは基本的にバンドル時にすでにインストールされている。

『chattr』コマンドは、以下のように実行する。

chattr [オプション] [属性の変更値] ファイル・ディレクトリ

利用できるオプションは以下。

  • -R … フォルダ内のファイルの属性値を再帰的に変更する
  • -V … 属性値の変更内容を詳細に出力する
  • -f … エラーメッセージを抑制する

で、肝心の変更できる属性値が以下。
その属性値を追加する場合は「+」を、削除する場合は「-」の後に記述する。

  • a … 追記編集のみ可能とする
  • c … ファイルの圧縮を行う
  • d … dumpの対象外にする
  • e … 拡張フォーマットを使用する
  • i … ファイルを変更出来なくする
  • j … データのジャーナリングを行う
  • s … 安全に削除させる(データブロック内を消去)
  • t … 末尾のマージをできなくする
  • u … ファイルを削除不可にする
  • A … atime(アクセス時刻)を更新しない
  • D … ディレクトリを同期的に更新する
  • S … 同期的に更新する

基本的に、「a」「i」を覚えておけば問題ないだろう。
現在付与されている拡張属性値を確認したい場合は、「lsattr」コマンドを利用する。

それでは、実際に幾つか権限を付けて、動作を見てみよう。
なお以下の例では「-V」オプションを付与しているが、特に必要無ければ付与しなくてもいい。

追記編集のみ可能なファイルに変更する

「/test/test.txt」というファイルを、追記編集のみ可能なファイルに変更してみる。
以下のようにコマンドを実行する。

chattr -V +a /test/test.txt

なお、たとえ内容が追記でもvimエディタなどでの編集はできなくなっているので注意する。
もちろん、削除もできなくなっている。

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

「/test/test.txt」というファイルを、権限等ふくめ変更自体出来ないファイルにする。
以下のようにコマンドを実行する。

chattr -V +i /test/test.txt

これで、たとえrootユーザでも変更・削除出来ないファイルが出来上がった。
もちろん、拡張権限のiを外す事で再度編集できるようになる。