先确认网络连通性:ping服务器ip,若不通则检查同子网、物理连接及ap隔离;再用test-netconnection或telnet验证445端口;接着确保smbd与nmbd均active运行且smb.conf无误;然后放行firewalld的samba服务并配置selinux上下文;最后检查windows端allowinsecureguestauth注册表项、禁用smbv1、清除凭据缓存。
共享目录打不开或卡死,不是配置没生效,就是访问链路在某一层被拦住了。重点不是反复改配置,而是按顺序验证每一层是否畅通。
先看网络通不通
这是最基础也最容易被跳过的一步。如果客户端连不到服务器IP,后面所有操作都白搭。
- 在Windows访问端打开命令提示符,执行 ping 服务器IP(比如
ping 192.168.1.100),确认能收到回复 - 若ping不通,检查两台设备是否在同一子网(比对
ipconfig中IPv4地址的前三段)、网线/无线是否正常、路由器是否启用AP隔离 - 进一步验证SMB端口:运行 Test-NetConnection 服务器IP -Port 445(PowerShell)或
telnet 服务器IP 445(需启用Telnet客户端),看445端口是否开放
再查Samba服务有没有真跑起来
smbd和nmbd必须同时运行,缺一不可。只启一个,Windows可能看到机器名但打不开共享。
- 登录Linux服务器,执行 systemctl status smb nmb,确认两个服务状态都是“active (running)”
- 若未启动,用
systemctl enable --now smb nmb启用并启动 - 顺手运行 testparm -v,检查
/etc/samba/smb.conf有无语法错误,也顺便确认你写的共享段是否被真正加载(它会输出所有生效参数)
接着盯住防火墙和SELinux
现代Linux发行版默认拦截137–139、445这些端口,不显式放行,Samba就等于没开。
- 如果是firewalld:运行
firewall-cmd --list-all | grep 445,没输出就补上firewall-cmd --add-service=samba --permanent && firewall-cmd --reload - 如果是SELinux:执行
getsebool samba_export_all_rw,返回off就运行setsebool -p samba_export_all_rw on;更稳妥是给共享目录打标签:semanage fcontext -a -t samba_share_t "/path/to/share(/.*)?",再restorecon -Rv /path/to/share
最后核对权限与协议兼容性
能连上不代表能进得去。常见卡死在输入密码后无响应,往往卡在认证或协议协商环节。
- Windows端检查是否启用“不安全来宾访问”:注册表路径
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters下新建DWORDAllowInsecureGuestAuth,值设为1;组策略里也开启“启用不安全的来宾登录” - 禁用SMBv1(有安全风险),但确保SMBv2/v3开启:在Windows“启用或关闭Windows功能”中确认“SMB 1.0/CIFS文件共享支持”已取消勾选
- 清除Windows凭据缓存:进入“控制面板→用户账户→凭据管理器”,删掉所有跟该服务器IP或主机名相关的Windows凭据,再重新输入正确账号密码











