网站搜索

如何在 Ubuntu 上安装 Samba 以实现 Windows 上的文件共享


Samba 是一种免费/开源且广泛使用的软件,用于在同一网络上的类 Unix 系统(包括 Linux 和 Windows 主机)之间共享文件和打印服务。

在本指南中,我们将展示如何设置 Samba4 以在 Ubuntu 系统和 Windows 计算机之间共享基本文件。我们将介绍两种可能的场景:匿名(不安全)以及安全文件共享

建议阅读: 如何在 CentOS/RHEL 7 上安装 Samba4 以在 Windows 上进行文件共享

请注意,从版本 4.0 开始,Samba 可以用作 Active Directory (AD) 域控制器 (DC)。我们组织了一个关于设置 Samba4 Active Directory 域控制器的特别系列,其中包括 Ubuntu、CentOS 和 Windows 下的关键主题。

  1. 设置 Samba4 Active Directory 域控制器

在 Ubuntu 中安装和配置 Samba

可以使用 apt 包管理器工具从默认的 Ubuntu 存储库安装 Samba 服务器,如图所示。

sudo apt install samba samba-common python-dnspython

安装 samba 服务器后,现在可以将 samba 服务器配置为:不安全匿名安全文件共享

为此,我们需要编辑主 Samba 配置文件 /etc/samba/smb.conf (其中解释了各种配置指令)。

首先备份原来的samba配置文件,如下。

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.orig

然后,我们将继续为匿名安全文件共享服务配置 samba,如下所述。

重要:在继续操作之前,请确保 Windows 计算机位于将在 Ubuntu 服务器上配置的同一工作组中。

检查 Windows 计算机工作组设置

登录您的 Windows 计算机,右键单击“此电脑”或“我的电脑 属性 高级系统设置 计算机名称以验证工作组。

或者,打开命令提示符并通过运行以下命令查看它并查找“工作站域”。

>net config workstation

一旦您了解了您的 Windows 工作组,就可以继续配置 samba 服务器以进行文件共享了。

匿名 Samba 文件共享

首先创建一个用于存储文件的共享 samba 目录。

sudo mkdir -p /srv/samba/anonymous_shares

然后对该目录设置适当的权限。

sudo chmod -R 0775 /srv/samba/anonymous_shares
sudo chown -R nobody:nogroup /srv/samba/anonymous_shares

现在打开配置文件。

sudo vi /etc/samba/smb.conf
OR
sudo nano /etc/samba/smb.conf

接下来编辑或修改指令设置,如下所述。

global]
	workgroup = WORKGROUP
	netbios name = ubuntu
	security = user
[Anonymous]
	comment = Anonymous File Server Share
	path = /srv/samba/anonymous_shares
	browsable =yes
	writable = yes
	guest ok = yes
	read only = no
	force user = nobody

现在通过运行以下命令验证当前的 samba 设置。

testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
WARNING: The "syslog" option is deprecated
Processing section "[printers]"
Processing section "[print$]"
Processing section "[Shares]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

Global parameters
[global]
	netbios name = UBUNTU
	server string = %h server (Samba, Ubuntu)
	server role = standalone server
	map to guest = Bad User
	obey pam restrictions = Yes
	pam password change = Yes
	passwd program = /usr/bin/passwd %u
	passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
	unix password sync = Yes
	syslog = 0
	log file = /var/log/samba/log.%m
	max log size = 1000
	dns proxy = No
	usershare allow guests = Yes
	panic action = /usr/share/samba/panic-action %d
	idmap config * : backend = tdb

[printers]
	comment = All Printers
	path = /var/spool/samba
	create mask = 0700
	printable = Yes
[print$]
	comment = Printer Drivers
	path = /var/lib/samba/printers
	browseable = No
[Anonymous]
	comment = Anonymous File Server Share
	path = /srv/samba/anonymous_shares
	force user = nobody
	read only = No
	guest ok = Yes

然后重新启动 Samba 服务以使上述更改生效。

sudo systemctl restart smbd   [Systemd]
sudo service smbd restart     [Sys V]

测试匿名 Samba 文件共享

转到 Windows 计算机,然后从 Windows 资源管理器 窗口打开“网络”。单击 Ubuntu 主机(在本例中为 TECMINT),或者尝试使用其 IP 地址访问 samba 服务器。

\2.168.43.168

注意:使用 ifconfig 命令获取您的 Ubuntu 服务器 IP 地址。

然后打开匿名目录并尝试在其中添加文件以与其他用户共享。

安全 Samba 文件共享

要使用密码保护 samba 共享,您需要创建一个组“smbgrp”并为每个用户设置密码。在此示例中,我使用 aaronkilik 作为用户,密码为“howtoing”。

