如何在 Fedora 或 CentOS 上使用 Samba 共享目录
如今,在家庭或许多工作场所,跨不同计算机共享数据已不是什么新鲜事。顺应这一趋势,现代操作系统可以轻松地通过网络文件系统在计算机之间透明地共享和交换数据。如果您的工作环境混合使用 Microsoft Windows 和 Linux 计算机,则在它们之间共享文件和文件夹的一种方法是通过 SMB/CIFS(一种跨平台网络文件共享协议)。 Windows Microsoft 原生支持 SMB/CIFS,而 Linux 在 Samba 中提供 SMB/CIFS 网络协议的免费软件实现。
在本文中,我们将演示如何使用 Samba 共享目录。我们将使用的Linux平台是Fedora或CentOS。本文分为四个部分。首先,我们将在Fedora/CentOS环境下安装Samba。接下来,我们讨论如何调整 SELinux 和防火墙配置以允许与 Samba 共享文件。最后,我们介绍如何启用 Samba 共享目录。
第一步:在 Fedora 或 CentOS 上安装 Samba
首先第一件事。让我们安装 Samba 并配置基本设置。
通过运行以下命令检查您的系统上是否已安装 Samba 应用程序:
$ rpm -q samba samba-common samba-client
如果上面的命令没有显示任何内容,则说明 Samba 尚未安装。在这种情况下,请使用以下命令安装 Samba。
$ sudo yum install samba samba-common samba-client
接下来,创建一个将通过网络共享数据的本地目录。该目录将作为 Samba 共享导出到远程用户。在本教程中,我们将在顶级目录 /shared
中创建此目录,因此请确保您具有执行此操作的权限。
$ sudo mkdir /shared
如果您想在主目录中创建共享目录(例如 $HOME/shared
),则必须在 SELinux 选项中激活 Samba 主目录共享,这将在下面更详细地描述。
创建/shared
目录后,设置该目录的权限,以便其他用户可以访问它。
$ sudo chmod o+rw /shared
如果您不希望其他用户能够写入该目录,只需删除 chmod
命令中的 w
选项即可,如下所示。
$ sudo chmod o+r /shared
接下来,创建一个空文件作为测试。该文件将用于验证 Samba 共享是否已正确安装。
$ sudo touch /shared/file1
第二步:为 Samba 配置 SELinux
接下来,我们需要重新配置 Fedora 和 CentOS 发行版中默认启用的 SELinux。仅当文件或目录具有正确的安全上下文(例如,标有 samba_share_t 属性)时,SELinux 才允许 Samba 读取和修改文件或目录。
以下命令将必要的标签添加到文件上下文配置中:
$ sudo semanage fcontext -a -t samba_share_t "<directory>(/.*)?"
将 <directory>
替换为我们之前为 Samba 共享创建的本地目录(例如 /shared
):
$ sudo semanage fcontext -a -t samba_share_t "/shared(/.*)?"
要激活标签更改,我们必须运行 restorecon
命令,如下所示。
$ sudo restorecon -R -v /shared

要通过 Samba 共享主目录中的目录,我们必须在 SELinux 中启用共享主目录选项,因为默认情况下该选项是禁用的。下面的命令可以达到预期的效果。如果您不共享主目录,请跳过此步骤。
$ sudo setsebool -P samba_enable_home_dirs 1
第三步:为 Samba 配置防火墙
下一步是在防火墙设置中打开必要的 TCP/UDP 端口,以便 Samba 运行。
如果您使用 firewalld
(例如,在 Fedora 或 CentOS 7 或更高版本上),以下命令将负责 Samba 服务的永久防火墙规则更改。
$ sudo firewall-cmd --permanent --add-service=samba
如果您的防火墙使用 iptables(例如 CentOS 6 或更早版本),请使用以下命令向外界开放必要的 Samba 端口。
$ sudo vi /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 445 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
然后重启 iptables 服务:
$ sudo service iptables restart
第四步:更改 Samba 配置
最后一步是配置 Samba 将创建的本地目录导出为 Samba 共享。
使用文本编辑器打开 Samba 配置文件,并在文件底部添加以下行。
$ sudo nano /etc/samba/smb.conf
[myshare]
comment=my shared files
path=/shared
public=yes
writeable=yes
在上面的一对括号内的文本(例如,myshare
)是 Samba 共享资源的名称,它将用于从远程主机访问 Samba 共享。
创建挂载和导出 Samba 文件系统所需的 Samba 用户帐户。要创建 Samba 用户,请使用 smbpasswd 工具。请注意,Samba 用户帐户必须与任何现有 Linux 用户相同。如果您尝试使用 smbpasswd 添加不存在的用户,则会给出错误消息。
如果您不想使用任何现有的 Linux 用户作为 Samba 用户,您可以在系统中创建一个新的专用用户。为了安全起见,请将新用户的登录 shell 设置为 /sbin/nologin
,并且不要创建其主目录。
在此示例中,我们将创建一个名为 sambaguest 的新用户,如下所示。
$ sudo useradd -M -s /sbin/nologin sambaguest
$ sudo passwd sambaguest

创建新用户后,使用 smbpasswd 命令将该用户添加为 Samba 用户。当此命令要求输入密码时,您可以键入与用户密码不同的密码。
$ sudo smbpasswd -a sambaguest
4. 激活Samba服务,并检查Samba服务是否正在运行。
$ sudo systemctl enable smb.service
$ sudo systemctl start smb.service
$ sudo systemctl is-active smb

要查看 Samba 中的共享目录列表,请键入以下命令。
$ smbclient -U sambaguest -L localhost

以下是在 Thunar 文件管理器上访问 Samba 共享目录并对 file1 进行复制粘贴的屏幕截图。请注意,Samba 共享可通过 Thunar 上的 smb://
地址访问。
