如果你有一个由Windows和Linux机器组成的网络,你想在它们之间实现共享。你可以通过使用一个有用的工具Samba来实现这一目标。它是一个开源工具,允许你访问共享资源,包括文件、打印机等。

这是将Ubuntu和Windows计算机联网的最常见方式之一,将Samba配置为文件服务器。可以在Windows或Linux客户端访问Samba服务器的共享文件。

在这篇文章中,使用Ubuntu来安装和配置Samba服务器,讲解如何安装和配置Samba作为Windows和Linux操作系统的文件存储系统。还包括如何使用其他Linux和Windows客户端操作系统访问Samba共享文件。在访问共享文件之前,请确保你的服务器和客户端操作系统在同一个IP子网中。如果是Ubuntu虚拟机,请使用的NAT网络连接。

什么是samba

Samba是一个用于Unix和Linux的免费和开源的SMB/CIFS协议实现,允许在局域网内的Unix/Linux、Windows和macOS机器之间进行文件和打印共享。

[ Server Message Block (SMB)/Common Internet File System (CIFS) protocol ]

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

- smbd:   提供SMB/CIFS服务(文件共享和打印),也可以作为一个Windows域控制器。

- nmbd:  这个守护程序提供NetBIOS名称服务,监听名称服务器请求。它还允许网络上的其他计算机找到Samba服务器。

在Ubuntu上安装Samba

按Ctrl+Alt+T组合键启动终端, 先更新APT库缓存 update the APT package repository cache。

$ sudo apt update

然后输入以下命令来安装Samba:

$ sudo apt install samba

验证SAMBA的安装

你可以通过输入以下命令验证Samba是否已经成功安装和运行。它将显示Samba服务的状态。

$ sudo systemctl status smbd nmbd

或者查看samba状态:

$ sudo smbstatus

查看版本:

$ smbd --version

查看安装文件:

$ whereis samba

使用GUI设置Samba共享

一旦安装了Samba,你就可以通过Ubuntu默认的文件管理器Nautilus以图形方式共享目录。

如果下面对话框出现,点击Add the permissions automatically。

一旦你分享了一个目录,该目录的图标应该被改变,你可以在下面的截图中看到。

配置Samba用户和权限

安装完samba,除了上面的图形界面直接设置共享,还有使用配置文件的方式,可以更好的控制samba的各种功能。

Samba的主要配置文件位于/etc/samba/smb.conf中。默认的配置文件有大量的注释,以记录各种配置指令。

并非所有可用的选项都包含在默认配置文件中。更多细节请参见man page:The Official Samba 3.5.x HOWTO and Reference Guide

在一个电脑网络中,一个work group是指连接在一个LAN局域网中的电脑集合,他们分享公共的资源和职责。在微软的术语中,Workgroup一般是指点对点的局域网(peer-to-peer local area network)。

与Work group相对的概念是域,domain。一个域指的是,组成域的电脑依靠集中的认证。

所以在smb.conf配置文件中,在[global] section中有两个key/value pairs:

workgroup = EXAMPLE 

   ...

security = user

这里的workgoup要配置成一样的,samba服务器和客户端电脑要一致。如果客户端用的不是workgroup而是domain,就保持默认就好。

Workgroup: 这控制了你的服务器在被客户查询时将显示在哪个工作组中。

Default: workgroup = WORKGROUP

Example: workgroup = MYGROUP

Security:

默认是security = user,因为这是最常见的设置,用于独立的文件服务器或DC(Domain controller)。

其他选项是security =ads 或 security=domain,它们支持将Samba加入到Windows域中。

如果你想主要设置没有密码的共享(访客共享),你应该使用security = user和map to guest = Bad User。这通常用于共享打印机服务器。

关于map to guest:

这个参数可以取四个不同的值,它们告诉smbd如何处理那些在某种程度上不符合有效UNIX用户的用户登录请求。

这四个设置是 :

Never - 意味着拒绝有无效密码的用户登录请求。这是默认的。

Bad User - 意味着拒绝带有无效密码的用户登录,除非该用户名不存在,在这种情况下,它被视为访客登录并被映射到访客账户。

Bad Password - 意味着有无效密码的用户登录被视为访客登录,并被映射到访客账户中。请注意,这可能会引起问题,因为这意味着任何用户如果错误地输入了他们的密码,就会默默地以 "访客 "身份登录--并且不知道他们不能访问他们认为应该访问的文件的原因--不会有消息告诉他们他们的密码是错误的。如果你这样设置参数,Helpdesk services服务台的人会恨你的。

Default: map to guest = Never

Example: map to guest = Bad User  // 使用这个参数,就可以访客访问

关于DC域控制器:

域控制器是一种计算机服务器,它响应安全认证请求并验证计算网络域中的用户。控制器是一个允许主机访问域资源的守门员。它还执行安全策略,存储用户的账户信息,并为一个域来验证用户。

