使用 Windows 编辑器将文件保存到 Samba 分区时,权限会发生奇怪的变化

使用 Windows 编辑器将文件保存到 Samba 分区时,权限会发生奇怪的变化

我试图弄清楚为什么当从 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然后将新内容保存为具有原始文件名的新文件。这是基于我自己之前使用 UltraEdit 编辑器时遇到的相同问题的经验。

然而,如果这是烫发改变的原因,我就无法解释我观察到的另外两种症状:

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

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

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

还有什么问题可能存在?我应该采取什么步骤来调查它?

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

答案1

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


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

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

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

map archive = no

该属性未映射,并且用户执行权限将按照先前的设置保留。

答案2

我遇到了同样的情况。对我来说,更改 smb.conf 文件中的创建掩码参数很有帮助。

create mask = 0600 ->  create mask = 0700

相关内容