网站搜索

设置 Samba 并配置 FirewallD 和 SELinux 以允许在 Linux/Windows 客户端上共享文件 - 第 6 部分


由于计算机很少作为孤立的系统工作,因此作为系统管理员或工程师,您应该知道如何设置和维护具有多种类型服务器的网络。

在本文和本系列的下一篇文章中,我们将分别介绍使用 Windows/Linux 和 Linux 客户端设置 SambaNFS 服务器的基本知识。

如果您需要在可能会发现不同操作系统和设备类型的公司或企业环境中设置文件服务器,那么本文肯定会派上用场。

由于您可以在 Internet 上阅读有关 Samba 和 NFS 的背景和技术方面的信息,因此在本文和下一篇文章中,我们将直接切入主题。

第1步:安装Samba服务器

我们当前的测试环境由两台 RHEL 7 机器 和一台 Windows 8 机器组成,顺序如下:


1. Samba / NFS server [box1 (RHEL 7): 192.168.0.18], 
2. Samba client #1 [box2 (RHEL 7): 192.168.0.20]
3. Samba client #2 [Windows 8 machine: 192.168.0.106]

box1 上,安装以下软件包:


yum update && yum install samba samba-client samba-common

box2 上:


yum update && yum install samba samba-client samba-common cifs-utils

安装完成后,我们就可以配置我们的共享了。

第 2 步:通过 Samba 设置文件共享

Samba 如此重要的原因之一是它为 SMB/CIFS 客户端提供文件和打印服务,这使得这些客户端将服务器视为一台服务器。 Windows 系统(我必须承认,在撰写这个主题时,我往往会有点情绪化,因为这是我几年前作为新 Linux 系统管理员的第一次设置)。

添加系统用户并设置权限和所有权

为了允许群组协作,我们将使用 useradd 命令创建一个名为 finance 的群组,其中包含两个用户(user1user2)和一个目录 >/financebox1 中。

我们还要将此目录的组所有者更改为finance,并将其权限设置为0770(所有者和组所有者的读、写和执行权限):


groupadd finance
useradd user1
useradd user2
usermod -a -G finance user1
usermod -a -G finance user2
mkdir /finance
chmod 0770 /finance
chgrp finance /finance

步骤 3:配置 SELinux 和 Firewalld

在准备将 /finance 配置为 Samba 共享时,我们需要禁用 SELinux 或设置正确的 布尔值 和安全上下文值,如下所示(否则,SELinux 将阻止客户端访问共享):


setsebool -P samba_export_all_ro=1 samba_export_all_rw=1
getsebool –a | grep samba_export
semanage fcontext –at samba_share_t "/finance(/.*)?"
restorecon /finance

此外,我们必须确保firewalld 允许Samba 流量。


firewall-cmd --permanent --add-service=samba
firewall-cmd --reload

步骤 4:配置 Samba 共享

现在是时候深入研究配置文件 /etc/samba/smb.conf 并添加我们的共享部分:我们希望 finance 组的成员能够浏览/finance的内容,并保存/,在其中创建文件或子目录(默认情况下,其权限位设置为0770 finance 将是他们的群组所有者):


[finance]
comment=Directory for collaboration of the company's finance team
browsable=yes
path=/finance
public=no
valid users=@finance
write list=@finance
writeable=yes
create mask=0770
Force create mode=0770
force group=finance

保存文件,然后使用 testparm 实用程序对其进行测试。如果有任何错误,以下命令的输出将指示您需要修复的内容。否则,它将显示您的 Samba 服务器配置的审查:

如果您想添加另一个向公众开放的共享(意味着无需任何身份验证),请在 /etc/samba/smb.conf 中创建另一个部分,并在新共享的名称下复制上面的部分,仅将 public=no 更改为 public=yes 并且不包括有效用户和写入列表指令。

第5步:添加Samba用户

接下来,您需要将 user1user2 添加为 Samba 用户。为此,您将使用 smbpasswd 命令,该命令与 Samba 的内部数据库进行交互。系统将提示您输入稍后用于连接共享的密码:


smbpasswd -a user1
smbpasswd -a user2

最后,重新启动Samba,使服务在启动时启动,并确保共享实际上可供网络客户端使用:


systemctl start smb
systemctl enable smb
smbclient -L localhost –U user1
smbclient -L localhost –U user2

至此,Samba文件服务器已经正确安装和配置。现在是时候在我们的 RHEL 7Windows 8 客户端上测试此设置了。

步骤6:在Linux中挂载Samba共享

首先,确保可以从此客户端访问 Samba 共享:


smbclient –L 192.168.0.18 -U user2

(对用户1重复上述命令)

与任何其他存储介质一样,您可以在需要时装载(然后卸载)此网络共享:


mount //192.168.0.18/finance /media/samba -o username=user1

(其中 /media/samba 是现有目录)

或者永久地,通过在 /etc/fstab 文件中添加以下条目:


//192.168.0.18/finance /media/samba cifs credentials=/media/samba/.smbcredentials,defaults 0 0

其中隐藏文件 /media/samba/.smbcredentials(其权限和所有权已分别设置为 600root:root)包含两行指示允许使用共享的帐户的用户名和密码:


username=user1
password=PasswordForUser1

最后,让我们在 /finance 中创建一个文件并检查权限和所有权:


touch /media/samba/FileCreatedInRHELClient.txt

如您所见,该文件是在 0770 权限和所有权设置为 user1:finance 的情况下创建的。

步骤7:在Windows中挂载Samba共享

要在 Windows 中挂载 Samba 共享,请转到我的电脑并选择计算机,然后选择映射网络驱动器。接下来,为要映射的驱动器分配一个字母,并选中使用不同的凭据进行连接(下面的屏幕截图是我的母语西班牙语):

最后,让我们创建一个文件并检查权限和所有权:


ls -l /finance

这次该文件属于 user2,因为这是我们用来从 Windows 客户端连接的帐户。

概括

在本文中,我们不仅解释了如何设置Samba服务器和两个使用不同操作系统的客户端,还解释了如何在服务器上配置firewalld和SELinux以实现所需的群组协作功能。

最后但并非最不重要的一点是,我建议您阅读 smb.conf 的在线手册页,以探索可能比本文描述的场景更适合您的情况的其他配置指令。

与往常一样,如果您有任何意见或建议,请随时使用下面的表格发表评论。