如何配置samba,添加用户和组,在各个文件夹中具有不同的权限

jau*_*erg 1 linux samba

我正在尝试在 Debian 9 上使用 Samba 4.5.x 实现服务器。Samba 服务器应可从 Mac OS X 和 Windows 访问。

这是事情。

我有这些组(也许是我的错误?):

  • 管理员(用户 1 + 用户 2)
  • 组 1(用户 3 + 用户 4)
  • 组 2(用户 5 + 用户 6)
  • 组 3(用户 7 + 用户 8)

我有这些目录:

  • 目录 1
  • 目录 2
  • 目录 3

    • 用户子目录7
    • 用户子目录8

我想有:

  • 用户 1 + 用户 2(管理员)可以读取、写入和浏览所有目录中的任何文件夹。

  • 我希望用户 3 + 用户 4(组 1)能够读取、写入和导航 Directory1 + 访客中的任何内容,以便有权在此目录中读取和导航。

  • 我希望用户 5 + 用户 6 (Group2) 能够在 Directory2 中读取、写入和导航,而用户 3 + 用户 4 (Group1) 能够在其中读取和导航。

  • 我尝试让用户 7 + 用户 8(组 3)能够在 Directory3 中读取和导航,但只能在他们自己的 SubDirectoryOfUserN7 和 SubDirectoryOfUser8 中写入,用户 5 + 用户 6(组 2)应该能够读取、写入和在 Directory3 + SubDirectoryOfUserS 中导航。

我试图像上面那样组织组,但我也尝试了关于目录的组配置。例如管理员,用户 1 和用户 2 也在 Group1、Group2 等中。但它仍然无法正常工作。

我也尝试过处理 ACL。但是我仍然不知道应该在我的 smb.conf 中放入什么来读取/写入列表和创建 / 目录掩码。我不知道如何正确组织我的组以将它们链接到目录。我也不知道如何处理 Directory3 中的嵌套目录。

自从 3 天以来我尝试了很多想法,我现在对 Samba 感到非常愚蠢。我在这里阅读了很多主题,Arch Wiki、Debian Wiki、Samba 文档和旧手册,但是关于 Samba 3,我会说我在沙漠中,我在家中的所有知识和小实验都不足以部署我的非政府组织中有这样的服务器。

请,如果您有可以回答这些情况的建议、解决方案或适当的链接,我将不胜感激。

先感谢您 !

jau*_*erg 5

我终于成功了,如果它可以帮助某人。我不知道它是否很好,但它在 POSIX 权限下运行良好,没有丑陋的 ACL。

1]创建组

$ sudo groupadd Group1
$ sudo groupadd ...
Run Code Online (Sandbox Code Playgroud)

请注意我没有创建管理员组,因为我的管理员用户将在所有其他组中。到目前为止,这是我让它工作的唯一方法。如果有人有更好的方法来处理例如具有任何权限的管理员组,请告诉我!我的解决方案是正确的,因为我管理着十几个帐户,但不是成百上千……

2] 创建用户(出于安全原因,没有主文件夹和使用 SSH 的能力)

$ sudo adduser --no-create-hom --shell /usr/sbin/nologin user1
$ sudo adduser --no-create-hom --shell /usr/sbin/nologin user...
Run Code Online (Sandbox Code Playgroud)

3] 在 smbpasswd 数据库中添加用户。请注意我必须添加它们的事实,而且还要使它们能够避免任何类型的问题。

$ sudo smbpasswd -a user1
$ sudo smbpasswd -e user1
$ ...
Run Code Online (Sandbox Code Playgroud)

4] 将用户添加到他们所在的组。请注意,我认为 samba 无法识别次要组,但实际上确实可以。错误是滥用命令行。

错误是:

$ sudo usermod -G user1 Group1
$ sudo usermod -G user1 Group2
Run Code Online (Sandbox Code Playgroud)

如果你这样做:

$ groups user1
Run Code Online (Sandbox Code Playgroud)

你有这样的事情:

user1 Group2
Run Code Online (Sandbox Code Playgroud)

因为次要群体已经消失了。

好的做法是:

$ sudo usermod -G Group1,Group2,Group3 user1
Run Code Online (Sandbox Code Playgroud)

在这种情况下:

$ groups user1
Run Code Online (Sandbox Code Playgroud)

将会呈现:

$ user1 Admin Group1 Group2 Group3
Run Code Online (Sandbox Code Playgroud)

请注意主要和次要群体。一个用户可以在多个次要组中,但只能在一个主要组中。

所以另一个错误是:

$ sudo usermod -g Group1
Run Code Online (Sandbox Code Playgroud)

如果你这样做:

$ groups user1
Run Code Online (Sandbox Code Playgroud)

你得到了:

$ Group1
Run Code Online (Sandbox Code Playgroud)

4]创建具有良好权限的文件夹:

$ sudo mkdir /path/to/Directory1
$ sudo chown root:Group1 /path/to/Directory1
$ sudo chmod 2775 /path/to/Directory1
Run Code Online (Sandbox Code Playgroud)

如果您对文件系统权限和 setuid、setgid 一无所知,请阅读本文:chmod + setuid 和 setgid。权限和继承对您的组很重要。

5]使用所需的权限创建任意数量的目录。

6] 使用您选择的编辑器配置您的 smb.conf 文件。我个人使用vim。在丢失任何运行良好的东西之前先进行备份。

$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
$ sudo vim /etc/samba/smb.conf
Run Code Online (Sandbox Code Playgroud)

你的配置文件在这里,全局配置和 Directory1 配置是:

[global]

     workgroup = YOUR-LOCAL-WORKGROUP
     server string = %h # hostname
     log file = /var/samba/smb-%h.log
     max log size = 1000
     disable netbios = yes # since this is a standalone server
     server role = standalone server
     veto files = /*.exe/*.com/*.dll/*.bat/*.vbs/*.tmp/ # whatever your want
     delete veto files = yes

[Directory1]

     path = /path/to/Directory1
     browseable = yes
     guest only = no
     guest ok = yes
     read list = nobody guest
     write list = @Group1
     force create mode = 0665 # please see system file permissions ...
     force directory mode = 2775 # ... and setuid, setgid, right above !
Run Code Online (Sandbox Code Playgroud)

请注意,执行对您的用户很重要。这允许他们浏览目录。但是执行对于文件也是一种危险。您不希望您的用户执行脚本或其他任何内容,阅读已足够广泛。

这就是为什么我限制用户读取和写入文件以及匿名读取文件,而我允许在目录上执行以进行导航。执行文件夹不是危险,但执行文件是。

    force create mode = 0665
    force directory mode = 2775
Run Code Online (Sandbox Code Playgroud)

请注意这些选项delete veto fileveto files这也是另一个屏蔽,因为您不希望愚蠢的 Windows Mac OS X 用户将 blob 或二进制文件或可执行的随机软件放在干净的服务器上。

7]使用温和的命令测试您的配置文件:

$ testparm
Run Code Online (Sandbox Code Playgroud)

8] 一切都好吗?然后。

$ sudo systemctl start smbd.service # or restart
$ sudo systemctl enable smbd.service 
Run Code Online (Sandbox Code Playgroud)

现在,您可以使用您选择的方法登录,并看到匿名用户可以在没有写入权限的情况下浏览服务器上的文件,而经过身份验证和指定的用户可以读取、写入和执行——即从一个目录导航到一个目录。

等等!我希望它会帮助某人。