samba

sambaでファイルを上書きすると実行属性が付いてしまう場合の対処

More than 1 year has passed since last update.

結論

[global]
map archive = no

詳しいこと

Windowsでファイルを保存すると、「アーカイブ属性」という属性が自動的に付く。この属性は、xcopyコマンドなどでファイルをコピーする際に「アーカイブ属性が付いたファイルだけをコピーする。そしてアーカイブ属性を解除する」という挙動をするために使われる。つまり、増分バックアップを取るための属性である。

ところがこの属性、現代においてはあまり使われることは無い。なぜならCPUもハードディスクも十分に速いので、ほとんどのバックアップソフトはファイルの更新日時と先頭数KBのハッシュなど、別のやり方で増分を検出しているからだ。

なぜ実行属性が付くのか

そこで、このあまり使われていないアーカイブ属性に目を付けたのが、sambaだ。unixには実行属性があるが、windowsには無い。無いなら、アーカイブ属性と実行属性を相互変換してしまえば良いではないか、ということである。

つまり、
Windowsでファイルを新規作成、または上書き保存する。

ファイルにアーカイブ属性が付く。

sambaがアーカイブ属性を実行属性に変換して受け取る。

unixファイルシステム上のファイルに、実行属性が付く。

と、こういう仕組みになっている。

解決策

そこで、smb.confにはmap archiveというフラグが用意されている。これは「アーカイブ属性と実行属性を相互変換するか、しないか」という、そのまんまのフラグである。

このフラグをnoにセットすることで、アーカイブ属性は無視されるようになる。

map archive=noなsambaでr+xなパーミッションを設定したい

ちなみに、NTFSが扱えるシステムであれば、Everyoneと、グループと、オーナーのセキュリティ権限を変えることで、ちゃんと実行属性や書き込み属性に反映が出来る。WindowsXP以降であれば、「読み取りと実行」の権限がr+xに該当する。フルコントロールにすればrwxになる。map archiveをnoにしていても、ちゃんとパーミッションの設定は可能だ。