gcr*_*ers 5 server permissions samba file-sharing shared-folders
使用适用于 Windows 10 客户端的 Samba 在 Linux 服务器 (Ubuntu) 上设置文件共享。最初在 7 年前在 Fedora 服务器上设置了这个环境,但我不确定我是否以最佳实践方式做到了这一点。我的问题是:对于Linux服务器上的共享目录,如何授予多个用户对该共享的完全权限,以便他们可以编辑/删除子目录和文件,无论他们是否创建(拥有)它们?例如,我有几个不同的用户组,他们可以访问其组共享目录,并具有这些目录的完全权限。在我的旧服务器上,我做了一个解决方案,我确信一定有更好的方法......我创建了一个通用的 Linux/Samba 用户,对每个组共享具有完全权限,然后通过 Windows 客户端上的登录脚本映射它们到该共享,就好像他们是通用用户一样(例如 public_user 访问公共共享)。它有效,但没有责任跟踪更改或新创建的文件或目录,因为一切都由通用用户拥有。这是我的第一个问题。任何帮助是极大的赞赏。
编辑 samba 配置文件。
sudo nano /etc/samba/smb.conf
Run Code Online (Sandbox Code Playgroud)
将其添加到文件末尾:
[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
Run Code Online (Sandbox Code Playgroud)
然后重新启动桑巴。
sudo service smbd restart
Run Code Online (Sandbox Code Playgroud)
笔记:
Public Directory在上面的示例中)是用户从其他系统访问共享文件夹时将看到的字符串。/home/user/directory-to-be-shared具有 666 和 777 权限。如果您在服务器上启用了防火墙,则需要为 tcp 打开端口 445。例如,如果使用ufw(不复杂的防火墙)来配置防火墙:
sudo ufw allow in 445/tcp
sudo ufw reload
sudo ufw status verbose
Run Code Online (Sandbox Code Playgroud)我不清楚您是否希望每个人都可以访问共享或仅一组客户端用户可以访问共享,因此这是后者的模板。
注意:只有当您的系统的默认 umask 为 0002 时,这才会按描述工作,因此它不适用于 Ubuntu Desktop 17/18,但适用于 Xubuntu Desktop 和 Ubuntu Server。
在此模板中,要求您想要访问的所有用户都成为“用户”组的成员。它将在共享目录和任何未来的子目录上分配 setgid 位,这会强制添加到其中的任何新内容继承其父文件夹的组。
sudo mkdir /path
sudo chown root:users /path
sudo chmod 2775 /path
Run Code Online (Sandbox Code Playgroud)
该共享将如下所示:
[UsersShare]
path = /path
valid users = @users
force group = users
read only = no
create mask = 0664
force directory mode = 2775
Run Code Online (Sandbox Code Playgroud)
当 bob - 成为“users”组的成员 - 使用他的 samba 用户名/密码登录并将文件添加到 [UsersShare] 共享时,它将拥有所有者 = bob、组 = 用户、模式 = 664 个文件 / 2775文件夹。
作为登录的用户组成员的所有其他客户端用户都将具有对 Bob 所做的任何操作的完全访问权限。
任何本地用户(服务器本身上的用户)添加或修改文件且同时也是用户组成员的文件都将具有相同的能力,并且新创建的文件/文件夹将具有相同的 664/2775 模式,并且所有文件/文件夹都将具有组: “用户”。所有这一切的一个例外是 root - 就像您使用 sudo 时一样 - 因为它的默认 umask 是 022,与普通用户不同,他的文件将继承“users”组,但模式为 644。
如果您确实想要一个每个人都可以访问的纯公共共享,请将“valid users = @users”替换为“guest ok = yes”。为了使其在服务器本地工作,您仍然需要将这些用户添加到“用户”组。