【环境配置】【详细配置】SMB Samba 共享 VMware 虚拟机 Linux Ubuntu 22.04 文件目录
本文介绍通过SMB协议(Samba)实现Windows访问Ubuntu中文件。SMB信息服务块,是计算机网络中应用层协议,是客户机/服务器型协议。客户机通过SMB协议访问服务器上的共享文件系统、打印机及其他资源。SMB协议为局域网用户提供相关的功能和机制,来保证传输的可靠性。局域网中90%的数据包以及95%的字节是通过SMB协议进行传输。SMB协议解决了网络的稳定性和数据流在共享带宽时的公平性、拥
Samba是在Linux和UNIX系统上实现SMB协议的软件。本文介绍通过Samba实现虚拟机和主机之间的文件共享。
操作环境
操作系统
主机Win11,虚拟机Ubuntu 22.04。
网络环境
主机和虚拟机在同一网络。
网络配置参考:VSCode SSH 连接 VMware虚拟机Linux Ubuntu 22.04 配置。
SMB简介
SMB协议
SMB(Server Messages Block)信息服务块,是计算机网络中应用层协议,是客户机/服务器型协议。客户机通过SMB协议访问服务器上的共享文件系统、打印机及其他资源。
SMB协议为局域网用户提供相关的功能和机制,来保证传输的可靠性。局域网中90%的数据包以及95%的字节是通过SMB协议进行传输。SMB协议解决了网络的稳定性和数据流在共享带宽时的公平性、拥塞控制及效率等问题。
SMB与Samba
1991 年,还在读大学的著名黑客、技术大牛Andrew Tridgwell就有这样的困扰,他手上有三部机器,分别是跑DOS的个人计算机、DEC公司的Digital Unix系统以及Sun的Unix系统,在当时,DEC公司有发展出一套称为PATHWORKS的软件,这套软件可以用来分享DEC的Unix与个人计算机的DOS这两个操作系统的档案数据,Sun的Unix无法藉由这个软件来进行数据分享。为了解决这样的问题,他就自行写了个程序去侦测当DOS与DEC的Unix系统在进行数据分享传送时所使用到的通讯协议信息,然后将这些重要的信息撷取下来,并且基于上述所找到的通讯协议而开发出ServerMessage Block (SMB) 这个档案系统,而就是这套 SMB软件能够让Unix与DOS互相的分享数据。
Tridgwell去申请SMBServer ( Server Message Block 的简写 ) 这个名字来做为他撰写的这个软件的商标,可惜的是,SMB不符合商标注册的要求,因此没有办法达成注册。既然如此的话,那么能不能在字典里面找到相关的字词可以做为商标来注册呢?翻了老半天,这个SAMBA刚好含有SMB,又是热情有劲的拉丁舞蹈的名称,不如就用这个名字来做为商标好了。如此,这成为今天所使用的SAMBA的名称由来。
后来微软对这个SMB协议进行了重大更改,更改后的版本也是最常见的版本。
虚拟机配置
安装和启动Samba服务
安装Samba软件。
sudo apt update
sudo apt install samba
查看samba服务是否正在运行
查看Samba服务是否正在运行。
sudo systemctl status smbd
sudo systemctl status nmbd


或使用以下命令。
sudo systemctl status smbd nmbd
这里smbd是Samba服务器后台程序,负责管理Samba共享,而nmbd是NetBIOS名称服务器,负责提供网络浏览和名称解析。
如果没运行,手动启动。
sudo systemctl start smbd nmbd
配置samba服务设置为开机启动
配置samba服务设置为开机启动。
sudo systemctl enable smbd nmbd
配置共享目录
创建一个共享目录。
mkdir /home/user0/share
目录所属用户和用户组。
sudo chown user0:user0 /home/user0/share
目录访问权限。
sudo chmod 0775 /home/user0/share
修改配置文件
编辑配置文件/etc/samba/smb.conf。
sudo vim /etc/samba/smb.conf
可选配置以下内容。
[ShareName]
# 基础配置
comment = [comment]
path = [directoy path]
available = [yes/no]
browseable = [yes/no]
# 用户权限
valid users = [username1],[username2],@[usergroupname]
read list = [username1],[username2],@[usergroupname]
write list = [username1],[username2],@[usergroupname]
guest ok = [yes/no]
# 访问权限
read only = [yes/no]
writable = [yes/no]
directory mask = 0775
create mask = 0775
[ShareName]:共享的名称,这个名称在访问共享时显示,可根据需要更改。
[基础配置]
\qquadcomment:描述性注释,访问所配置的资源时显示。
\qquadpath:要共享的文件夹的绝对路径。
\qquadavailable:共享资源是否可用。
\qquadbrowseable:设置为yes使共享在网络浏览器中可见。
[用户权限]
\qquadvalid users:允许访问该共享资源的用户,多个用户用,隔开,如果配置的是用户组前面加@。
\qquadread list:允许读该共享资源的用户。
\qquadwrite list:允许写该共享资源的用户。
\qquadguest ok:设置为yes允许没有有效用户账户的用户访问共享。
[访问权限]
\qquadread only:设置为no允许用户写入文件。
\qquadwritable:是否可写入。
\qquaddirectory mask:设置创建目录的访问权限。
\qquadcreate mask:创建文件的访问权限。
将配置添加到配置文件结尾
将配置添加到配置文件结尾。
[share]
comment = File share
path = /home/user0/share
available = yes
browseable = yes
valid users = user0
read only = no
writable = yes
检查配置文件语法是否正确
检查配置文件语法是否正确。
sudo testparm /etc/samba/smb.conf
重启Samba服务以应用配置更改
重启Samba服务以应用配置更改。
sudo systemctl restart smbd nmbd
设置防火墙允许samba连接
设置防火墙允许samba连接。
sudo ufw allow samba
添加samba用户
pdbedit。
pdbedit用于管理由PAM模块pam_krb5_misc提供的MIT Kerberos数据库。
添加允许登录的samba用户
添加允许登录的samba用户。
sudo pdbedit -a [username]
或sudo smbpasswd -a [username]
此处的[username]必须是系统中用户的用户名,否则添加失败。
查看当前已在samba服务中添加的用户
查看当前已在samba服务中添加的用户。
sudo pdbedit -L
注:
sudo smbpasswd -L [username]是禁用(锁定)当前用户或指定用户的SMB密码,阻止用户通过SMB协议访问Samba共享资源。如果不加[username],默认是当前用户。
使用sudo undo smbpasswd -L [username]解除锁定。
*删除用户命令。
pdbedit -x username
或smbpasswd -x [username]
主机配置
添加连接配置
找到此电脑——右键——添加一个网络位置。
下一步。
选择自定义网络位置,下一步。
输入虚拟机地址,点浏览。
选择配置的目录。
此处的
samba是在/etc/samba/smb.conf中配置的[ShareName]。
下一步。
输入名称,这个名称在此电脑——网络位置中显示。
点击完成。
输入Ubuntu中配置的用户名和Samba密码,点确定。
*如果勾选了
记住我的凭据,此处添加的凭据可在控制面板\用户帐户\凭据管理器中编辑和删除。
打开了虚拟机中共享的/home/user0/share目录。
此时在此电脑——网络位置中,添加了Ubuntu中共享的目录。
问题排查
连接问题 1

