我设置具有 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 磁盘共享中文件上的三个 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
可能会受到客户端上的挂载选项的影响,这也有助于查看详细信息。