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を外す事で再度編集できるようになる。