Samba、Windows ACL 和不需要的可执行位

Samba、Windows ACL 和不需要的可执行位

我设置具有 ACL 支持的 Samba在 Ubuntu 18.04 LTS 服务器上,我面临以下情况。

以下是smb.conf内容:

[global]
   # naming
   workgroup = WORKGROUP
   server string = %h server (Samba, Ubuntu)

   # networking
   disable netbios = yes
   local master = no
   domain master = no
   preferred master = no

   # domain accounts
   security = ADS
   realm = EXAMPLE.COM
   encrypt passwords = yes
   invalid users = root

   idmap config *:backend = tdb
   idmap config *:range = 70001-80000

   template shell = /bin/bash

   winbind nss info = rfc2307
   winbind use default domain = yes
   winbind rpc only = yes
   winbind cache time = 10

   vfs objects = acl_xattr
   map acl inherit = yes
   acl group control = yes
   store dos attributes = no

   # logging
   log file = /var/log/samba/log.%m
   max log size = 1000

   # permissions
   create mode = 0644
   directory mode = 0755
   inherit acls = yes
   map archive = no

   # printers
   load printers = no

   # veto files
   veto files = /._*/.DS_Store/

[All Users]
   comment = All Home Directories
   path = /home/EXAMPLE
   browseable = yes
   read only = no
   valid users = @dl_acc_ro @dl_acc_rw

从 macOS Sierra,我使用 连接到 Samba 共享smb://myserver.com/test。然后我打开一个终端,$ cd /Volumes/test最后使用 创建一个文件$ touch xxx

$ ls -l以下是我的 Mac 上的输出:

$ ls -l
-rwx------  1 gregory  staff  0 Sep 26 20:00 xxx

现在在服务器本身上:

$ ls -l
-rwxrwxr-x+ 1 gregory utilisa. du domaine 0 Sep 26 18:00 xxx

和 ACL:

$ getfacl /home/EXAMPLE/gregory
getfacl: Removing leading '/' from absolute path names
# file: home/EXAMPLE/gregory
# owner: gregory
# group: utilisa.\040du\040domaine
user::rwx
group::r-x
other::r-x


$ getfacl /home/EXAMPLE/gregory/xxx
getfacl: Removing leading '/' from absolute path names
# file: home/EXAMPLE/gregory/xxx
# owner: gregory
# group: utilisa.\040du\040domaine
user::rwx
user:gregory:rwx
group::r-x
group:utilisa.\040du\040domaine:r-x
mask::rwx
other::r-x

如您所见,创建的常规文件touch已设置可执行位。有什么方法可以避免这种情况吗?我希望通过 Samba 创建的常规文件具有0644权限。

为了记录,我从 Linux 工作站进行了测试,它表现出相同的行为,这让我相信这一切都发生在 Samba 服务器端。

答案1

来自Samba 手册:

因此,Samba 磁盘共享中文件上的三个 Unix 可执行位都毫无用处。但是,DOS 文件有自己的属性,在将它们存储在 Unix 环境中时需要保留这些属性:存档、系统和隐藏位。Samba 可以通过在 Unix 端重用文件的可执行权限位来保留这些位(如果指示它这样做)。但是,映射这些位有一个不良的副作用:如果 Windows 用户将文件存储在 Samba 共享中,并且您在 Unix 上使用 ls -al 命令查看该文件,则某些可执行位将不会像您期望的那样表示。

如何禁用它?以下是手册中的说明:

三个 Samba 选项决定是否映射位:map archive、map system 和 map hidden。这些选项分别将 archive、system 和 hidden 属性映射到文件的所有者、组和全局执行位。您可以将这些选项添加到 [data] 共享,并按如下方式设置它们的每个值:

 [data]
    map archive = no
    map system = no
    map hidden = no

您还可以使用以下方法禁用可执行位:store dos attributes旗帜。

答案2

查看mask中的各种设置smb.conf。例如create mask,,directory mask...

此外,这些masks可能会受到客户端上的挂载选项的影响,这也有助于查看详细信息。

相关内容