web-dev-qa-db-ja.com

ファイルの編集時にsamba共有のファイル許可を保持する

私が使用しているコードベースは、GitリポジトリからLinuxマシンにチェックアウトされています。実動コードはLinuxにデプロイされるように作成されているため、すべてのテストはLinuxマシンで行いますが、コード編集/オーサリングなどの日常的な使用にはWindowsを使用します。

そのために、次のように、コードをチェックアウトするフォルダー(ホームフォルダー)のSamba共有を作成しました。

[wgrover]
    path = /home/wgrover
    available = yes
    valid users = wgrover
    read only = no
    browsable = yes
    public = yes
    writable = yes

ただし、Windowsでsamba共有\\linux-box\wgroverからファイルを編集すると、Linuxでのファイル許可は、編集前に755であったにもかかわらず644に変わり続けます

これは私のgit diffに次のように表示され続けます:

diff --git a/debian/maggie.nginx.conf b/debian/maggie.nginx.conf
old mode 100644
new mode 100755
index 7cda506..7eab574

Smb.confでcreate maskを設定することは可能ですが、これは元のファイルのアクセス権を「保持」しません。 fileMode = false.gitconfigを設定することにより、gitでのファイルモードの変更を無視できますが、これも問題を無視します。

linuxから変更されたファイルのパーミッションを保持する方法はありますか?

47
recognosco

許可が変更された理由を最終的に把握できました。混乱は、Sambaのデフォルト値であるmap archive = yes設定から生じました。 map archive = noを設定した後、所有者の実行ビットは、期待どおりに動作し始めました。

ここでドキュメントを読んで答えを見つけました: http://www.samba.org/samba/docs/using_samba/ch08.html inFile Permissions and MS-DOSおよびUnixセクションの属性。この副作用について明確に言及しています:

したがって、Sambaディスク共有のファイルに存在する3つのUnix実行可能ビットのいずれも使用できません。ただし、DOSファイルには、Unix環境に保存するときに保存する必要がある独自の属性(アーカイブ、システム、隠しビット)があります。 Sambaは、Unix側でファイルの実行許可ビットを再利用することにより、これらのビットを保持できます(指示されている場合)。ただし、これらのビットのマッピングには不幸な副作用があります。WindowsユーザーがファイルをSamba共有に保存し、ls -alコマンドを使用してUnixで表示すると、実行可能なビットの一部が意味を成しませんそれらを期待しています。

ただし、このことにも言及しています。

map archiveオプションのデフォルト値はyesであり、他の2つのオプションのデフォルト値はnoであることに注意してください。これは、DOSおよびWindowsファイルのアーカイブビットが正しく保存されていない場合、多くのプログラムが正しく動作しないためです。ただし、システムと非表示の属性はプログラムの動作にとって重要ではなく、管理者の裁量に任されています。

アーカイブビットの詳細については、こちらをご覧ください: http://en.wikipedia.org/wiki/Archive_bit

71
recognosco