服务器上共享目录的最佳实践(Samba Windows 10 客户端)

服务器上共享目录的最佳实践(Samba Windows 10 客户端)

使用 Samba 在 Linux 服务器(Ubuntu)上为 Windows 10 客户端设置文件共享。最初 7 年前在 Fedora 服务器上设置了这个环境,但我不确定我是否以最佳实践的方式进行了设置。我的问题是:对于 Linux 服务器上的共享目录,如何向多个用户授予该共享的完全权限,以便他们可以编辑/删除子目录和文件,无论他们是否创建(拥有)这些目录和文件?例如,我有几个不同的用户组,他们将有权访问他们组的共享目录,并拥有这些目录中的完全权限。在我的旧服务器上,我做了一个变通方法,我相信一定有更好的方法......我创建了一个通用的 Linux/Samba 用户,对每个组共享都具有完全权限,然后通过 Windows 客户端上的登录脚本将他们映射到该共享,就好像他们是通用用户一样(例如,public_user 访问公共共享)。它有效,但没有责任跟踪更改或新创建的文件或目录,因为所有内容都归通用用户所有。这是我在这里的第一个问题。任何帮助都非常感谢。

答案1

编辑 samba 配置文件。

sudo nano /etc/samba/smb.conf

将其添加到文件末尾:

[Public Directory]
comment = Contents are read/write by all.
path = /home/user/directory-to-be-shared
read only = no
guest ok = yes
create mask = 0666
force create mode = 0666
directory mask = 0777
force directory mode = 0777

然后重新启动 samba。

sudo service smbd restart

笔记:

  1. 括号内的字符串(Public Directory在上面的例子中)是用户从其他系统访问共享文件夹时将看到的内容。
  2. 其他系统上的用户在此目录内创建的文件将归 nobody:nogroup 所有,并拥有所有者、组和其他人读写的权限。
  3. 其他系统上的用户在此目录中创建的目录将归 nobody:nogroup 所有,并对其所有者、组和其他人具有读取、写入和目录遍历权限。
  4. 配置文件中的掩码和模式适用于其他系统上的用户创建的文件和目录。以服务器上的用户身份创建文件时,这些掩码和模式将被忽略。或者换句话说,如果您是服务器上的用户,请确保您创建的每个文件和目录分别/home/user/directory-to-be-shared具有 666 和 777 权限。
  5. 如果您在服务器上启用了防火墙,则需要为 TCP 打开端口 445。例如,如果您使用ufw(简单防火墙)配置防火墙:

    sudo ufw allow in 445/tcp
    sudo ufw reload
    sudo ufw status verbose
    

答案2

我不清楚您是否希望每个人都可以访问共享,还是只希望一组客户端用户可以访问共享,因此这是后者的模板。

笔记仅当系统的默认 umask 为 0002 时,它才会按描述工作,因此它不适用于 Ubuntu Desktop 17/18,但适用于 Xubuntu Desktop 和 Ubuntu Server。

在此模板中,要求您希望所有用户都拥有访问权限,成为“用户”组的成员。它将在共享目录和任何未来的子目录上分配 setgid 位,从而强制执行任何操作新的添加到它们以继承其父文件夹的组。

sudo mkdir /path
sudo chown root:users /path
sudo chmod 2775 /path

分享看起来是这样的:

[UsersShare]
path = /path
valid users = @users
force group = users
read only = no
create mask = 0664
force directory mode = 2775

当 bob(成为“用户”组的成员)使用其 samba 用户名/密码登录并将文件添加到 [UsersShare] 共享时,该文件的所有者为 bob,组为用户,模式为 664 个文件/2775 个文件夹。

属于用户组成员的所有其他客户端用户只要登录,便可以完全访问 bob 所做的一切。

任何本地用户(即服务器上的用户)添加或修改文件,并且属于用户组的成员,都将具有相同的能力,并且新创建的文件/文件夹将具有相同的 664/2775 模式,并且所有文件/文件夹都将具有组:“用户”。所有这一切的唯一例外是 root(例如当您使用 sudo 时),因为它的默认 umask 是 022,与普通用户不同,他的文件将继承“用户”组,但模式为 644。

如果您确实想要一个纯公共共享,让每个人都可以访问,请将“有效用户 = @users”替换为“guest ok = yes”。要使此功能在服务器上本地运行,您仍需要将这些用户添加到“用户”组。

相关内容