Ubuntu Server 挂载 Windows Server 公网 SMB 共享部署指南
1. 部署目标
将 Windows Server 上的共享目录挂载到 Ubuntu Server:
| 项目 | 配置 |
|---|---|
| Windows Server 主机名 | DOMAINNAME |
| Windows Server 公网 IP | 18.18.18.18 |
| Windows 本地目录 | D:\dbshare |
| Windows 共享名 | dbshare$ |
| Windows UNC 路径 | \\DOMAINNAME\dbshare$ |
| Ubuntu Server 公网 IP | 18.18.18.17 |
| Ubuntu 挂载目录 | /mnt/dbshare |
| Ubuntu 使用用户 | UbuntuName |
Ubuntu 中对应的 SMB 地址为:
//18.18.18.18/dbshare$
2. 重要安全要求
SMB 使用 TCP 445 端口。该端口不应向整个互联网开放。本方案必须同时满足:
- Windows Server 或上游防火墙只允许来源 IP
18.18.18.17访问18.18.18.18:445。 - 检查并收窄其他允许任意公网地址访问 TCP 445 的规则。
- 只使用 SMB 3.1.1,并强制启用 SMB 加密。
- 使用专用 Windows 账户访问共享,不建议直接使用 Administrator。
- Windows 账户必须设置强密码,Windows Hello PIN 不能代替网络账户密码。
- 长期使用时,建议改为 WireGuard、Tailscale 或站点到站点 VPN,并关闭公网 TCP 445。
微软官方也建议在互联网边界阻止入站 SMB 445:
https://learn.microsoft.com/zh-cn/windows-server/storage/file-server/smb-secure-traffic
3. Windows Server 配置
3.1 检查共享是否存在
使用管理员身份打开 PowerShell:
Get-SmbShare -Name 'dbshare$' | Select-Object Name,Path,EncryptData
预期路径应为:
D:\dbshare
如果共享尚未创建,可通过“文件夹属性 → 共享 → 高级共享”创建共享名 dbshare$。
3.2 配置共享权限和 NTFS 权限
必须同时配置两层权限:
- “共享权限”:给专用 Windows 用户授予读取或更改权限。
D:\dbshare的“安全”选项卡:给同一用户授予对应的 NTFS 权限。
3.3 强制共享使用 SMB 加密
在管理员 PowerShell 中执行:
Set-SmbShare -Name 'dbshare$' -EncryptData $true -Force
Get-SmbShare -Name 'dbshare$' | Select-Object Name,Path,EncryptData
预期结果类似:
Name Path EncryptData
---- ---- -----------
dbshare$ D:\dbshare True
3.4 限制 Windows 防火墙来源地址
打开“Windows Defender 防火墙(高级安全)→ 入站规则”,检查所有允许 TCP 445 的规则,将其作用域限制为:
远程 IP 地址:18.18.18.17
本地协议和端口:TCP 445
如果服务器位于路由器、硬件防火墙或云安全组之后,还必须在对应设备上设置同样的源地址限制:
允许:18.18.18.17 → 18.18.18.18 TCP 445
拒绝:其他公网地址 → 18.18.18.18 TCP 445
不要为本部署开放 TCP 139 或 UDP 137、138。
4. Ubuntu Server 配置
4.1 安装 CIFS 工具
sudo apt update
sudo apt install -y cifs-utils
sudo mkdir -p /mnt/dbshare
4.2 创建 SMB 凭据文件
sudo nano /root/.smb-dbshare
填写以下内容:
username=Windows专用用户名
password=Windows账户密码
domain=DOMAINNAME
如果使用 Active Directory 域账户,将 domain 改为实际 AD 域;如果使用普通工作组且认证正常,也可以不填写 domain。
保存后限制文件权限:
sudo chmod 600 /root/.smb-dbshare
sudo ls -l /root/.smb-dbshare
预期权限为:
-rw-------
不要把用户名和密码直接写进挂载命令或 /etc/fstab。
4.3 手动测试挂载
共享名包含 $,在 Shell 命令中必须用单引号包住完整 SMB 地址:
sudo mount -t cifs '//18.18.18.18/dbshare$' /mnt/dbshare \
-o credentials=/root/.smb-dbshare,vers=3.1.1,seal,uid=UbuntuName,gid=UbuntuName,file_mode=0660,dir_mode=0770
参数说明:
| 参数 | 作用 |
|---|---|
vers=3.1.1 | 强制使用 SMB 3.1.1 |
seal | 强制 SMB 数据加密 |
uid=UbuntuName,gid=UbuntuName | 将文件映射给 Ubuntu 用户 UbuntuName |
file_mode=0660 | 文件默认权限 |
dir_mode=0770 | 目录默认权限 |
4.4 验证挂载和读写
findmnt /mnt/dbshare
df -hT | grep dbshare
ls -la /mnt/dbshare
touch /mnt/dbshare/ubuntu-test.txt
ls -l /mnt/dbshare/ubuntu-test.txt
同时在 Windows 的 D:\dbshare 中确认可以看到 ubuntu-test.txt。
验证完成后可删除测试文件:
rm /mnt/dbshare/ubuntu-test.txt
5. 配置开机自动挂载
5.1 备份原始 fstab
sudo cp /etc/fstab /etc/fstab.bak-$(date +%F-%H%M%S)
5.2 添加自动挂载配置
sudo nano /etc/fstab
在文件末尾增加一行:
//18.18.18.18/dbshare$ /mnt/dbshare cifs credentials=/root/.smb-dbshare,vers=3.1.1,seal,uid=UbuntuName,gid=UbuntuName,file_mode=0660,dir_mode=0770,_netdev,nofail,x-systemd.automount 0 0
说明:/etc/fstab 中的 $ 是普通字符,不需要额外转义。
关键启动参数:
| 参数 | 作用 |
|---|---|
_netdev | 等待网络就绪后再处理网络文件系统 |
nofail | Windows 服务器不可达时,不阻塞 Ubuntu 启动 |
x-systemd.automount | 访问目录时由 systemd 自动发起挂载 |
5.3 测试 fstab
sudo umount /mnt/dbshare
sudo systemctl daemon-reload
sudo mount -a
ls -la /mnt/dbshare
findmnt /mnt/dbshare
只有上述命令没有报错,才算自动挂载配置完成。
5.4 重启验证
在维护窗口内重启 Ubuntu Server:
sudo reboot
重新登录后验证:
ls -la /mnt/dbshare
findmnt /mnt/dbshare
6. 常见故障排查
6.1 mount error(13): Permission denied
重点检查:
/root/.smb-dbshare中的用户名、密码和domain。- 使用的是 Windows 账户密码,而不是 Windows Hello PIN。
- Windows 共享权限是否允许该用户。
D:\dbshare的 NTFS 安全权限是否允许该用户。- Windows 账户是否被锁定、禁用或要求首次登录修改密码。
6.2 连接超时或端口不可达
重点检查:
- Windows Server 防火墙是否允许来源
18.18.18.17访问 TCP 445。 - 上游路由器、硬件防火墙或云安全组是否放行。
- 运营商是否阻断公网 TCP 445。
- Windows 的
Server服务是否正在运行。
6.3 No such file or directory
检查:
- Ubuntu 挂载目录
/mnt/dbshare是否存在。 - 共享名是否准确为
dbshare$。 - Windows 本地目录路径与共享路径是否匹配。
6.4 不支持协议或加密
Windows Server 正常支持 SMB 3.1.1 和加密。出现此类错误时,检查 Windows 共享加密状态和 Ubuntu 的 cifs-utils/内核日志:
sudo dmesg | tail -n 50
journalctl -b --no-pager | grep -i cifs
不要为了临时连接而降级到 SMB 1.0。
7. 运维注意事项
- Windows Server 关机、重启或公网线路中断时,Ubuntu 挂载目录会暂时不可用。
- 公网 IP 发生变化后,必须同步修改防火墙白名单和
/etc/fstab。 - 建议定期检查 Windows 登录失败记录和防火墙日志。
- 该挂载适合备份文件、安装包和普通数据文件。
- 不建议把 MySQL、PostgreSQL 等数据库的实时数据目录直接放在 CIFS/SMB 挂载中,以免出现锁、延迟和一致性问题。
- 后续切换 VPN 后,应将挂载地址改成 Windows 的 VPN/内网 IP,并关闭公网 TCP 445。
8. 完成标准
满足以下全部条件后,部署完成:
- Windows 共享
dbshare$指向D:\dbshare。 - 共享权限和 NTFS 权限均已配置。
-
EncryptData显示为True。 - TCP 445 只允许来源公网 IP
18.18.18.17。 - Ubuntu 可以成功挂载
/mnt/dbshare。 - Ubuntu 可以在共享目录中创建和读取测试文件。
-
/etc/fstab测试无错误。 - Ubuntu 重启后能够按需自动挂载。