配置SMB服务,最直接的方式是修改/etc/samba/smb.conf文件并重启smbd服务,整个过程通常能在10分钟内完成。无论你是想在Linux服务器上共享文件夹给Windows电脑访问,还是在NAS上搭建家庭影音库,SMB协议始终是局域网内兼容性最好的文件共享方案,下面直接拆解从安装到排错的完整流程,不绕弯子。
SMB配置前必须搞清楚的三个基础概念
动手之前先花两分钟理解这几个核心点,能避免后续大半的踩坑问题。
- 共享名:你在网络上看到的文件夹名字,和实际Linux目录路径可以完全不同,比如把
/home/user/videos共享成movies,Windows访问的就是\192.168.1.10movies。 - 访问权限:SMB有两层权限过滤,第一层是Samba自身配置的
read only或writable,第二层是Linux文件系统的POSIX权限,即使SMB里设置了可写,如果目录属主不是运行smbd的用户,依然写不进去。 - 用户映射:SMB默认不直接使用Linux系统密码,需要通过
smbpasswd命令把系统用户添加到Samba用户数据库里,这个数据库独立于/etc/passwd。
行业共识认为,百分之八十的SMB配置失败都源于权限模型不清晰,你理解成“Samba是Linux文件系统的门卫,但它自己还有一套门禁卡”。
从零开始配置SMB:完整操作流程
以下步骤适用于Debian/Ubuntu和RHEL/CentOS系系统,命令区别我会标注出来。
第一步:安装Samba服务端
Debian/Ubuntu系统执行:
sudo apt update && sudo apt install samba -y
RHEL/CentOS系统执行:
sudo yum install samba samba-client -y
安装完成后,先确认版本号:
smbd --version
较新的Samba 4.x版本都支持SMB3协议,这是目前最安全且性能最好的版本。
第二步:备份默认配置并创建共享目录
永远不要直接修改原始配置文件,先备份:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.bak
创建你想共享的实际目录,比如/data/share:
sudo mkdir -p /data/share sudo chmod 2770 /data/share sudo chown root:sambashare /data/share
2770权限中的2表示SGID位,能让新创建的文件自动继承目录的用户组,这在多人协作时特别实用。
第三步:编辑smb.conf核心配置
用sudo nano /etc/samba/smb.conf打开文件,在文件最底部追加以下内容:

[share] comment = 局域网共享文件夹 path = /data/share browseable = yes read only = no writable = yes create mask = 0660 directory mask = 2770 valid users = @sambashare
各参数含义直接对照:
[share]:方括号里的名字就是共享名,Windows访问时用这个。path:指向实际Linux目录。browseable = yes:让共享在Windows网络邻居中可见,如果设为no,只能通过直接输入路径访问。valid users = @sambashare:只允许sambashare用户组访问,用开头表示用户组,不加则代表单个用户。
如果你的需求是只读共享,把read only = no改成read only = yes,同时删除writable = yes那行。
第四步:添加SMB用户并设置密码
Samba用户必须首先是Linux系统用户,创建一个专用系统用户:
sudo useradd -M -s /usr/sbin/nologin smbuser
-M参数表示不创建家目录,/usr/sbin/nologin让该用户无法登录Shell,更安全,然后把用户加入share组:
sudo usermod -aG sambashare smbuser
最后把该用户添加到Samba用户数据库:
sudo smbpasswd -a smbuser
系统会提示你输入两次密码,这一步最容易出错的地方是忘记执行,很多新手配置完SMB却连接不上,就是因为没有运行smbpasswd。
第五步:重启服务并验证配置
配置文件语法检查:
sudo testparm
看到Load smb config files OK字样就代表格式正确,然后重启服务:
sudo systemctl restart smbd
Debian系还需要重启nmbd服务才能在网络邻居看到共享:
sudo systemctl restart nmbd
设置开机自启:
sudo systemctl enable smbd nmbd
在服务器本机验证共享是否可见:
smbclient -L localhost -U smbuser
输入密码后能看到共享列表,说明服务正常。
Windows无法访问SMB共享的常见原因排查
配置完连不上,优先级按下面顺序逐项检查。
防火墙挡了445端口
SMB依赖TCP 445端口,Ubuntu默认的ufw防火墙需要放行:
sudo ufw allow samba

