什么是桑巴?
在开始安装之前,让我们先了解什么是 Samba 以及如何使用它。 Samba 是一个免费的开源软件,它允许在 Windows 和 Linux 系统之间简单轻松地共享文件。 确切地说,它是 SMB/CIFS 协议的开源实现。
(SMB) 服务器消息块协议是一种客户端-服务器通信协议,用于共享对网络上的文件、打印机、串行端口和其他资源的访问。 (CIFS) 通用 Internet 文件系统协议是 SMB 协议的方言。 描述协议的不同变体的消息包的集合称为方言。
简而言之,在使用 Samba 时,我们可以在 Linux/Unix 服务器和 Windows 客户端之间共享文件和打印服务、使用身份验证和授权、名称解析以及服务公告。
使用 Samba 可以完成五个基本任务。
- 我们可以与 Windows 机器共享一个 Linux 驱动器。
- 我们可以使用 Linux 机器访问 SMB 共享。
- 我们可以与 Windows 机器共享一台 Linux 打印机。
- 我们可以与 Linux 机器共享一台 Windows 打印机。
- 我们可以在 Unix/Linux 服务器上设置域控制器并将 Windows 客户端集成到域控制器。
Samba 还可以充当域控制器或常规域成员。 如果您拥有包含 Windows 和 Linux 计算机的混合网络环境,则此选项使 Samba 几乎成为必备工具。
先决条件
- 为了安装 Samba,我们需要以具有以下权限的用户身份登录到我们的 Linux 服务器 sudo 权限,或作为 root 用户。
- 为了简化本教程中的步骤,我们将使用 root 用户。 如果您决定继续并以您的用户身份安装软件(使用 sudo 权限),不要忘记输入“sudo” 命令在每个命令的开头。
- 我们还需要一台 Windows 计算机,我们将从/连接到
在 CentOS 7 上安装 Samba
由于在 CentOS 和其他基于 RedHat 的发行版上的安装大多使用 yum 工具进行最佳管理,我们将使用它在 CentOS 7 上安装 Samba 并使我们的系统保持最新状态。
首先,让我们删除所有可能仍缓存在我们系统中的包。 要一次清除任何已启用存储库中的所有缓存文件,我们将使用以下命令。
[[email protected] ~]# yum clean all
接下来,让我们确保更新所有系统包。 我们正在使用 -y 标志来自动确认任何提示。
[[email protected] ~]# yum -y update
现在,我们可以继续安装 Samba。 可以使用以下命令轻松安装 Samba。 请注意我们如何再次使用 -y 标志来自动确认安装提示。
[[email protected] ~]# yum -y install samba samba-client samba-common
Yum 是一个非常棒的工具,它会自动安装 Samba 所需的任何依赖项。 在安装输出的末尾,您应该会看到与此输出类似的内容。
Installed: samba.x86_64 0:4.9.1-10.el7_7 samba-client.x86_64 0:4.9.1-10.el7_7 samba-common.noarch 0:4.9.1-10.el7_7 Dependency Installed: libsmbclient.x86_64 0:4.9.1-10.el7_7 libwbclient.x86_64 0:4.9.1-10.el7_7 samba-client-libs.x86_64 0:4.9.1-10.el7_7 samba-common-libs.x86_64 0:4.9.1-10.el7_7 samba-common-tools.x86_64 0:4.9.1-10.el7_7 samba-libs.x86_64 0:4.9.1-10.el7_7 Complete!
安装完成后,我们可以检查我们的 Samba 版本。
[[email protected] ~]# smbd --version Version 4.9.1
配置 Samba
安装 Samba 后,我们需要对其进行配置以符合我们的设置和标准。 在我们开始在 Linux 机器上配置 Samba 之前,我们需要验证 Windows 计算机上的工作组。 为此,您可以右键单击“此电脑”或“我的电脑”→ 属性 → 高级系统设置 → 计算机名称,这将显示以下窗口,其中包含我们需要的数据
或者,您可以运行 cmd(从 Windows 开始框中)并运行以下命令。
net config workstation
此命令将显示我们需要的有关工作站域的信息。 你看到这样的事情。
现在我们有了关于 Windows 计算机工作组的信息,我们可以转到 Linux 系统上的 Samba 配置。
Samba 配置文件可以在 /etc/samba/smb.conf 中找到。 在我们进行任何更改之前,请确保创建原始配置文件的备份副本。
要创建原始配置文件 smb.conf 的备份,我们将使用以下命令创建一个名为 smb.conf_orig 的备份副本。
[[email protected] ~]# cp /etc/samba/smb.conf /etc/samba/smb.conf_orig
现在我们已经为编辑做好了充分的准备。 我们将从为匿名文件共享服务配置 Samba 开始。 在此共享中,任何用户都可以读取或写入。 我们将首先创建一个名为“anonymous_shared_directory”的目录,我们的文件将在其中存储。
[[email protected] ~]# mkdir -p /samba/anonymous_shared_directory
接下来,我们需要对我们的目录应用适当的权限。
[[email protected] ~]# chmod -R 0775 /samba/anonymous_shared_directory [[email protected] ~]# chown -R nobody:nobody /samba/anonymous_shared_directory
如果您像我们一样使用 SELinux,您将需要更改 samba 共享目录的 SELinux 安全上下文。
[[email protected] ~]# chcon -t samba_share_t /samba/anonymous_shared_directory
接下来,要在我们的配置文件中进行所需的更改,我们需要使用首选的 CLI 文本编辑器(Nano 或 Vim)打开 /etc/samba/smb.conf 文件。
[[email protected] ~]# vim /etc/samba/smb.conf
现在我们将通过添加和编辑以下指令来配置我们的匿名共享
[global] workgroup = WORKGROUP security = user netbios name = centos7 printcap name = cups idmap config * : backend = tdb cups options = raw map to guest = bad user [Anonymous] comment = anonymous file share path = /samba/anonymous_shared_directory browseable = yes writable = yes guest ok = yes guest only = yes read only = no force user = nobody
我们的 Samba 配置文件现在应该是这样的。
[[email protected] samba]# cat /etc/samba/smb.conf # See smb.conf.example for a more detailed config file or # read the smb.conf manpage. # Run 'testparm' to verify the config is correct after # you modified it. [global] workgroup = WORKGROUP security = user netbios name = centos7 printcap name = cups idmap config * : backend = tdb cups options = raw map to guest = bad user [Anonymous] comment = anonymous file share path = /samba/anonymous_shared_directory browseable = yes writable = yes guest ok = yes guest only = yes read only = no force user = nobody [homes] comment = Home Directories valid users = %S, %D%w%S browseable = No read only = No inherit acls = Yes [printers] comment = All Printers path = /var/tmp printable = Yes create mask = 0600 browseable = No [print$] comment = Printer Drivers path = /var/lib/samba/drivers write list = @printadmin root force group = @printadmin create mask = 0664 directory mask = 0775
接下来,不要忘记保存所做的更改并 close 文本编辑器。 为了验证我们当前的 samba 设置,我们将运行以下命令。
[[email protected] samba]# testparm rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Registered MSG_REQ_POOL_USAGE Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED Load smb config files from /etc/samba/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Processing section "[Anonymous]" Processing section "[homes]" Processing section "[printers]" Processing section "[print$]" Loaded services file OK. Server role: ROLE_STANDALONE
现在,按 Enter 查看服务定义的转储。
在我们继续启动 Samba 服务之前,我们需要配置我们的防火墙以使用它。 Samba 需要打开以下端口才能正常运行。
Port 137 (TCP) - netbios-ns - NETBIOS Name Service Port 138 (TCP) - netbios-dgm - NETBIOS Datagram Service Port 139 (TCP) - netbios-ssn - NETBIOS session service Port 445 (TCP) - microsoft-ds - if you are using Active Directory
其他端口:
Port 389 (TCP) - for LDAP (Active Directory Mode) Port 445 (TCP) - NetBIOS was moved to 445 after 2000 and beyond, (CIFS) Port 901 (TCP) - for SWAT service (not related to client communication)
我们如何为 Samba 服务打开这些端口取决于您在 Linux 服务器上的防火墙类型。 由于我们的大多数 Linux 服务器都使用 csf 防火墙,因此我们将从配置 csf.conf 文件开始。 让我们使用您选择的文本编辑器打开我们的 csf 配置文件。
[[email protected] ~]# vim /etc/csf/csf.conf
现在,确保将端口添加到适当的部分。
# Allow incoming TCP ports TCP_IN = "20,21,25,53,80,110,139,143,443,445,465,587,993,995,53835" # Allow outgoing TCP ports TCP_OUT = "20,21,25,53,80,110,139,143,113,443,445,587,993,995,53835"
最后,保存更改并重新加载防火墙规则。
[[email protected] ~]# csf -r
如果您正在运行 firewalld 服务,只需使用以下命令添加服务。
[[email protected] ~]# firewall-cmd --permanent --zone=public --add-service=samba
现在,重新加载 firewalld 服务。
[[email protected] ~]# firewall-cmd --reload
最后,让我们启动 Samba 服务并确保它在系统启动时自动启动。 Samba 使用两个系统服务来运行:smb.service 和 nmb.service。
smbd 服务实现文件共享和打印服务,该服务侦听端口 139 和 445。 nmbd 服务实现 NetBIOS over IP 命名服务到客户端并侦听端口 137。
让我们从以下命令开始
[[email protected] ~]# systemctl start smb.service [[email protected] ~]# systemctl start nmb.service
为了确保这些服务在系统启动时自动启动,我们需要启用它们
[[email protected] ~]# [[email protected] ~]# systemctl enable smb.service Created symlink from /etc/systemd/system/multi-user.target.wants/smb.service to /usr/lib/systemd/system/smb.service. [[email protected] ~]# systemctl enable nmb.service Created symlink from /etc/systemd/system/multi-user.target.wants/nmb.service to /usr/lib/systemd/system/nmb.service.
为了测试我们新实现的匿名共享,我们将转到我们的 Windows 计算机并单击开始 -> 运行,我们将像这样输入服务器 IP 地址。
接下来,按 OK,我们的匿名目录将显示在我们的文件资源管理器中。
现在,双击访问该目录,然后右键单击以创建一个新的文本文档。
选择一个文件名,然后保存。 为此,我们将命名我们的文件 testfile。
创建文件后,让我们确保它也可以在我们的 Linux 机器上使用
[[email protected] ~]# [[email protected] ~]# ls -l /samba/anonymous_shared_directory total 0 -rwxr--r--. 1 nobody nobody 0 Mar 30 22:03 testfile.txt
我们已经学习了如何配置 Samba 以使用匿名共享,让我们继续讨论安全共享。
为私有共享配置 Samba
这种类型的共享需要用户名和密码才能访问,因此我们需要创建一个允许访问我们共享的用户/用户组。 一旦我们为我们的 Samba 用户创建了一个组,我们就可以轻松地一次性为所有用户分配任何所需的权限。
要创建一个新组,我们将使用以下命令
[[email protected] ~]# groupadd sambausergroup
我们现在已经成功地为我们的用户创建了一个名为“sambausergroup”的组。
让我们继续并创建我们的用户。
我们将其命名为“newtestuser”,我们将在单个命令中将其分配给我们的组,同时拒绝他的 shell 访问(因为 Samba 共享不需要它或它的密码),这样我们可以确保更多的安全性)。
Samba 用户帐户与系统帐户分开,因此我们打算仅授予 Samba 权限的用户不需要 shell 访问权限/密码。 但是,如果您决定合并,则可以安装“samba-winbind” 用于将系统用户和密码与 samba 用户数据库以及其他功能同步的包。
要添加我们的用户,我们将使用以下命令
[[email protected] ~]# useradd -s /sbin/nologin -g sambausergroup newtestuser
注意我们如何使用 -s 标志来拒绝我们的用户 shell 访问,然后我们使用第二个标志 -g 将其分配给我们的组。
我们的用户还需要一件事来访问我们的共享,那就是密码,所以让我们为他创建一个 Samba 访问密码。
[[email protected] ~]# smbpasswd -a newtestuser New SMB password: Retype new SMB password: Added user newtestuser.
我们这个受密码保护的共享的 samba 用户现在需要一个地方来存储他们的文件,所以我们需要为他们创建一个目录。这个目录将被称为“password_protected_directory”
[[email protected] samba]# mkdir -p /samba/password_protected_directory
来自我们创建的组“sambausergroup”的用户需要读取、写入和执行此目录中的文件的权限,因此我们将使用以下命令授予他们权限。
[email protected] samba]# setfacl -R -m "g:sambausergroup:rwx" /samba/password_protected_directory
我们还需要在这个安全上下文中应用 SELinux 安全上下文
[[email protected] samba]# chcon -t samba_share_t /samba/password_protected_directory/
我们现在可以继续配置此共享。 打开 samba 配置文件并为我们的私有共享添加设置
[[email protected] ~]# vim /etc/samba/smb.conf
[Password Protected] comment = needs username and password to access path = /samba/password_protected_directory valid users = @sambausergroup guest ok = no writable = yes browsable = yes
完整的配置文件现在将如下所示
# See smb.conf.example for a more detailed config file or # read the smb.conf manpage. # Run 'testparm' to verify the config is correct after # you modified it. [global] workgroup = WORKGROUP security = user netbios name = centos7 printcap name = cups idmap config * : backend = tdb cups options = raw map to guest = bad user [Password Protected] comment = needs username and password to access path = /samba/password_protected_directory valid users = @sambausergroup guest ok = no writable = yes browsable = yes [Anonymous] comment = anonymous file share path = /samba/anonymous_shared_directory browseable = yes writable = yes guest ok = yes guest only = yes read only = no force user = nobody [homes] comment = Home Directories valid users = %S, %D%w%S browseable = No read only = No inherit acls = Yes [printers] comment = All Printers path = /var/tmp printable = Yes create mask = 0600 browseable = No [print$] comment = Printer Drivers path = /var/lib/samba/drivers write list = @printadmin root force group = @printadmin create mask = 0664 directory mask = 0775
保存更改后,让我们使用“测试程序” 命令。
[[email protected] samba]# testparm rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Registered MSG_REQ_POOL_USAGE Registered MSG_REQ_DMALLOC_MARK and LOG_CHANGED Load smb config files from /etc/samba/smb.conf rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384) Processing section "[Password Protected]" Processing section "[Anonymous]" Processing section "[homes]" Processing section "[printers]" Processing section "[print$]" Loaded services file OK. Server role: ROLE_STANDALONE Press enter to see a dump of your service definitions
就在我们测试我们的新共享之前,让我们重新启动 Samba 服务以确保我们所做的更改生效。
[[email protected] samba]# systemctl restart smb nmb
为了进行测试,让我们再次从我们的 Windows 计算机连接并单击开始 -> 运行并输入我们的服务器 IP 服务器IP ->好的
现在,我们将拥有两个目录,我们的匿名目录和受密码保护的目录
双击我们的密码保护目录将打开以下提示,我们需要在其中输入我们的“newtestuser”凭据。
为了确保一切正常,让我们在受密码保护的目录中创建一个新目录。
为此,该目录将被命名为“test_directory”。
最后让我们从我们的 Linux 机器上确认我们的目录的存在。
[[email protected] /]# ls -l /samba/password_protected_directory/ total 0 drwxr-xr-x. 2 newtestuser sambausergroup 6 Apr 3 21:12 test_directory
结论
我们已经了解了 Samba 是什么、如何安装它以及如何配置和使用它来进行文件共享,但 Samba 作为一个免费的开源软件带来了更多。 您可以配置并使用它来访问从 Linux 连接到 Windows 系统的打印机,或者可以将其设置为 Active Directory 域控制器,您可以将 Linux 服务器集成到该域控制器。
在连接方面,Samba 非常灵活,您可以从 Linux 计算机、Windows 计算机以及 macOS 连接到 Samba。
由于设置 Samba 既快速又简单,如果您希望在 Windows 和 Linux 机器的混合网络环境中轻松共享文件或打印机,绝对值得考虑。
如果本文看起来又长又复杂,或者如果您对所采取的某些步骤感到不舒服,我们将随时为您提供帮助。 今天就致电 800.580.4985 给我们打电话,或与我们建立聊天或票证,与我们知识渊博、经验丰富的托管顾问之一交谈!