使用SMB共享文件

橘子 发布于 2025-08-08 137 次阅读


使用SMB共享文件要比FTP简单得多。主要是因为配置简单。

安装

安装smb服务

sudo apt update
sudo apt install samba -y

配置

添加用户

注意,samba使用自己管理的用户密码!!!但是又比较别扭的是,必须使用系统现有的用户

换句话说,你需要找一个现有的用户,给他重新设置一个密码。是不是很别扭……

也有一些方法能够把系统用户的密码同步到smb的用户密码,但是我没试……

总之,选一个你想用来连接smb服务的用户。比如你可以选择admin。然后使用如下命令新增一个smb的用户密码:

sudo smbpasswd -a admin

输入两次密码,这个密码是你设定的smb密码,他可以和系统用户密码不同。如果说提示“Failed to add entry for user admin.”说明你在系统中就没有admin这个用户。正常应该提示“Added user admin.”

修改配置

备份原配置并且修改配置:

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
sudo vim /etc/samba/smb.conf

当然如果使用vscode远程连接,也可以修改文件权限然后编辑。最后别忘了改回去。

sudo chmod 666 /etc/samba/smb.conf
code /etc/samba/smb.conf

添加一个共享的文件夹配置,例如:

[global]
   netbios name = UBUNTU

# 共享FTP文件夹
[share]
   path = /srv/ftp
   browseable = yes
   read only = no
   writable = yes
   valid users = ftp
   guest ok = no
   # (可选)允许特定 IP 或网段(逗号分隔)
   hosts allow = 10.0.0.0/24
   # (可选)拒绝所有其他 IP(可选)
   hosts deny = ALL

如果有多个用户,使用逗号隔开即可:

valid users = user1, user2

这里可以选择允许的ip网段。此外,netbios name是一个自定的主机名称。

可以使用如下命令检查配置是否有错误:

testparm

输出如下说明是OK的:

Load smb config files from /etc/samba/smb.conf
Loaded services file OK.

此外,如果你没有在global模块配置netbios name的长度过长,或者你没有配置而使用了默认的ubuntu主机名称而它有太长了,就会提示:

WARNING: The 'netbios name' is too long (max. 15 chars).

这是因为linux主机名称最长可以到64,然而windows最长只能到15. 所以还是推荐配置并且使用一个短且兼容的名称。

重启服务

重启服务的命令,二选一。

sudo systemctl restart smbd

sudo service smbd restart

开放防火墙

需要开放445端口的TCP协议。

配置VPN

你会说,“我不是都有公网IP了吗?为什么还要配置VPN?”

哦天真的孩子。你觉得网络运营商会让你在公网使用SMB服务吗?

如果你有幸在内网环境配置过SMB服务,你可能会偶然发现,“物理学不存在了!”好吧,其实就是内网,比如说公司网络、学校网络中,不禁用smb协议(不禁用445端口流量),你会发现配置是成功的;但是换了个网络,你就会发现连不上了,开始怀疑这不对那不对或者是教程有问题……

好吧,真的可能不是你的问题,而是运营商的问题。此时,你需要使用虚拟专用网络解决这个问题。至于方法嘛……在自己的星球上部署局域网吧!组建安全局域网吧!、FRP自己看吧……

远端视频流

使用ftp服务的一个诱因其实是希望远端提供视频流服务。简单来说,使用ftp上传视频到服务器,再使用SMB共享文件,手机只要通过SMB连接到服务器就可以不用下载视频直接播放视频流了。

这里有几个技术要素: