测试组文件共享
客户端系统现在应该能够以 user1 或者 user2 的身份挂载 samba 文件共享。
这两个用户都应该能够修改相同的文件,因为它们将由 group1 拥有。
首先作为 user1,让我们从服务器挂载 /groupshare 目录并创建包含一些内容的“共享文件”。
[jack@onitroad ~]# mount //192.168.0.200/groupshare /mnt -o username=user1 Password for jack@onitroad//192.168.0.200/groupshare: [jack@onitroad ~]# echo user1 > /mnt/shared-file
现在完成了,这次我们将卸载并重新挂载为 user2,并向文件添加更多内容。
[jack@onitroad ~]# umount /mnt [jack@onitroad ~]# mount //192.168.0.200/groupshare /mnt -o username=user2 Password for jack@onitroad//192.168.0.200/groupshare: [jack@onitroad ~]# echo user2 >> /mnt/shared-file
现在在服务器上我们可以检查这个共享文件文件并看到它已正确设置为 660 的权限,允许 group1 组按预期进行读写访问。
我们还将看到它包含来自 user1 和 user2 的内容,确认这两个用户都能够修改 samba 共享中的文件。
[jack@onitroad ~]# ls -la /groupshare/shared-file -rw-rw----. 1 user1 group1 12 Jan 22 03:19 /groupshare/shared-file [jack@onitroad ~]# cat /groupshare/shared-file user1 user2
Samba 是服务器消息块 (SMB) 和通用 Internet 文件系统 (CIFS) 协议的开源实现,它允许我们从 Linux 访问 Windows 文件共享资源。
使用 Samba,我们可以通过网络将文件系统中的特定目录导出到其他 Windows 或者 Linux 客户端,从而允许我们通过网络在不同操作系统之间共享各种文件。
在这里,我们将介绍设置允许组协作的 samba 文件共享。
特定组中的用户将能够在 samba 共享中创建内容,同一组中的其他用户将能够访问和修改这些内容。
Samba 客户端配置
现在服务器已准备好接受 SMB 连接,我们需要准备客户端。
首先安装 samba-client 包和用于挂载 SMB 共享的 cifs-utils。
yum install samba-client cifs-utils -y
接下来通过允许 samba-client 服务来修改防火墙。
firewall-cmd --permanent --add-service=samba-client firewall-cmd --reload
Samba 服务器配置
基本的 Samba 服务器设置
具有要共享数据的服务器将充当 samba 服务器并需要安装 samba 包。
yum install samba -y
安装后,我们可以启用我们的 Samba 服务器在启动时自动启动所需的 SMB 服务,我们现在也将启动该服务,因为它在安装后默认情况下未运行。
我们还使用 NMB 服务执行此操作,该服务负责 NetBIOS 并且是 samba 包的一部分。
systemctl enable smb nmb systemctl start smb nmb
有关使用 systemctl 进行基本服务管理的更多信息,请参阅此处的教程。
接下来必须配置防火墙以正确允许 SMB 流量通过,这可以使用 firewalld 完成,如下所示。
此更改将允许 TCP 端口 135/445 SMB/CIFS 流量从任何源 IP 地址进入服务器。
防火墙配置也必须重新加载,因为我们已经制定了一个永久规则,该规则不适用于正在运行的配置。
firewall-cmd --permanent --add-service=samba firewall-cmd --reload
配置组共享
接下来我们需要在我们的服务器上配置 samba 和组共享。
让我们从创建一个组和两个用户开始,在这种情况下,group1 将是我们两个用户所在的组。
[jack@onitroad ~]# groupadd group1 [jack@onitroad ~]# useradd -s /sbin/nologin -G group1 user1 [jack@onitroad ~]# useradd -s /sbin/nologin -G group1 user2
这两个用户不会用于直接登录系统,这就是指定 /sbin/nologin shell 的原因,他们只是 SMB 用户。
这是通过使用 smbpasswd 设置他们的密码来完成的,如下所示。
[jack@onitroad ~]# smbpasswd -a user1 New SMB password: Retype new SMB password: Added user user1. [jack@onitroad ~]# smbpasswd -a user2 New SMB password: Retype new SMB password: Added user user2.
现在让我们准备要共享到组的目录,我们将从服务器共享 /groupshare。
[jack@onitroad ~]# mkdir /groupshare [jack@onitroad ~]# chown root:group1 /groupshare [jack@onitroad ~]# chmod 2770 /groupshare
我们已将 /groupshare 目录的组设置为由我们新创建的 group1 拥有。
权限已设置为 2770,其中前 2 表示 SetGID,而 770 是标准权限。
SetGID 用于将在 /groupshare 中创建的文件和目录组设置为在 /groupshare 目录本身上设置的同一组。
由于 /groupshare 归 group1 所有,因此在 /groupshare 中创建的任何文件或者目录都归组协作所需的 group1 组所有。
这将显示为“s”,其中“x”权限通常在组的目录中找到。
如果该组没有“x”权限,则“s”将显示为“S”。
[jack@onitroad ~]# ls -la /groupshare/ total 4 drwxrws---. 2 root group1 6 Jan 22 02:55 .
接下来我们需要配置 SELinux,一个目录需要 samba_share_t 上下文才能与 samba 共享。
[jack@onitroad ~]# semanage fcontext -a -t samba_share_t "/groupshare(/.*)?" [jack@onitroad ~]# restorecon -v /groupshare/ restorecon reset /groupshare context unconfined_u:object_r:default_t:s0->unconfined_u:object_r:samba_share_t:s0
最后我们需要在/etc/samba/smb.conf配置文件中实际定义组文件共享,我们在这个文件中添加了以下内容。
[groupshare] create mask = 0660 force create mode = 0660 comment = This allows us to share the /groupshare directory to group1 path = /groupshare valid users = @group1 writable = yes
“创建掩码”和“强制创建模式”确保当 group1 中的用户创建新文件时,权限将设置为 660。
默认情况下,文件使用 644 创建,以防止组的其他成员写入文件. “有效用户”指定我们的组 1,组使用“@”前缀指定。
要应用这些更改,请重新启动或者重新加载 smb 服务。
[jack@onitroad ~]# systemctl restart smb
示例环境
这是我们将要测试的服务器列表,它们都运行 CentOS 7.
- Samba 客户端:192.168.0.100 - 此 Linux 客户端将从 SMB/CIFS 服务器挂载一个目录。
- Samba 服务器:192.168.0.200 - 此 Linux 服务器将通过 SMB/CIFS 为客户端提供一个目录。