从 Windows 编辑器在 Samba 分区上保存文件时的奇怪权限更改

DVK*_*DVK 5 unix samba windows-7 text-editors file-permissions

我试图弄清楚为什么当从安装在 SAMBA 的 Unix 分区上的 Windows 编辑器保存的文件的权限更改时,会出现特定行为。

情况:

  • 我们在 Unix 上有一个文件,具有 777 权限:

    -rwxrwxrwx 1 testuser users 4859 Jan 23 15:09 fbparser.pl*

  • 文件所在的目录是通过 Samba 从 Windows 7 PC 挂载的。

  • 我们在“Notepad++”或“Sublime”编辑器中打开文件进行编辑。

  • 更改并保存文件后,在 unix 端,权限更改为:

    -rw-rwxrwx 1 testuser users 4859 Jan 23 15:09 fbparser.pl*

现在,我怀疑这可能不是由于 Samba 挂载,因为在常规 Windows 记事本中打开和保存文件时不会发生同样的问题!

因此,我最初的想法是,这是因为上面提到的编程编辑器可能会被设置为 - 而不是简单地保存文件 - 将原始文件重命名为$orig_filename.bak,然后将新内容保存为具有原始文件名的 NEW 文件。这是基于我自己之前使用 UltraEdit 编辑器解决相同问题的经验。

但是,如果这是烫发变化的原因,我无法解释我观察到的两个其他症状:

  • 首先,首先没有创建备份文件。

  • 其次,touch在 Unix Shell 的同一目录中创建新文件(使用)时,新文件的权限根本不是-rw-rwxrwx

  • 第三,如果重要的话,文件的 inode # 在编辑后保持不变。

还有什么可能是问题,我可以采取哪些步骤来调查它?

当我告诉 UE 不要通过重命名备份文件时,我自己的 UltraEdit 问题就消失了;但是 Notepad++ 没有这样的选项。

ope*_*llo 7

我在尝试解决一个非常相似的问题时发现了这个问题。我的解决方案是添加map archive = no到 smb.conf 的全局部分。


根本问题是 Samba 将权限从 Dos 映射到 Linux 的方式。

似乎当记事本 ++ 保存文件时,它正在设置/重置 dos 文件“存档”属性。默认情况下,Samba 使用它来管理文件用户权限的执行属性。

因此,如果您设置 Samba 参数:

map archive = no
Run Code Online (Sandbox Code Playgroud)

该属性没有被映射,并且用户执行权限按照他们之前设置的内容保留。