我无法让 samba 为创建的目录设置适当的权限

Zaz*_*Zaz 24 permissions samba file-sharing

我有一个使用 samba 共享一些文件夹的 ubuntu 服务器。当客户端创建新文件夹或文件时,权限不会根据 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
Run Code Online (Sandbox Code Playgroud)

当 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

Pan*_*her 21

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

# 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
Run Code Online (Sandbox Code Playgroud)

我正在寻找有关这些设置如何工作的很好的解释,但找不到比man smb.conf更好的方法

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

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


小智 11

我遇到了同样的问题,但是像掩码指令这样的所有内容对我都不起作用(Samba 4.3.11):

 create mask = 0664
 force create mode = 0664
 directory mask = 02775
 force directory mode = 02775
Run Code Online (Sandbox Code Playgroud)

唯一有效的选项是在 [global] 或 share 部分下:

 inherit permissions = yes
Run Code Online (Sandbox Code Playgroud)

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


小智 9

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

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

我强迫用户没有人,所以不同的人处理相同的文件不会相互干扰。

我在共享目录上设置了 chmod 2755,因此它继承了具有相同组“admin”的创建目录

$ chmod -R 2755 /home/shares/test
Run Code Online (Sandbox Code Playgroud)

检查一切是否正常:

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

/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
Run Code Online (Sandbox Code Playgroud)

这篇文章让我走上了正轨,但 testparm 显示了 4 个不正确的指令,所以我在这里分享固定配置。在 samba 中,您指定的指令越少,它的效果就越好。