在 CentOS 8/RHEL 8 上设置 Samba 服务器以进行文件共享

在本教程中,我们将学习如何在 CentOS 8/RHEL8 上安装和配置 samba 服务器以在本地网络上共享文件。 Samba 是一种用于 Unix 和 Linux 的免费开源 SMB/CIFS 协议实现,允许在局域网中的 Linux、Windows 和 macOS 机器之间共享文件和打印。

Samba 通常安装并运行在 Linux 上。 它包括几个服务于不同但相关目的的程序,其中最重要的两个是:

  • smbd: 提供 SMB/CIFS 服务(文件共享和打印),也可以作为 Windows 域控制器。
  • nmbd:此守护进程提供 NetBIOS 名称服务,侦听名称服务器请求。 它还允许网络上的其他计算机找到 Samba 服务器。

如何在 CentOS 8/RHEL8 上安装 Samba 服务器

Samba 包含在大多数 Linux 发行版中。 要在 CentOS 8/RHEL8 上安装 Samba,请在终端中运行以下命令。

sudo dnf install samba

要检查您的 Samba 版本,请运行

smbd --version

示例输出:

Version 4.10.4

然后发出以下命令启动 smbdnmbd 服务。

sudo systemctl start smb nmb 

在启动时启用自动启动。

sudo systemctl enable smb nmb

要检查 Samba 服务是否正在运行,请发出以下命令。

systemctl status smb nmb

一旦开始, smb 守护进程将监听 TCP 端口 139 和 445。 nmbd 将侦听 UDP 端口 137 和 138。

  • TCP 139:用于文件和打印机共享等操作。
  • TCP 445:无 NetBIOS 的 CIFS 端口。
  • UDP 137:用于 NetBIOS 网络浏览。
  • UDP 138:用于 NetBIOS 名称服务。

运行以下命令在防火墙中打开上述端口。

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

重新加载防火墙守护进程以使更改生效。

sudo systemctl reload firewalld

创建私有 Samba 共享

在本节中,我们将看到如何创建需要客户端输入用户名和密码才能获得访问权限的私有 Samba 共享。 主要的 Samba 配置文件位于: /etc/samba/smb.conf. 您可以使用命令行文本编辑器在终端中编辑它,例如 nano.

sudo nano /etc/samba/smb.conf

默认情况下,有 4 个部分:

  • 全球的
  • 打印机
  • 打印$

在里面 [global] 部分, workgroup 默认设置为 SAMBA。

workgroup = SAMBA

确保值 workgroup 与 Windows 计算机的工作组设置相同。 您可以通过以下方式在 Windows 计算机上找到该设置 Control Panel > System and Security > System.

在本文中,我将使用 Windows 默认工作组名称。

workgroup = WORKGROUP

建议使用 hosts allow 参数来创建IP地址白名单以防止未经授权的访问。 在以下行中添加 [global] 部分,这将允许本地主机和客户端 192.168.0.0/24 网络访问 Samba 服务。 如果您使用不同的网络范围,请更换 192.168.0 用你自己的。

hosts allow = 127. 192.168.0

提示:您还可以对网络范围使用 CIDR 表示法,例如 hosts allow = 127.0.0.1 192.168.0.0/24

然后向下滚动到文件底部。 (在 nano 文本编辑器中,您可以通过按 CTRL+W 然后 CTRL+V. ) 添加如下所示的新部分。

[Private]         comment = needs username and password to access         path = /srv/samba/private/         browseable = yes         guest ok = no         writable = yes         valid users = @samba 

在哪里:

  • Private 是将在 Windows 计算机上显示的文件夹名称。 您可以使用任何您喜欢的名称。
  • 注释是对共享文件夹的描述。
  • path 参数指定共享文件夹的路径。 我用 /srv/samba/private/ 举个例子。
  • browseable = yes: 允许网络中的其他计算机看到 Samba 服务器和 Samba 共享。 如果设置为 no,用户必须知道 Samba 服务器的名称,然后在文件管理器中手动输入路径才能访问共享文件夹。
  • guest ok = no:禁用访客访问。 换句话说,您需要在客户端计算机上输入用户名和密码才能访问共享文件夹。
  • writable = yes: 授予客户端读写权限。
  • valid users = @samba:只允许 samba 组中的用户访问此 Samba 共享。

Save 和 close 文件。 (要将文件保存在 nano 文本编辑器中,请按 Ctrl+O,然后按 Enter 确认要写入的文件名。 到 close 文件,按 Ctrl+X.) 现在我们需要创建一个 Samba 用户。 首先,我们需要使用以下命令创建一个标准的 Linux 用户帐户。 代替 username 使用您想要的用户名。

sudo adduser username

系统将提示您设置 Unix 密码。 之后,您还需要使用以下命令为新用户设置单独的 Samba 密码:

sudo smbpasswd -a username

创建 samba 团体。

sudo groupadd samba

并将此用户添加到 samba 团体。

sudo gpasswd -a username samba

创建私有共享文件夹。

sudo mkdir -p /srv/samba/private/

samba 组需要对共享文件夹具有读、写和执行权限。 您可以通过执行以下命令来授予这些权限。

sudo setfacl -R -m "g:samba:rwx" /srv/samba/private/

我们还需要标记这个目录 samba_share_t 以便 SELinux 允许 Samba 对其进行读写。

sudo chcon -t samba_share_t /srv/samba/private/ -R

接下来运行以下命令以检查是否存在语法错误。

testparm

Samba 配置文件每分钟自动重新加载,如果它们发生变化。 可以手动重启 smbdnmbd 守护程序使更改立即生效。

sudo systemctl restart smb nmb

如何在没有身份验证的情况下创建 Samba 公共共享

要创建不需要用户名和密码的公共共享,必须满足以下条件。

  • security = user 在 Samba 配置文件的全局部分。
  • map to guest = bad user 在 Samba 配置文件的全局部分。 这会导致 smbd 使用访客帐户来验证没有在 Samba 服务器上注册帐户的客户端。 由于它是访客帐户,Samba 客户端不需要输入密码。
  • guest ok = yes 在共享定义中以允许访客访问。
  • 授予公用文件夹的读、写和执行权限 nobody 帐户,这是默认的访客帐户。

打开并编辑 Samba 配置文件。

sudo nano /etc/samba/smb.conf

在里面 [global] 部分,确保值 workgroup 与 Windows 计算机的工作组设置相同。

workgroup = WORKGROUP

您可以通过以下方式在 Windows 计算机上找到该设置 Control Panel > System and Security > System.