让局域网内所有设备(电脑、手机、电视、NAS)通过这台 Windows PC 访问同一个共享文件夹,无需额外硬件、无需 U 盘拷贝。
目录
- 已更新傻瓜式执行文件V2.1
- 原理说明
- 安全风险概述(必读)
- 系统兼容性说明
- 安全措施与备份机制
- 一键配置(推荐)
- 手动配置步骤
- 防火墙精准放行 SMB 端口
- NTFS 权限精细控制
- 验证共享是否正常运行
- 配置局域网其他设备访问
- 安全加固(强烈推荐)
- 常见问题与排错
执行文件更新
20260704:已更新为执行文件v2.1,以管理员身份运行即可;
一键下载地址:https://download.csdn.net/download/hjjhl/93071685?spm=1001.2014.3001.5501
原理说明
Windows 文件共享基于SMB(Server Message Block)协议。本机将某个文件夹"发布"为网络共享,局域网其他设备通过地址\\192.168.x.x\共享名就能读写里面的文件。
核心依赖三个组件:
| 组件 | 作用 |
|---|---|
| Server 服务(LanmanServer) | 提供文件共享能力,监听 TCP 445 端口 |
| Workstation 服务(LanmanWorkstation) | 本机作为客户端访问其他共享 |
| Computer Browser 服务 | 网络发现(非必须,Win10+ 已逐步弃用) |
共享范围是文件夹级别,而非整个分区。强烈建议只共享需要的目录,不要共享 C 盘根目录。
SMB 协议版本:Win10/11 默认启用 SMB 3.1.1(加密、安全),旧版的 SMB 1.0/CIFS 应主动禁用。
安全风险概述(必读)
文件共享本质上是开放本机端口给局域网,如果配置不当,存在以下风险:
| 风险 | 等级 | 说明 |
|---|---|---|
| 未授权访问 | 🔴 高 | 无密码共享 = 局域网任何设备可随意读写 |
| 勒索病毒传播 | 🔴 高 | SMB 1.0 是 WannaCry 等勒索病毒的主要传播途径 |
| 密码爆破 | 🟡 中 | 弱密码可被暴力破解 |
| 端口扫描 | 🟡 中 | 445 端口是恶意扫描的首选目标 |
| 数据泄露 | 🟡 中 | 无权限控制的共享文件夹文件可被随意复制 |
⚠核心安全原则:共享独立文件夹 + 强密码账号 + 仅 SMB 2.0/3.0 + 防火墙限制来源 IP + NTFS 最小权限。
系统兼容性说明
✅ 完全支持
| 操作系统 | 说明 |
|---|---|
| Windows 11(所有版本) | 默认 SMB 3.1.1,推荐使用 |
| Windows 10(所有版本) | 默认 SMB 3.1.1,推荐使用 |
| Windows Server 2016+ | 完整 SMB 功能,含文件服务器资源管理器 |
⚠️ 部分受限
| 操作系统 | 问题 |
|---|---|
| Windows 8 / 8.1 | 可用,但 SMB 加密等功能不如 Win10+ 完整 |
| Windows 7 | 默认 PowerShell 2.0,脚本部分功能受限;SMB 最高 2.1 |
| Windows Server 2008 R2 / 2012 | 同 Windows 7,需手动升级 PowerShell |
🚫 风险提醒
| 操作系统 | 原因 |
|---|---|
| Windows XP / Vista | SMB 1.0 为主,存在已知安全漏洞,强烈不建议用作共享服务器 |
建议:优先在Windows 10/11 专业版或企业版上部署。专业版及以上支持更细粒度的共享权限和审计策略。
安全措施与备份机制
1. 操作前自动备份共享配置
工具在执行任何修改前,会自动将当前所有共享配置导出到%TEMP%\smb-server-backup.txt和%TEMP%\smb-server-backup.reg文件,包括:
- 所有已发布共享的路径、名称、权限
- SMB 协议配置(是否禁用 SMB 1.0 等)
- 防火墙规则快照
恢复方法:运行%TEMP%\smb-server-backup.reg可部分恢复注册表级别的共享配置。
2. 端口冲突与安全检测
配置前工具会检查:
- TCP 445 端口是否已被占用(是否存在其他 SMB 软件)
- SMB 1.0 是否已禁用(未禁用的给出警告)
- 是否已设置密码(未设密码的本地账户用作共享访问是不安全的)
3. 操作确认提示
对以下关键操作在执行前弹出(y/n)确认:
- 新建共享(含权限范围确认)
- 删除共享
- 禁用/启用 SMB 1.0
- 删除防火墙规则
- 重置所有共享
4. 操作日志记录
所有操作写入日志文件:
%TEMP%\smb-server.log日志内容包括:操作时间、共享名、操作类型、操作结果。方便事后排查问题。
5. 一键撤销
工具内置「删除全部共享」功能,可一键移除所有网络共享,恢复仅本机可访问的状态。
注意:这会删除所有共享定义,但不会删除文件夹内容。
一键配置(推荐)
以管理员身份运行 PowerShell,执行以下命令快速创建一个仅对当前用户可见的文件共享:
# ===== 1. 创建要共享的文件夹(如已存在则跳过) =====$sharePath="D:\SharedFiles"New-Item-ItemType Directory-Path$sharePath-Force# ===== 2. 设置 NTFS 权限(仅允许当前用户完全控制) =====$acl=Get-Acl$sharePath$acl.SetAccessRuleProtection($true,$false)# 禁用继承,避免意外继承父目录的开放权限$rule=New-ObjectSystem.Security.AccessControl.FileSystemAccessRule($env:USERNAME,"FullControl","ContainerInherit,ObjectInherit","None","Allow")$acl.AddAccessRule($rule)Set-Acl$sharePath$acl# ===== 3. 创建 SMB 共享 =====# Grant-Name:FullControl Change:ReadWrite Read:只读New-SmbShare-Name"SharedFiles"-Path$sharePath-FullAccess$env:USERNAME-Description"局域网文件共享"# ===== 4. 禁用 SMB 1.0(安全加固) =====Disable-WindowsOptionalFeature-Online-FeatureName SMB1Protocol-NoRestart-ErrorAction SilentlyContinue# ===== 5. 防火墙精准放行(仅允许局域网子网) =====# 获取本机局域网子网$localIP=(Get-NetIPAddress-AddressFamily IPv4|Where-Object{$_.IPAddress-notmatch"^127\.|^169\.|^0\."-and$_.PrefixOrigin-ne"Duplicate"}|Select-Object-First 1)$subnet=($localIP.IPAddress-replace"\d+$","0")+"/24"# 先删除旧规则(如有)netsh advfirewall firewall delete rule name="SMB 文件共享"2>$null# 新建精准规则netsh advfirewall firewall add rule name="SMB 文件共享"protocol=tcpdir=in localport=445 remoteip=$subnetaction=allow# ===== 6. 确保 Server 服务正在运行 =====Set-ServiceLanmanServer-StartupType AutomaticStart-ServiceLanmanServerWrite-Host""Write-Host"配置完成!"-ForegroundColor GreenWrite-Host"局域网内其他设备可通过 \\$($localIP.IPAddress)\SharedFiles 访问"-ForegroundColor Cyan将
D:\SharedFiles替换为你实际想共享的文件夹路径。如需允许多个用户/组访问,参考下方「NTFS 权限精细控制」章节。
手动配置步骤
步骤 1:创建共享文件夹
在资源管理器中选定磁盘(如 D 盘),新建文件夹,命名为SharedFiles。
步骤 2:打开文件夹共享向导
右键点击该文件夹 →属性→ 切换到共享选项卡 → 点击共享…按钮。
步骤 3:选择授权用户
在下拉菜单中选择要授权的系统账号(如当前管理员账号),点击添加。然后在权限级别下拉中选择:
| 权限级别 | 说明 |
|---|---|
| 读取 | 只能查看和复制文件,不能修改、删除 |
| 读/写 | 可以读取、创建、修改和删除文件 |
⚠不要选择 Everyone(所有人),这会让局域网内任何设备都可访问。至少指定一个带密码的用户。
步骤 4:完成共享
点击共享→ 记录下网络路径(如\\PC-NAME\SharedFiles)→ 点击完成。
步骤 5:(可选)高级共享设置
右键文件夹 →属性→共享→高级共享…:
- 勾选共享此文件夹
- 共享名:可自定义(推荐英文)
- 将同时共享的用户数量限制为:根据实际需求设置,不建议过大
- 点击权限按钮,可进一步限制共享级权限(双重保险)
步骤 6:确认 Server 服务运行
Get-ServiceLanmanServer应显示Running。
防火墙精准放行 SMB 端口
⚠不建议直接开放 445 端口给全部 IP(any),应限制为局域网子网范围。
最佳实践:仅允许局域网子网
# 假设本机 IP 为 192.168.1.100,子网掩码 255.255.255.0# 则允许源 IP:192.168.1.0/24netsh advfirewall firewall add rule name="SMB 文件共享"` protocol=tcpdir=in localport=445 ` remoteip="192.168.1.0/24"action=allow如需同时关联 NetBIOS(旧设备兼容)
部分旧设备(如老式网络播放器、打印机)可能需要 TCP 139:
netsh advfirewall firewall add rule name="SMB NetBIOS"` protocol=tcpdir=in localport=139 ` remoteip="192.168.1.0/24"action=allow图形界面操作
Win + R→ 输入wf.msc→ 回车- 左侧入站规则→ 右侧新建规则…
- 规则类型:端口→ TCP,特定本地端口:445
- 操作:允许连接
- 配置文件:专用(局域网环境不要勾选公用)
- 在「作用域」步骤中,远程 IP 地址选择「下列 IP 地址」→ 添加局域网子网(如
192.168.1.0/24) - 名称:
SMB 文件共享
NTFS 权限精细控制
共享权限只能在网络访问层控制读/写,真正的安全防线是NTFS 文件系统权限。建议遵循以下原则:
原则一:最小权限
只授予完成任务所需的最低权限:
# 仅读取(适用于资料库、照片库)$acl=Get-Acl"D:\PhotoLibrary"$rule=New-ObjectSystem.Security.AccessControl.FileSystemAccessRule("UserName","ReadAndExecute","ContainerInherit,ObjectInherit","None","Allow")$acl.AddAccessRule($rule)Set-Acl"D:\PhotoLibrary"$acl# 完全控制(适用于工作目录)$acl=Get-Acl"D:\WorkDir"$rule=New-ObjectSystem.Security.AccessControl.FileSystemAccessRule("UserName","FullControl","ContainerInherit,ObjectInherit","None","Allow")$acl.AddAccessRule($rule)Set-Acl"D:\WorkDir"$acl原则二:禁用继承后自定义
共享文件夹应从父目录断开权限继承,避免意外继承 C 盘或 D 盘根目录的宽松权限:
$acl=Get-Acl$sharePath$acl.SetAccessRuleProtection($true,$false)# 断开继承,转为显式权限Set-Acl$sharePath$acl原则三:共享权限 + NTFS 权限双重控制
网络访问时的最终权限 =共享权限∩NTFS 权限(取交集):
| 共享权限 | NTFS 权限 | 实际效果 |
|---|---|---|
| 完全控制 | 完全控制 | 完全控制 |
| 读取 | 完全控制 | 只读 |
| 完全控制 | 读取 | 只读 |
| 完全控制 | 无 | 拒绝访问 |
最佳实践:共享权限设为「完全控制」以简化管理,把真正的权限控制交给 NTFS。
验证共享是否正常运行
方法一:查看本机所有共享
Get-SmbShare应列出所有已发布的共享及其路径、描述。
方法二:本机回环测试
net view \\localhost方法三:检查端口监听
netstat-an|findstr":445"应看到TCP 0.0.0.0:445 0.0.0.0:0 LISTENING。
方法四:检查 SMB 协议版本
Get-SmbConnection|Format-TableServerName,DialectDialect字段显示协议版本(如 3.1.1)。
方法五:从其他电脑测试连接
在局域网内另一台 Windows 电脑上:
net view \\192.168.x.x(将192.168.x.x替换为 SMB 服务器的 IP)
配置局域网其他设备访问
Windows 客户端
资源管理器方式:
- 按
Win + R→ 输入\\192.168.1.100\SharedFiles→ 回车 - 输入服务器上的用户名和密码 → 勾选「记住我的凭据」
- 映射为网络驱动器(持久连接):
net use Z: \\192.168.1.100\SharedFiles /persistent:yes
macOS 客户端
- 访达→ 菜单栏前往→连接服务器…(⌘K)
- 输入
smb://192.168.1.100/SharedFiles - 用户名密码认证 → 连接
Linux 客户端
# 挂载sudomount-tcifs //192.168.1.100/SharedFiles /mnt/share-ousername=你的用户名,vers=3.0# 卸载sudoumount/mnt/share# 持久化挂载(编辑 /etc/fstab)//192.168.1.100/SharedFiles /mnt/share cifsusername=你的用户名,password=你的密码,vers=3.1.1,uid=1000,gid=100000⚠
/etc/fstab中明文存密码不安全,建议用credentials=/root/.smbcredentials外挂凭据文件。
安卓手机
- 安装Solid Explorer/CX 文件管理器/ES 文件浏览器
- 添加 SMB/CIFS 连接 → 输入 IP 和凭据
iPhone / iPad
- 文件App → 右上角
⋯→连接服务器→ 输入smb://192.168.1.100 - 输入用户名密码
智能电视 / 机顶盒
- 大多内置网络文件浏览器或媒体中心,可添加 SMB 源
- 如果搜不到,检查电视是否在同一子网且支持 SMB 2.0+
安全加固(强烈推荐)
加固一:彻底禁用 SMB 1.0/CIFS
SMB 1.0 是 WannaCry 勒索病毒的主要传播媒介,且没有任何合理理由在新环境中启用:
# 禁用 SMB 1.0Disable-WindowsOptionalFeature-Online-FeatureName SMB1Protocol-NoRestart# 验证是否已禁用Get-WindowsOptionalFeature-Online-FeatureName SMB1Protocol|Select-ObjectState加固二:启用 SMB 加密(如需敏感数据共享)
# 对特定共享启用加密Set-SmbShare-Name"SharedFiles"-EncryptData$true注意:启用加密后,旧版 SMB 客户端(如老旧安卓设备)可能无法连接。
加固三:禁止匿名/访客访问
# 拒绝空密码的网络访问Set-ItemProperty-Path"HKLM:\SYSTEM\CurrentControlSet\Control\Lsa"`-Name"LimitBlankPasswordUse"-Value 1-TypeDWord# 禁用 Guest 账户net user guest/active:no加固四:限制 SMB 连接数为合理值
# 限制同时连接数,防止恶意连接耗尽资源Set-SmbServerConfiguration-MaxChannelPerSession 8-MaxThreadsPerQueue 20加固五:监听仅限内网 IP
如果本机有多个网卡(如同时连着外网),可将 SMB 绑定到内网网卡上,避免暴露到公网:
# 查阅当前 SMB 配置Get-SmbServerConfiguration|Select-ObjectEnableSMB*# 注意:Windows 桌面版不支持 interface-specific SMB 绑定,# 应通过防火墙规则精准控制(仅允许局域网 IP 来源)加固六:启用审计日志
# 开启对象访问审计auditpol/set/subcategory:"File System"/success:enable/failure:enable# 对共享文件夹设置审计项(需要事件查看器中查看)$acl=Get-Acl"D:\SharedFiles"$auditRule=New-ObjectSystem.Security.AccessControl.FileSystemAuditRule("Everyone","ReadData,WriteData","ContainerInherit,ObjectInherit","Success,Failure")$acl.AddAuditRule($auditRule)Set-Acl"D:\SharedFiles"$acl审计日志可在事件查看器 → Windows 日志 → 安全中查看(事件 ID 4663 等)。
加固七:定期检查共享
# 查看所有共享(留意是否有不认识的共享名)Get-SmbShare# 查看所有已建立的 SMB 连接Get-SmbConnection# 查看已打开的共享文件Get-SmbOpenFile常见问题与排错
Q1:局域网其他电脑看不到共享
- 检查防火墙:确认 TCP 445 已放行,且作用域限定在正确的子网范围内
- 检查服务:
Get-Service LanmanServer确认 Running - 检查网络类型:控制面板 → 网络和共享中心 → 确认网络为「专用网络」而非「公用网络」
- 尝试用 IP 直连:
\\192.168.x.x\SharedFiles,如果 IP 方式能访问但计算机名不行,说明是 NetBIOS/DNS 解析问题
Q2:提示「无法访问…你没有权限」
- 最常见原因:共享账号没有密码。Windows 默认禁止空密码账号网络登录
- 解决:为该账号设置密码,或检查
LimitBlankPasswordUse注册表值 - 其次排查:共享权限和 NTFS 权限是否同时设置正确
Q3:能看见但无法写入
- 检查 NTFS 权限:确认该用户是否有「修改」或「完全控制」权限
- 检查共享权限:确认该用户是否有「更改」或「完全控制」权限
- 注意:即使 NTFS 设为完全控制,共享权限仅设为「读取」的话,结果就是只读
Q4:安卓/iOS 设备无法连接
- 部分旧设备仅支持 SMB 1.0(如果已禁用 SMB 1.0 则连不上)
- 解决:使用支持 SMB 2.0+ 的文件管理器(如 Solid Explorer)
- 或临时启用 SMB 1.0(不推荐):
Enable-WindowsOptionalFeature-Online-FeatureName SMB1Protocol⚠ 启用 SMB 1.0 会大幅增加安全风险,仅在确认无其他方案时使用
Q5:如何删除不再需要的共享
Remove-SmbShare-Name"SharedFiles"-ForceQ6:共享文件夹在 D 盘,但 D 盘满了怎么办
- 共享文件夹可以放在任何磁盘,也可以使用 NTFS 挂载点(Junction)将不同盘符映射进来
- 使用
mklink创建目录符号链接:mklink /D "D:\SharedFiles\Extra" "E:\ExtraData"
Q7:如何重置所有共享(恢复无共享状态)
Get-SmbShare|Where-Object{$_.Name-notin@("ADMIN$","C$","IPC$","NETLOGON","SYSVOL")}|Remove-SmbShare-Force
ADMIN$、C$等是系统默认管理共享,无需也不能删除。
Q8:Windows 更新后共享失效
- 大版本更新可能重置网络类型为「公用网络」,重新设为「专用网络」即可
- 防火墙规则一般不会丢失,但建议更新后复查
参考
- Microsoft Docs: SMB Overview
- Microsoft Docs: New-SmbShare
- Microsoft: How to enable SMB encryption
- MSRC: Stop using SMB1