Linux 通过 SMB 协议挂载 Windows 共享文件夹
目录
一、前言
SMB 协议简介
典型使用场景
本文目标
二、环境准备
三、安装必要工具
四、手动挂载
4.1 创建挂载目录
4.2 手动挂载命令
4.3 文件测试
五、设置自动挂载(推荐)
5.1 创建凭据文件
5.2 自动挂载
5.3 文件测试
六、进阶用法
一、前言
SMB 协议简介
SMB(Server Message Block)协议,是一种应用层网络协议,最初由 IBM 提出,后由 Microsoft 进行扩展,是 Windows 系统默认使用的网络文件共享协议。在 Linux 系统中,SMB 协议通常通过 CIFS(Common Internet File System) 实现和访问。
典型使用场景
在许多小微型企业中,Linux 通常作为公司服务器系统,用于承载网站、数据库、业务系统等核心服务。为了保障数据的完整性和安全性,企业往往需要将这些关键数据定期备份至其他平台,如 Windows 文件服务器、NAS 存储设备等。
在这种跨平台的数据备份与恢复场景中,SMB 协议凭借其广泛的兼容性和稳定性,成为首选方案。通过在 Ubuntu 等 Linux 系统中挂载 SMB 协议的共享文件夹,可以实现以下目的:
-
将数据库、项目文件、日志等自动备份到远程 SMB 存储设备;
-
实现与 Windows 桌面系统之间的数据同步与交互;
-
构建便捷的数据灾备方案,在主服务器故障时快速恢复数据;
-
利用现有 NAS 或老旧 Windows 服务器,节省预算成本,提高资源利用率。
这种方式不仅部署简单、易于维护,而且无需额外复杂配置,适合 IT 资源有限的中小团队。
本文目标
本篇教程将带你掌握如何在 常见Linux系统(Ubuntu)中挂载 SMB 协议的共享文件夹。包括基本的手动挂载测试,以及如何设置开机自动挂载,确保系统重启后依然能无缝访问共享目录。
二、环境准备
-
Ubuntu 22.04.4 LTS
-
SMB 服务端(Windows 或 群晖NAS)
三、安装必要工具
sudo apt update
sudo apt install cifs-utils -y
在 Ubuntu 等 Linux 系统中,要想通过 SMB 协议访问 Windows 或 NAS 提供的共享文件夹,必须使用 CIFS(Common Internet File System)协议进行挂载。而 cifs-utils 就是用于支持 CIFS 挂载操作的一组工具包。
具体作用包括:
-
提供 mount.cifs 命令,用于挂载远程 SMB 共享到本地目录
-
支持用户名、密码、域等认证参数
-
支持指定 SMB 协议版本(如 vers=2.0,vers=3.0 等)
-
支持挂载选项如只读、IO 缓存、权限映射等
-
提供凭据文件支持,提升挂载过程中的安全性
四、手动挂载
4.1 创建挂载目录
创建一个目录作为挂载点,通常放在 mnt 目录下:
sudo mkdir /mnt/share-smb
4.2 手动挂载命令
Windows 系统(IP:192.168.1.169)创建共享文件夹 share-smb(同名方便后续分辨),使用 Everyone用户 并配置 读/写 权限:
执行 mount 命令进行挂载:
sudo mount -t cifs //192.168.1.169/share-smb /mnt/share-smb -o username=everyone
注意:
Everyone用户是没有密码的!所以在执行 mount 命令后,当提示:
Password for everyone@//192.168.1.169/share-smb:
时,直接回车(使用空密码)
4.3 文件测试
在 Windows 共享文件夹下新建一个文件,如:新建 文本文档.txt
在 Ubuntu 下查看已挂载的共享目录:
确认 挂载成功!
五、设置自动挂载(推荐)
5.1 创建凭据文件
sudo vim /etc/.smb-credentials
在 Linux 系统中,文件名前加上点号(
.
)的作用:将文件设置为“隐藏文件”。好处是:1. 防止运维人员或普通用户误删或误操作该文件;
2. 符合 Linux 系统的命名规范和运维习惯(配置文件和敏感数据文件以
.
开头);3. 尽管隐藏并不等于加密,可以 降低暴露的几率。
内容:
username=share_username
password=share_passwd
domain=WORKGROUP
修改文件权限,确保只有 root用户 可读写:
sudo chmod 600 /etc/.smb-credentials
5.2 自动挂载
如果希望系统启动时自动挂载,需要修改 /etc/fstab
文件:
sudo vim /etc/fstab
将以下行添加到文件中:
//192.168.1.169/share-smb /mnt/share-smb cifs credentials=/etc/.smb-credentials,dir_mode=0757,file_mode=0757 0 0
- //192.168.1.169/share-smb:远程 SMB 共享路径(即共享服务器地址和共享名)
- /mnt/share-smb:共享目录本地挂载点
- cifs:表示使用 CIFS(SMB 协议)挂载
- credentials=/etc/.smb-credentials:指定存放 SMB 登录凭据的文件路径
- dir_mode=0757:设置挂载后目录的权限,方便其他服务(用户)写入/备份文件夹
- file_mode=0757:设置挂载后文件的默认权限,方便其他服务(用户)写入/备份文件
- 0 0:不进行 dump(系统备份),启动时不自动进行 fsck 文件系统检查(适用于非本地磁盘),默认值
5.3 文件测试
修改 Windows 共享文件夹权限:
重启 Ubuntu 系统:
sudo reboot
查看 挂载目录权限:
普通用户写入文件:
touch /mnt/share-smb/test.file
在 Windows 下查看共享文件夹:
确认 自动挂载成功、写入成功!
六、进阶用法
在实际生产环境中,仅仅挂载 SMB 共享目录并不能满足企业的数据管理需求。对于小微型企业的 Linux 服务器,更常见的需求是:
-
自动将关键数据(如数据库备份、项目文件等)定时复制到 SMB 共享目录
-
定期清理过期文件,避免共享存储空间被旧数据占满
这类需求可以通过一个简单的 Bash 脚本 + cron 定时任务 实现。