CentOS的firewalld执行:
sudo firewall-cmd --permanent --add-service=samba sudo firewall-cmd --reload
本地验证端口监听:
sudo ss -tlnp | grep 445
密码认证失败或用户不存在
Windows访问时弹出用户名密码框,注意格式:
- 用户名直接输入
smbuser,不要加服务器名前缀。 - 密码是你在
smbpasswd -a时设置的那个,不是Linux登录密码。 - 如果提示找不到用户名,回到第三步检查
valid users是否拼写正确。
访问被拒绝但密码正确
这大概率是Linux文件系统权限问题,在服务器上检查:
sudo -u smbuser test -w /data/share && echo "可写" || echo "不可写"
如果提示不可写,用sudo chmod 2770 /data/share和sudo chown root:sambashare /data/share重新设置权限。
网络发现关闭导致看不到共享
Windows系统在“网络”里看不到任何设备,但直接输入\IP地址能访问,这是系统服务“Function Discovery Resource Publication”未启用导致的,Win10/Win11用户到“服务”里启动该服务并设为自动即可。
SMB配置进阶:性能调优与安全加固
基础共享能用之后,这几个设置能让体验更好。
启用SMB3协议并禁用旧版本
在smb.conf的[global]段,不是[share]段,添加:
[global] server min protocol = SMB2_10 client min protocol = SMB2_10
这样会禁止SMB1连接,防止勒索软件利用老协议的漏洞,对老旧设备兼容性有疑虑的话,可以保留NT1,但强烈不建议在生产环境中开启。
调整写入缓冲提升大文件传输速度
编辑smb.conf的[global]段:
[global] socket options = TCP_NODELAY use sendfile = yes write cache size = 524288
write cache size单位是字节,524288是512KB缓存,据公开测试数据显示,多数千兆网络环境下这组参数能提升15%-20%的传输速度,注意不要在虚拟化共享存储上设置过大的写缓存,可能造成数据不一致。
配置特定IP段访问限制
如果你只希望公司无线网段和家里书房电脑访问共享,在[share]段添加:
[share] hosts allow = 192.168.1. 192.168.2.100 hosts deny = 0.0.0.0/0
hosts allow支持IP前缀和完整IP,空格分隔。

hosts deny设为全拒绝作为兜底。
SMB配置中两个高频疑问解答
做完以上所有步骤,你大概率能正常使用共享功能了,但在实际测试中还有两个问题被反复提及,这里统一解答。
问:同一台服务器既要给Windows共享,又要给Linux挂载,配置有区别吗?
有区别,但不需要改服务端核心配置,Linux客户端挂载时除了安装cifs-utils:
sudo apt install cifs-utils sudo mount -t cifs //192.168.1.10/share /mnt -o username=smbuser,uid=1000,gid=1000
区别在于mount参数里必须显式指定uid和gid,否则文件所有者会显示为root,Windows使用SMB映射网络驱动器时不需要额外配置,直接在资源管理器输入路径即可,另外Windows访问走的协议版本由系统自动协商,不需要在客户端做任何调整。
问:macOS访问同一SMB共享为什么会慢?
Mac系统默认通过mDNS广播寻找SMB服务器,如果网络环境复杂会导致延迟,在macOS上按Cmd+K,输入smb://192.168.1.10/share并勾选“记住密码”,能有效跳过自动发现环节,同时在/etc/nsmb.conf文件中添加dir_mode=0777 file_mode=0777可以解决文件权限权限导致的写入缓慢问题,这项优化对苹果设备用户非常实用,但主要在客户端操作,服务器端无需改动。
问:SMB和NFS选哪个更好?
这是个经典对比,主要看你的使用场景和客户端类型,下面用表格直接呈现差异:
| 对比维度 | SMB | NFS |
|---|---|---|
| 客户端支持 | Windows、Linux、macOS全平台原生支持 | Linux/macOS原生,Windows需额外组件 |
| 配置复杂度 | 中等,需要smbpasswd管理用户 | 简单,基于IP直接授权 |
| 安全认证 | 支持Kerberos、加密传输 | 默认AUTH_SYS,配置复杂化可启用Kerberos |
| 典型应用场景 | 办公文件共享、跨平台协作 | Linux服务器之间的高性能数据交换 |
结论很直接:如果你需要给Windows电脑提供文件共享,选SMB没有悬念,如果你是纯Linux环境跑K8s或大数据集群,NFS性能更好且配置更轻量,两条技术路线不存在谁替代谁的关系,大型企业里两者往往并存。
配置SMB的本质就是路径、权限、用户三个元素的对齐,把path指向正确的目录,给valid users配好Samba密码,确保目录可写,剩下的优化都是锦上添花,按本文顺序操作一遍,即使首次接触SMB也能在半小时内完成局域网文件共享部署。
