如何配置 Samba、添加用户和组,并在各个文件夹中设置不同的权限

如何配置 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)能够读取、写入和浏览目录 1 中的任何内容 + 来宾有权读取和浏览此目录。

  • 我希望用户 5 + 用户 6(组 2)能够在目录 2 中读取、写入和导航,并且用户 3 + 用户 4(组 1)能够在其中读取和导航。

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

我尝试过像上面那样组织组,但我也尝试过关于目录的组配置。例如,管理员(用户 1 和用户 2)也位于组 1、组 2 等中。但这仍然无法按我想要的方式工作。

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

由于我三天来尝试了这么多想法,现在我觉得自己对 Samba 简直愚蠢至极。我读了这里的许多帖子、Arch Wiki、Debian Wiki、Samba 文档和一本旧手册,但关于 Samba 3,我会说我处于茫茫荒野之中,我所有的知识和在家的小实验都不足以在我的非政府组织中部署这样的服务器。

请问,如果您能提供建议、解决方案或适当的链接来解答这些问题,我将不胜感激。

先感谢您 !

答案1

我终于做到了,希望它能帮到别人。我不知道它是否好用,但它与 POSIX 权限配合得很好,没有丑陋的 ACL。

1]创建群组

$ sudo groupadd Group1
$ sudo groupadd ...

请注意,我没有创建管理员组,因为我的管理员用户将位于所有其他组中。这是迄今为止我使其工作的唯一方法。如果有人有更好的方法来处理例如具有任何权限的管理员组,请告诉我!我的解决方案是正确的,因为我管理着十几个帐户,而不是数百或数千个...

2]创建用户(出于安全原因,没有主文件夹并且无法使用 SSH)

$ sudo adduser --no-create-hom --shell /usr/sbin/nologin user1
$ sudo adduser --no-create-hom --shell /usr/sbin/nologin user...

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

$ sudo smbpasswd -a user1
$ sudo smbpasswd -e user1
$ ...

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

错误是:

$ sudo usermod -G user1 Group1
$ sudo usermod -G user1 Group2

如果你这样做:

$ groups user1

你有类似的东西:

user1 Group2

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

良好做法是:

$ sudo usermod -G Group1,Group2,Group3 user1

在这种情况下:

$ groups user1

将会呈现:

$ user1 Admin Group1 Group2 Group3

请谨慎区分主要组和次要组。一个用户可以属于多个次要组,但只能属于一个主要组。

因此另一个错误是:

$ sudo usermod -g Group1

如果你这样做:

$ groups user1

你得到了:

$ Group1

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

$ sudo mkdir /path/to/Directory1
$ sudo chown root:Group1 /path/to/Directory1
$ sudo chmod 2775 /path/to/Directory1

如果你对文件系统权限和 setuid、setgid 一无所知,请阅读此文:修改模式+setuid 和 setgid。权限和继承对于您的团体来说很重要。

5] 创建任意数量的目录并赋予所需的权限。

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

$ sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
$ sudo vim /etc/samba/smb.conf

此处的配置文件(包含全局配置和 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 !

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

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

    force create mode = 0665
    force directory mode = 2775

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

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

$ testparm

8] 一切都好吗?那么。

$ sudo systemctl start smbd.service # or restart
$ sudo systemctl enable smbd.service 

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

瞧!我希望它能对某些人有所帮助。

相关内容