Linux 上で、NTFSの削除不可に似たような機能を実現したくて、こんなことをやった→ Linux で、編集できるけど削除できないファイルという環境を作りたい
samba 経由でも同様に動作するので、Windows PC の複数人で操作するファイルサーバとしても行けるんじゃないか、そうおもって samba で領域を公開したのですが結論として思い通りに行きませんでした。
現在存在しているファイルの編集はできるのですけど、同名ファイルを上書きコピーできないのですよ。手元のPCに一旦コピーして手元のPCでじっくり考えて編集した後、samba 領域に書き戻す(ファイル上書きコピーする)というようなことをする人が多いのですが、この動作が拒否されてしまうのですわ。
chattr +a したファイルを変更するには、追記モードで開かないといけないのですが、samba 経由でエクスプローラの操作でのコピーのときはたぶん追記モードじゃないんでしょう。ですから不許可となってしまうわけです。
Windows な NTFS 領域にて共有したフォルダで削除不可を付けたファイルは、同名ファイルで上書きが可能なのです。Windows同士うまいことやってるんでしょう。
とにかくNTFSのような削除不可設定ができないということがわかったので、別方向に切り替えました。
まず samba 公開領域としては、Read/Write ともに許可。 chattr で付けた属性も全部外す。すなわち削除もOKな設定とする。これだとうっかり削除やイタズラ削除ができてしまうじゃないですか、という話ですが、削除は仕方がないとします。あきらめます。じゃあどうするか。
samba のゴミ箱機能を使います。ゴミ箱機能を有効にすると削除をしてしまってもゴミ箱に移動されるだけなので、実体はなくなりません。
具体的には、smb.conf に vfs objects = recycle
などと書いておけば、ゴミ箱機能が有効になります。特に指定をしない場合は .recycle というフォルダが作成され、samba 経由で削除したファイルはそこに移動されます。
じゃあ .recycle フォルダの中身を削除されたらどうなるの?完全に無くなります。ですから .recycle フォルダの中身は削除されたくない。じゃあ.recycle フォルダに削除禁止を付けましょう。
chattr +a .recycle
これでよし。.recycle フォルダに入ったファイルはフォルダに設定してある状態の制限を受けるので、ファイルごとに設定する必要は無い。
これで、NTFSと同じまではいかないけど、とりあえずどうにかなるレベルには持って行けたんじゃないかな。