Linux挂载Windows共享失败主因是缺cifs-utils包、vers参数不匹配Windows版本、或Windows端未启用网络发现/文件共享及防火墙放行445端口,而非密码错误。

能挂,但直接用 mount -t cifs 命令挂不上去,大概率是因为缺协议支持、参数写错、或 Windows 端没开对服务——不是 Linux 不行,是两边没对上“语言”。
Linux 挂载前必须装 cifs-utils
没装这个包,mount -t cifs 会报错 unknown filesystem type 'cifs' 或提示找不到 /sbin/mount.cifs。
- Ubuntu/Debian:
sudo apt install cifs-utils - CentOS/RHEL:
sudo yum install cifs-utils或sudo dnf install cifs-utils - 装完验证:
mount.cifs --version能输出版本即成功
Windows 端共享设置常被忽略的三个点
Linux 挂不上,80% 是卡在这三处,不是密码错了,是根本连不到共享服务。
- 必须开启「网络发现」和「文件和打印机共享」(控制面板 → 网络和共享中心 → 高级共享设置)
- Windows 防火墙要放行「文件和打印机共享」规则(端口 TCP 445),不能只关防火墙
- 共享名 ≠ 文件夹名:右键文件夹 → 属性 → 共享 → 高级共享 → 共享名填的是方括号里的那个名字,比如
//192.168.1.100/win_share中的win_share
mount 命令里 vers 参数必须匹配 Windows 版本
Windows 10/11/Server 2016+ 默认禁用 SMB 1.0,用 vers=1.0 必然失败;而旧版 Linux 内核可能不支持 vers=3.0。
- Windows 10/11/Server 2016+:
vers=3.0(首选)或vers=2.1 - Windows 7/Server 2012:
vers=2.1 - 仅当明确知道对方开了 SMB 1.0 才用
vers=1.0(不推荐) - 示例命令:
sudo mount -t cifs //192.168.1.100/win_share /mnt/win_share -o username=user,password=pass,vers=3.0
永久挂载时密码不能明文写进 /etc/fstab
直接在 fstab 里写 password=xxx 是严重安全隐患,且新版 systemd 可能拒绝加载含明文密码的条目。
- 正确做法:新建凭证文件,如
/etc/smbcredentials,内容为两行:username=user和password=pass - 权限必须设为
600:sudo chmod 600 /etc/smbcredentials - fstab 条目写成:
//192.168.1.100/win_share /mnt/win_share cifs credentials=/etc/smbcredentials,vers=3.0,uid=1000,gid=1000 0 0 - 加
uid/gid是为了让普通用户能读写,否则默认属主是 root
最易被忽略的其实是 Windows 端的 SMB 协议版本策略和 Linux 内核对 CIFS 的兼容粒度——同一个命令,在 Ubuntu 22.04 上跑得通,换到 CentOS 7 可能就卡在 mount error(112): Host is down,这时候别急着重启,先查 vers 和 firewalld 规则。


















