Samba(SMB)是一种强大的局域网文件共享协议,Linux、Windows、Android操作系统均对其有内建支持,例如在Android操作系统中,我们可以直接用系统的文件管理器访问Samba服务器,可以用MX Player直接播放Samba上的视频;Windows操作系统中,很多软件甚至可以像操作本地磁盘一样直接操作Samba映射的“网络驱动器”。在内网搭建文件共享服务时,尤其是对安全性没有企业级要求的家庭场景,我们应该优先考虑使用Samba服务。
这篇笔记我们介绍如何在Linux操作系统下搭建和使用Samba。
执行以下命令可以安装Samba服务。
apt install samba
安装完成后,Samba的主配置文件在/etc/samba/smb.conf
,对Samba服务的各项配置都需要编辑这个文件。
补充说明:如果你的Samba服务器主要面向Windows客户端访问,目前还需要安装wsdd
服务(注意未来情况可能发生变化)。
apt install wsdd
这是因为早期版本的Windows操作系统基于NetbIOS这个古老的接口实现局域网内Samba服务发现,但在最新版本的Windows10和Windows11中,Windows的SMBv1由于存在诸多漏洞而被默认关闭,NetBIOS也被一起禁用了,这导致一个神奇的现象,我们能够主动将Samba挂载到文件资源管理器中,但网络邻居中却搜索不到任何Samba服务,很多人说要在控制面板中开启SMBv1和NetBIOS,这是错误的,Windows这混乱而隐晦的设计也是让人非常无语。新版本Windows中,共享服务发现使用了一个新的协议Web Service Dynamic Discovery(WS-Discovery,底层基于SOAP over UDP实现),但Linux的Samba服务没有实现该协议,因此还要额外安装一个叫wsdd
的软件包。
我们可以打开/etc/samba/smb.conf
配置文件并观察其中的内容。它是一个INI格式文件,其中[global]
字段下是全局配置,其中的配置字段大多有详细注释,我们根据需要调整即可;[homes]
是一个默认开启的共享设置,它默认会共享当前系统用户的Home目录,如果不需要可将[homes]
相关内容注释掉;[printers]
和[print$]
是打印机相关的配置,我们可以暂时忽略。
现在假设我们要配置服务端磁盘上/home/pi/smb
目录为Samba共享的路径,我们在配置文件最后添加一个类似如下的[share]
字段(这个名字可以随意起)。
[share]
comment = Raspberry SMB Storage
path = /home/pi/smb
read only = no
public = no
browseable = yes
valid users = pi
available = yes
配置项都比较容易理解,我们指定了路径和共享的权限等信息,该共享配置仅允许pi
用户访问,valid users
也可以指定多个,多个用户用逗号分隔,它也可以指定用户组,写法例如valid users = @smbgroup
。修改完配置文件后,我们执行以下命令重启Samba服务,配置即可生效。
systemctl restart smbd
配置完成后,我们还可以创建Samba用户,这里要说明一下,Samba支持使用Linux系统用户名和密码登录,但Samba自己也有一套用户系统,这两个用户系统在Samba中是被可以同时使用的。下面命令创建Samba用户pi
并设置密码。
smbpasswd -a pi
创建Samba用户后,我们可以使用pdbedit -L
命令查看当前都有哪些Samba用户。
这里以最新版本的Windows11为例进行配置,Windows11默认开启了共享服务,通常不需要额外安装任何组件了,打开网络邻居即可看到已配置的的共享文件夹。
图中,RASPBERRYPI
是Samba服务所在计算机的Hostname(这里其实是一个树莓派),双击打开即可看到前面配置的共享文件夹share
。