没有权限访问共享的目录。
1、samba配置及目录权限。
检查Samba用户是否和/etc/samba/smb.conf中配置的valid users = [username]一致。
sudo pdbedit -L
sudo vim /etc/samba/smb.conf
检查/etc/samba/smb.conf中配置的用户权限和访问权限。
sudo vim /etc/samba/smb.conf
检查/home/user0/share这个路径的home、user0、share权限。
home:其它用户访问权限不低于1,默认755。user0:所有者访问权限不低于1,默认755。share:所有者权限不低于5,默认755。
重启Samba服务。
sudo systemctl restart smbd nmbd
2、删除Windows连接Linux的Samba服务缓存
打开PowerShell,查看网络共享资源连接。
net use
删除网络共享连接记录。
net use \192.168.37.129\samba /del
PS C:\Users\Administrator> net use
会记录新的网络连接。
状态 本地 远程 网络
-------------------------------------------------------------------------------
已断开连接 \\192.168.37.129\samba Microsoft Windows Network
命令成功完成。
PS C:\Users\Administrator> net use \\192.168.37.129\samba /del
\\192.168.37.129\samba 已经删除。
PS C:\Users\Administrator> net use
会记录新的网络连接。
列表是空的。
PS C:\Users\Administrator>
或
net use * /del删除全部的连接记录。
PS C:\Users\Administrator> net use * /del
你有以下的远程连接:
\\192.168.37.129\samba
继续运行会取消连接。
你想继续此操作吗? (Y/N) [N]: y
命令成功完成。
PS C:\Users\Administrator>
3、在Windows中重新添加连接配置
按添加连接配置在Windows中重新添加连接。
连接问题 2

不允许使用不同的用户名多重连接访问同一个共享资源。
1、在Ubuntu中删除多余的Samba用户
在Ubuntu中删除多余的Samba用户。
sudo pdbedit -L
sudo pdbedit -x [username]
重启Samba服务。
sudo systemctl restart smbd nmbd
2、删除Windows连接Linux的Samba服务缓存
打开PowerShell,查看网络共享资源连接。
net use
删除网络共享连接记录。
net use \192.168.37.129\samba /del
3、在Windows中重新添加连接配置
按添加连接配置在Windows中重新添加连接。
使用root用户访问共享
1、在配置文件中添加root用户
编辑配置文件。
sudo vim /etc/samba/smb.conf
在配置文件中添加root用户。
[share]
comment = File share
path = /home/user0/share
available = yes
browseable = yes
valid users = user0,root # 添加root用户
read only = no
writable = yes
重启samba服务。
sudo systemctl restart smbd nmbd
2、添加root为Samba用户
添加root为samba用户。
sudo pdbedit -a root
3、在Windows中以root用户登录
输入root和密码,点确定。
参考
Distribution-specific Package Installation - SambaWiki
SMB小传 —— SMB网络文件系统协议介绍-阿里云开发者社区 (aliyun.com)
定义 SMB 及其安全注意事项 - Training | Microsoft Learn
smb_百度百科 (baidu.com)
smb_360百科 (so.com)
SMB协议简介-CSDN博客
samba(软件)_百度百科 (baidu.com)
windows下访问虚拟机的两种方式
samba的配置文件/etc/samba/smb.conf 笔记240722-CSDN博客
windows如何访问Linux系统通过Samba协议共享的文件?_windows 访问samba-CSDN博客
更多推荐




所有评论(0)