sudo addgroup smbgrp
sudo usermod aaronkilik -aG smbgrp
sudo smbpasswd -a aaronkilik

注意:samba 安全模式:security=user 要求客户端输入用户名和密码才能连接到共享。

Samba 用户帐户与系统帐户是分开的,但是,您可以选择安装 libpam-winbind 软件包,该软件包用于将系统用户和密码与 samba 用户数据库同步。

sudo apt install libpam-winbind

然后创建将保存共享文件的安全目录。

sudo mkdir -p /srv/samba/secure_shares

接下来,对该目录设置适当的权限。

sudo chmod -R 0770 /srv/samba/secure_shares
sudo chown -R root:smbgrp /srv/samba/secure_shares

现在打开配置文件。

sudo vi /etc/samba/smb.conf
OR
sudo nano /etc/samba/smb.conf

接下来编辑或修改指令设置,如下所述。

[Secure]
	comment = Secure File Server Share
	path =  /srv/samba/secure_shares
	valid users = @smbgrp
	guest ok = no
	writable = yes
	browsable = yes

就像以前一样,运行此命令来查看当前的 samba 设置。

testparm
Load smb config files from /etc/samba/smb.conf
rlimit_max: increasing rlimit_max (1024) to minimum Windows limit (16384)
WARNING: The "syslog" option is deprecated
Processing section "[printers]"
Processing section "[print$]"
Processing section "[Shares]"
Loaded services file OK.
Server role: ROLE_STANDALONE

Press enter to see a dump of your service definitions

Global parameters
[global]
	netbios name = UBUNTU
	server string = %h server (Samba, Ubuntu)
	server role = standalone server
	map to guest = Bad User
	obey pam restrictions = Yes
	pam password change = Yes
	passwd program = /usr/bin/passwd %u
	passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
	unix password sync = Yes
	syslog = 0
	log file = /var/log/samba/log.%m
	max log size = 1000
	dns proxy = No
	usershare allow guests = Yes
	panic action = /usr/share/samba/panic-action %d
	idmap config * : backend = tdb
[printers]
	comment = All Printers
	path = /var/spool/samba
	create mask = 0700
	printable = Yes
[print$]
	comment = Printer Drivers
	path = /var/lib/samba/printers
	browseable = No
[Anonymous]
	comment = Anonymous File Server Share
	path = /srv/samba/anonymous_shares
	force user = nobody
	read only = No
	guest ok = Yes
[Secure]
	comment = Secure File Server Share
	path = /srv/samba/secure_shares
	valid users = @smbgrp
	read only = No

完成上述配置后,重新启动 Samba 服务以应用更改。

sudo systemctl restart smbd   [Systemd]
sudo service smbd restart     [Sys V]

测试安全 Samba 文件共享

和以前一样,在 Windows 计算机中,从 Windows 资源管理器 窗口打开“网络”。单击 Ubuntu 主机(对于我们的案例为 TECMINT)。如果不继续执行下一步,您可能会收到以下错误。

尝试使用服务器的 IP 地址访问服务器,例如\\192.168.43.168 像这样。然后输入用户 aaronkilik 的凭据(用户名和密码),然后单击确定

您现在将查看所有共享目录,单击安全将其打开。

您可以通过将某些文件放入此目录来安全地与网络上其他允许的用户共享这些文件。

在 Ubuntu 中的 UFW 防火墙中启用 Samba

如果您的系统上启用/激活了 UFW 防火墙,则必须添加规则以允许 Samba 通过防火墙。

为了测试这一点,我们使用了 192.168.43.0 网络方案。运行以下命令并指定您的网络地址。

sudo ufw allow proto udp to any port 137 from 192.168.43.0/24
sudo ufw allow proto udp to any port 138 from 192.168.43.0/24
sudo ufw allow proto tcp to any port 139 from 192.168.43.0/24
sudo ufw allow proto tcp to any port 445 from 192.168.43.0/24

您还可以查看这些有关网络上 Samba 文件共享的有用文章。

  1. 设置 Samba4 Active Directory 域控制器 - 第 1 至 14 部分
  2. 如何在 Linux 中挂载/卸载本地和网络(Samba 和 NFS)文件系统
  3. 使用 ACL(访问控制列表)和挂载 Samba/NFS 共享
  4. 如何修复 Linux 系统中的 SambaCry 漏洞 (CVE-2017-7494)

就这样!在本指南中,我们向您展示了如何设置 Samba4 以在 Ubuntu 和 Windows 计算机之间进行匿名且安全的文件共享。使用下面的反馈表与我们分享任何想法。