linux-编辑文件时保留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共享create mask编辑文件时,Linux中的文件许可权会不断更改为create mask,即使在编辑之前是fileMode = false

这样一直显示在我的create mask中,如下所示:

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,但这也不会“保留”原始文件权限。 我可以通过在.gitconfig中设置fileMode = false来忽略git中的文件模式更改,但这也忽略了该问题。

从Linux修改文件权限后,有什么方法可以保留它们?

recognosco asked 2020-06-18T19:35:28Z
1个解决方案
72 votes

最终可以弄清楚为什么更改权限。 混淆是由map archive设置(Samba中的默认值)引起的。 设置yes后,所有者执行位开始以我预期的方式运行。

通过阅读此处的文档找到了答案:[http://www.samba.org/samba/docs/using_samba/ch08.html]在MS-DOS和Unix上的文件权限和属性部分中。 它清楚地提到了这种副作用:

因此,Samba磁盘共享中文件上存在的三个Unix可执行位中的任何一个都没有用。 但是,DOS文件具有它们自己的属性,这些属性在Unix环境中存储时需要保留:存档,系统和隐藏位。 如果有指示,Samba可以通过在Unix端重用文件的可执行权限位来保留这些位。 但是,映射这些位会产生不利的副作用:如果Windows用户将文件存储在Samba共享中,而您在Unix上使用map archive命令查看该文件,则某些可执行位将不意味着您期望它们 至。

但是,它也提到了这一点:

我们应该警告您,map archive选项的默认值为yes,而其他两个选项的默认值为no。这是因为如果未正确存储DOS和Windows文件的存档位,则许多程序无法正常工作。 但是,系统属性和隐藏属性对于程序的操作并不重要,并且由管理员自行决定。

您还可以在此处阅读有关存档位的更多信息:[http://en.wikipedia.org/wiki/Archive_bit]

recognosco answered 2020-06-18T19:36:06Z
translate from https://stackoverflow.com:/questions/20958888/preserving-file-permissions-for-samba-shares-when-file-is-edited