通过 samba 连接保存时,如何避免更改文件的 Linux 权限?

通过 samba 连接保存时,如何避免更改文件的 Linux 权限?

我有一台 Ubuntu 开发服务器和一台 Windows 7 工作站。我使用 Windows Gvim 通过 samba 连接编辑 Linux 服务器上的文件。

从 Windows 保存文件会以奇怪的方式更改 Linux 权限,具体取决于我正在使用的 Windows 应用程序,也取决于是否有文件扩展名。

以下是一些测试

无扩展名;Notepad2:644 至 764

matt@mattserver ~ % ls -l testfile
-rw-r--r-- 1 matt matt 0 2011-05-28 07:09 testfile
--- Save from Windows Notepad2 over network ---
matt@mattserver ~ % ls -l testfile
-rwxrw-r-- 1 matt matt 1 2011-05-28 07:09 testfile

无扩展;Gvim:644 至 760

matt@mattserver ~ % ls -l testfile
-rw-r--r-- 1 matt matt 0 2011-05-28 07:10 testfile
--- Save from Windows Gvim over network ---
matt@mattserver ~ % ls -l testfile
-rwxrw---- 1 matt matt 0 2011-05-28 07:11 testfile

扩展;Notepad2:644 到 644(好!)

matt@mattserver ~ % ls -l testfile.txt
-rw-r--r-- 1 matt matt 0 2011-05-28 07:13 testfile.txt
--- Save from Windows Notepad2 over network ---
matt@mattserver ~ % ls -l testfile.txt
-rw-r--r-- 1 matt matt 0 2011-05-28 07:13 testfile.txt

扩展;Gvim:644 至 760

matt@mattserver ~ % ls -l testfile.txt
-rw-r--r-- 1 matt matt 0 2011-05-28 07:14 testfile.txt
--- Save from Windows Gvim over network ---
matt@mattserver ~ % ls -l testfile.txt
-rwxrw---- 1 matt matt 0 2011-05-28 07:14 testfile.txt

这是我的 smb.conf 的相关部分

[matt]
comment = Matt
path = /home/matt
public = yes
writable = yes
valid users = matt
create mask = 0771
directory mask = 0771
force user = matt
force group = matt

我希望通过 Samba 连接保存时权限完全不受影响。我该怎么做?

答案1

您可以尝试在 smb.conf 中设置nt acl 支持改为“否”:

这个布尔参数控制 smbd 是否尝试将 UNIX 权限映射到 Windows NT 访问控制列表。

默认值:nt acl support = yes
示例:nt acl support = no

另一个可能有帮助的是:

地图档案= 否

答案2

试试这个(smb.conf) store dos attributes = yes(.vimrc) set backupcopy=yes

我刚刚花了几个小时测试各种选项(使用 VIM 8.1.1 Windows 32 位),以下是我发现的:

samba 3.6.23 x86_64 CentOS 6,已启用 ext4 和扩展属性

set backup copy = yes假设您在 VIM 中拥有,则所有默认选项基本都可以正常工作。map archive并且store dos attributes没有任何区别。Vim 的撤消、交换和备份文件是使用 SMB 创建的create mask,但覆盖时会保留目标文件的权限。

如果您将 VIM 的撤消目录设置为 Samba 共享之外的某个位置(仅在 Samba 3 中),则该nt acl support选项似乎会破坏撤消文件。所以我想在 Samba 3 中最好将其设置为“否”。

samba 4.4.9 x86_64 CentOS 7,启用 xfs 和扩展属性

与 Samba3 相同,但您必须store dos attributes设置。但是,无论我做什么,此配置中 VIM 创建的备份文件似乎始终将组权限设置为rwx,我不知道为什么。无论如何,我都会在我的环境中禁用 VIM 备份,因此它不会影响我。nt acl support与 Samba 4 中的 UNIX 权限没有任何区别。

为了完整起见,我的配置文件如下所示(Samba 4):

smb配置文件

    ...
    # Create new files with these permissions. Doesn't affect
    # old files being overwritten by VIM, only the new ones, as well
    # as swap & undo files.
    create mask = 0644

    # Used when creating directories over Samba
    directory mask = 0755

    # Seems to be necessary in Samba 4
    store dos attributes = yes

    # Seems necessary in Samba 3 with some VIM options
    #nt acl support = no
    ...

.vimrc

    ...
    # Don't leave backups behind when overwriting files
    set nobackup

    # Create a backup before overwriting a file, but delete it after
    # (makes overwriting files safer in some cases)
    set writebackup

    # When creating a backup, make a copy of the original file, then update
    # the original (this ensures that permissions on the original file
    # remain unchanged)
    set backupcopy=yes
    ...

答案3

我发现“nt acl support = no”和“map archive = no”都不能解决问题。我的经验是,Samba 始终应用“create mask”和“directory mask”定义的文件权限,无论保存的是新文件还是现有文件。

相关内容