配置Samba共享

1. 首先,我们将需要创建一个Samba目录,所有的共享数据都将存储在这里。打开终端,以sudo身份运行以下命令:

$sudo mkdir -p /srv/samba/share

$sudo chown nobody:nogroup /srv/samba/share/

文件所有者的组和密码文件:/etc/group, /etc/passwd

将文件夹配置成nobody用户,因为guest用户就是默认是这个账户。

它将在根目录下创建新的子目录samba。

或者,我们可以选择一个已经存在的目录作为Samba共享目录。

2. 通过在同一目录或另一目录中复制配置文件,对其进行备份。要复制该文件,以sudo身份运行以下命令:

$ sudo cp /etc/samba/smb.conf /etc/samba/smb_backup.conf

它将在同一目录下制作备份文件。

3. 现在编辑配置文件。Samba的配置文件位于/etc/samba/中一个名为smb.conf的文件中。你可以使用Gedit、Nano或Vim来编辑配置文件。要使用nano编辑器编辑该文件,打开终端,以sudo身份运行以下命令:

$ sudo nano /etc/samba/smb.conf

编辑完,按Ctrl+O进行保存,按Ctrl+X进行退出。

使用配置文件配置Samba共享

现在我们将把我们的新目录samba配置为一个共享。为此,我们将在Samba配置文件smb.conf文件的底部添加:

[share]

    comment = Ubuntu File Server Share

    path = /srv/samba/share

    browsable = yes

    guest ok = yes

    read only = no

    create mask = 0755

其中

[share] = 该共享的名称

comment= 添加该共享的简短描述

Path= 共享的目录。

Read only= 它指定了用户是否被允许写入

Browsable= 该共享是否应该被列在共享列表中, 使得Windows客户可以使用Windows Explorer浏览共享目录。设置成no的话,只有知道共享目录才能访问。

Create mask: 决定了新文件在创建时将拥有的权限。

Guest ok: 允许客户在不提供密码的情况下连接到该共享。

同read only有一个相反的设置,writeable = yes。

如果要控制访问samba服务器的用户,可以使用:valid users = @samba Tom , 这里@后面跟的是Linux的Group name,Tom是单个的用户名。

这个例子使用的路径是/srv/samba/sharename,因为根据文件系统层次标准(FHS),/srv是应该提供特定数据的地方。从技术上讲,只要权限正确,Samba共享可以放在文件系统的任何地方,但我们建议遵守标准。

修改完配置文件,可以运行下面命令检查是否有语法错误:

$ testparm

设置Samba用户账户

现在,为Samba设置一个用户账户。Samba使用系统账户访问共享(Samba user accounts are linked with the local Linux system accounts),但它不接受系统账户的密码。因此,我们将需要为该账户设置一个密码,以sudo身份输入以下命令。当要求输入密码时,输入新密码。

$ sudo smbpasswd -a username

这里的username是系统用户名,如果你不知道你使用的系统用户名,可以使用: $(whoami)来替换。

也可以添加一个新的用户名, 再将这个用户加入到samba中。

$ sudo adduser username

$ sudo smbpasswd -a username

如果想要控制指定用户才能访问共享,可以创建一个新组samba,将这个用户加入这个组中, 然后在smb.conf中的valid users = @samba就表示只有samba这个组的用户才能访问共享。

$ sudo groupadd samba

$ sudo gpasswd -a username samba

同时要保证共享的文件夹对于samba这个组是可读可写的:

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

前面介绍了客人访问的ACL设置:

$sudo chown nobody:nogroup /srv/samba/share/

如果是guest可访问,也可以设置:

$ sudo setfacl -R -m "u:nobody:rwx" /srv/samba/share

重启Samba服务

一旦你完成了所有的配置,通过运行以下命令重新启动Samba服务:

$ sudo systemctl restart smbd.service nmbd.service

正常的服务启动方法:

$ sudo systemctl start smbd nmbd

一旦启动,smbd将监听TCP 139和445端口,nmbd将监听UDP 137和138端口。

TCP 139:用于文件和打印机共享以及其他操作。

TCP 445:NetBIOS-less CIFS端口。

UDP 137:用于NetBIOS网络浏览。

UDP 138: 用于NetBIOS名称服务。

如果你在Ubuntu上启用了UFW防火墙,那么你需要用以下命令打开防火墙中的上述端口。

$ sudo ufw allow samba

连接Samba共享

如前所述,你应该在一个局域网内从Samba服务器访问文件。这意味着你的Samba服务器的IP和连接到它的客户端应该在同一个网络中。

例如,在我的方案中,我有一台Samba服务器和两个客户端:一台是Linux,另一台是Windows。这三台机器都在同一个网络中。

