我不能让samba为创建的目录设置适当的权限

我有一个ubuntu服务器使用samba共享一些文件夹。 当客户端创建新文件夹或文件时,不会根据smb.conf中的设置设置权限。

我对特定共享的当前设置:

[share] path = /mnt/share browsable = yes guest ok = no writable = yes read only = no create mask = 0774 directory mask = 0774 write list = netuser 

当samba客户端(Windows 7框)使用“netuser”帐户创建文件或目录时,权限变为

 drwxr-sr-- 2 netuser sambashare 4096 2012-01-22 21:14 New folder -rwxrw-r-- 1 netuser sambashare 0 2012-01-22 21:07 New Text Document.txt 

父目录具有set group id标志,因此sambashare组所有者。 这个想法是samba用户和服务器用户都属于sambashare组,因此能够编辑,删除和创建文件和目录。 但是,由于创建的文件夹没有组集的写标志,服务器用户无法在没有sudo的情况下在这些文件夹中创建新文件或文件夹。

我测试过添加和删除目录掩码,强制目录模式,目录安全模式和强制目录安全模式,但行为仍然存在。 新创建的文件和文件夹不会获得774权限,而是分别为764和754。

我错过了什么? 为什么samba没有设置正确的权限?

我认为你需要使用以下参数:

 # I changes the permissions to rw-rw-r-- # You should be able to change them to 775 if you need the files to # be executable create mask = 664 force create mode = 664 security mask = 664 force security mode = 664 # I set the SGID flag here as I thought this is what you wanted # You could change to 0775 directory mask = 2775 force directory mode = 2775 directory security mask = 2775 force directory security mode = 2775 

我正在寻找一个很好的解释这些设置如何工作,但找不到比smb.conf更好的东西

您将不得不向下滚动一下这些选项。

基本上,简而言之,Windows权限与unix(linux)不同,samba映射权限有点奇怪。

经过大量的试验和错误,这是使用SGID和unix组共享samba目录的正确代码。 如果用户匿名连接,他会得到r / o,如果他登录并且是指定组的成员,他会得到r / w。

我将名为“admin”的组设置为具有写权限的用户的主要组,其他人都获得了只读权限。

我强迫用户使用任何人,因此处理相同文件的不同人员不会互相干扰。

我在共享目录上设置了chmod 2755,因此它使用相同的组’admin’inheritance创建的目录

 $ chmod -R 2755 /home/shares/test 

检查一切是否良好:

 $ stat /home/shares/test Access: (2755/drwxr-sr-x) Uid: (65534/ nobody) Gid: ( 1001/ admin) 

/etc/samba/smb.conf的相关部分:

 [test] comment = test path = /home/shares/test force user = nobody read only = No create mask = 0664 force create mode = 0664 directory mask = 02775 force directory mode = 02775 

这篇文章让我走上正轨,但是testparm发现了4个不正确的指令,所以我在这里共享固定配置。 在samba中,指定的指令越少,它就越好。

我遇到了同样的问题,但是像掩码指令这样的东西对我来说都不起作用(Samba 4.3.11):

  create mask = 0664 force create mode = 0664 directory mask = 02775 force directory mode = 02775 

有效的唯一选择是[全局]或共享部分:

  inherit permissions = yes 

只需根据需要更改所有文件夹和文件权限,以便将来的文件夹和文件将inheritance相同的权限。

从其他Unix / Linux / OSX / MacOS设备连接时存在一个非常类似的问题:除非您指定,否则将忽略所有设置

 [global] unix extensions = no 

并使用smb://而不是cifs://