* IP of Samba (Server): 192.168.36.129/24

* IP of Linux (Client): 192.168.36.130/24

* IP of Windows (Client): 192.168.36.1/24

Samba服务器的IP配置

你可以通过在终端运行ifconfig来检查任何机器的IP地址。

$ ifconfig

以下是我的Samba服务器的IP配置:

方法1:从Linux连接

有两种方法可以让你从Linux客户端连接Samba共享。

1. 使用命令行

2. 使用GUI

以下是我的Linux客户端的IP配置。

1. 使用命令行

要通过Linux命令行连接Samba共享,你将需要一个smbclient工具。要安装smbclient,打开终端,以sudo身份运行以下命令:

$ sudo apt install smbclient

一旦安装完成,通过使用以下语法运行命令来访问Samba共享。

$ sudo smbclient //[IP_address or Host_name]/share_name –U username

[IP_address or Host_name]是Samba服务器的IP地址或主机名。

[share_name]是Samba共享的名称

[username]是访问该共享的用户的名字

它将提示输入密码。在你输入密码后,你将登录到Samba CLI。你可以输入help来查看各种命令的列表。

2. 使用GUI

要通过GUI访问Samba共享,打开Linux文件管理器。在文件管理器窗口的左侧窗格中点击连接到服务器。

在 "连接到服务器 "窗口中,以下列语法输入Samba服务器地址,然后点击 "连接"。

smb:// [IP_address or Host_name]/[share_name] 。

将出现以下屏幕。Connect As,选择注册用户。

输入Samba用户名和密码。把域保留为默认值,然后点击连接。

你会看到连接已经建立。现在你可以访问Samba服务器上的文件了。

或者直接点击Network,就能看到有samba共享的机器,点击进入,就能访问samba共享了。

方法2:从Windows连接

你可以通过两种方式使用Windows操作系统连接到Samba共享。

1. 使用运行工具

2. 使用文件浏览器

以下是我的Windows客户机的IP配置。

1. 使用运行工具-Run utility

按Windows键+R来启动运行工具。在下面的语法中输入访问Samba共享的地址,然后按回车键。

\\[IP-address]\[share_name]

它将提示提供凭证。输入Samba共享的凭证,然后点击确定。

你会看到连接已经建立。现在你可以访问Samba服务器上的文件了。

2. 使用文件资源管理器

在窗口中启动文件资源管理器。在左边的窗格中,右键点击这台电脑。然后从下拉选项中选择添加一个网络位置。

它将启动 "添加网络位置 "向导。继续点击 "下一步",直到出现以下屏幕。按照语法添加Samba共享地址,然后点击下一步。

\\[Ip-address]\share_name

在下一个屏幕,你可以改变共享位置的名称。点击下一步,然后点击完成来完成这个过程。

当上述过程完成后,它将提示需要凭证,输入Samba共享的凭证并点击确定。

你会看到连接已经建立。现在你可以访问Samba服务器上的文件了。

和Linux类似,也可以直接点击Network,就能看到有samba共享的机器,点击进入,就能访问samba共享了。

也可以Map network drive.

因此,总结一下,我们已经学会了如何在Ubuntu上安装和配置Samba来创建共享。我们已经学会了如何使用Linux和Windows操作系统连接这些共享。

可能遇到的问题 Troubleshooting Tip

如果你的Samba服务器没有按照预期工作,你可以检查/var/log/samba/目录下的日志文件。如果你想记录更多的信息,你可以在/etc/samba/smb.conf文件的[global]部分添加以下一行来提高日志级别。

log level = 2

如果显示没有权限连接,可以尝试下面命令:

net use \\samba-server-ip\share-name /delete

net use \\samba-server-ip\share-name /user:samba-username password

Win10有时能ping通服务器,或者可以添加用户登录凭证:

win key+R,输入“control userpasswords2”,选择advanced标签,点击密码管理或manage passwords。

选择windows凭据,然后添加,把你虚拟机的IP以及用户名和密码加上。

还有一种方法:

运行gpedit.msc, 计算机配置-> 管理模板->网络->Lanman工作站->启用不安全的来宾登录

还有可能的问题:

Windows功能:启动或关闭里面,打开win10对smb1.0/cifs文件共享支持

win10 能Ping通却无法访问虚拟机Ubuntu 14.04 samba的问题(已解决)_无语僧-CSDN博客_windows10无法访问虚拟机

确保选中“SMB1.0/CIFS文件共享支持”,然后重新启动电脑即可生效。

参考:

How to Install and Configure Samba on Ubuntu – VITUX

How to Install Samba on Ubuntu

Samba - File Server | Ubuntu

smb.conf

Install and Configure Samba Server on Ubuntu for File Sharing

Samba - Community Help Wiki

Install and Configure Samba | Ubuntu

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