Linux SMB/CIFS 网络挂载配置指南

Linux SMB/CIFS 网络挂载配置指南

目录


前置条件

1. 安装 CIFS 工具包

不同 Linux 发行版安装命令:

# CentOS / RHEL
sudo yum install -y cifs-utils

# Ubuntu / Debian
sudo apt-get install -y cifs-utils

# Fedora
sudo dnf install -y cifs-utils

2. 确认远程共享目录可访问

在挂载前,先验证远程共享目录是否可访问:

# 方法1:使用 smbclient 测试(需安装 samba-client)
smbclient -L //x.x.x.x -U admin

# 方法2:Windows 本机访问测试
# 在 Windows 资源管理器地址栏输入:
\\x.x.x.x\Kingdom\KIDM

3. 创建本地挂载点目录

# 创建挂载目录
sudo mkdir -p /usr/local/fs/file/KIDM/

# 设置目录权限(根据实际需求调整)
sudo chmod 777 /usr/local/fs/file/KIDM/

手动挂载(临时)

手动挂载在系统重启后会失效,适用于临时测试或短期使用。

命令格式

sudo mount -t cifs //<服务器IP>/<共享路径> <本地挂载点> -o <挂载选项>

完整示例

sudo mount -t cifs //x.x.x.x/Kingdom/KIDM/ /usr/local/fs/file/KIDM/ \
  -o username=admin,password=123456,uid=0,gid=0,dir_mode=0777,file_mode=0777,vers=2.0

参数说明

参数说明
-t cifs指定文件系统类型为 CIFS(通用 Internet 文件系统)
//x.x.x.x/Kingdom/KIDM/远程共享路径(Windows 服务器上的共享目录)
/usr/local/fs/file/KIDM/本地挂载点目录
username=admin远程服务器的登录用户名
password=123456远程服务器的登录密码
uid=0,gid=0挂载后文件的所属用户和组(0 为 root)
dir_mode=0777目录权限(所有用户可读写执行)
file_mode=0777文件权限(所有用户可读写执行)
vers=2.0SMB 协议版本(1.0/2.0/3.0,根据服务器支持选择)

SMB 协议版本选择

版本说明
vers=1.0SMBv1,较老系统(Windows Server 2003/XP),安全性较低,不推荐
vers=2.0SMBv2,Windows Vista/Server 2008 及以上支持
vers=2.1SMBv2.1,Windows 7/Server 2008 R2
vers=3.0SMBv3,Windows 8/Server 2012 及以上,推荐使用(如服务器支持)

永久挂载(开机自动)

通过配置 /etc/fstab 实现开机自动挂载。

步骤一:创建凭据文件(推荐)

将敏感信息(用户名密码)单独存放,提高安全性:

# 创建凭据文件
sudo vim /etc/smbcred.txt

写入以下内容:

username=admin
password=123456
# 可选:指定域
# domain=WORKGROUP

设置文件权限(仅 root 可读):

sudo chmod 600 /etc/smbcred.txt

步骤二:编辑 fstab 文件

sudo vim /etc/fstab

在文件末尾添加挂载配置:

//x.x.x.x/Kingdom/KIDM/  /usr/local/fs/file/KIDM/  cifs  credentials=/etc/smbcred.txt,uid=0,gid=0,dir_mode=0777,file_mode=0777,vers=2.0,_netdev  0  0

fstab 配置字段说明

字段示例值说明
设备/远程路径//x.x.x.x/Kingdom/KIDM/远程共享目录路径
挂载点/usr/local/fs/file/KIDM/本地挂载目录
文件系统类型cifsCIFS/SMB 文件系统
挂载选项credentials=...,vers=2.0,_netdev挂载参数(见下表)
dump 备份标志0是否被 dump 备份,0 表示不备份
fsck 检查顺序0开机时 fsck 检查顺序,0 表示不检查

常用挂载选项

选项说明
credentials=/etc/smbcred.txt指定凭据文件路径
uid=0,gid=0文件所属用户/组
dir_mode=0777目录权限
file_mode=0777文件权限
vers=2.0SMB 协议版本
_netdev等待网络就绪后再挂载(重要!)
nofail挂载失败不阻止系统启动
iocharset=utf8设置字符集,避免中文乱码
rw读写模式(默认)
ro只读模式

步骤三:验证挂载

# 挂载所有 fstab 中定义的文件系统
sudo mount -a

# 查看挂载结果
df -h | grep KIDM

# 或者查看详细挂载信息
mount | grep cifs

常用操作

查看当前挂载

# 查看所有挂载
df -h

# 仅查看 CIFS 挂载
mount -t cifs

# 查看 CIFS 挂载(mount newer syntax)
findmnt -t cifs

卸载挂载

# 普通卸载
sudo umount /usr/local/fs/file/KIDM/

# 如果提示 "target is busy",强制卸载(谨慎使用)
sudo umount -l /usr/local/fs/file/KIDM/

# 或者先查看占用进程
lsof /usr/local/fs/file/KIDM/
# 根据输出 kill 掉占用进程后再卸载

重新挂载

# 重新挂载(修改选项后生效)
sudo mount -o remount /usr/local/fs/file/KIDM/

测试 fstab 配置

# 检查 fstab 语法错误(不会实际挂载)
sudo mount -a -f

# 实际挂载并测试
sudo mount -a

故障排查

常见错误及解决方案

1. mount error(13): Permission denied

原因:用户名密码错误或权限不足

解决

# 验证凭据是否正确
smbclient -L //x.x.x.x -U admin

# 检查远程共享权限
# Windows: 右键共享文件夹 -> 属性 -> 共享 -> 高级共享 -> 权限
2. mount error(112): Host is down

原因:网络不通或 SMB 协议版本不匹配

解决

# 测试网络连通性
ping x.x.x.x

# 测试 SMB 端口
telnet x.x.x.x 445

# 尝试不同协议版本
sudo mount -t cifs //x.x.x.x/Kingdom/KIDM/ /mnt/test -o username=admin,password=123456,vers=1.0
sudo mount -t cifs //x.x.x.x/Kingdom/KIDM/ /mnt/test -o username=admin,password=123456,vers=2.0
sudo mount -t cifs //x.x.x.x/Kingdom/KIDM/ /mnt/test -o username=admin,password=123456,vers=3.0
3. mount error(2): No such file or directory

原因:共享路径不存在或共享名错误

解决

# 列出服务器上所有共享目录
smbclient -L //x.x.x.x -U admin

# 检查路径大小写(Windows 不区分,但 CIFS 可能区分)
4. CIFS VFS: cifs_mount failed with return code = -22

原因:挂载选项参数错误

解决

# 检查是否安装了 cifs-utils
rpm -qa | grep cifs-utils  # CentOS
dpkg -l | grep cifs-utils  # Ubuntu

# 检查 fstab 语法
sudo mount -a -v
5. 开机挂载失败

原因:网络未就绪时就尝试挂载

解决

  • 确保添加了 _netdev 选项
  • 可添加 nofail 避免阻塞启动
//x.x.x.x/Kingdom/KIDM/  /usr/local/fs/file/KIDM/  cifs  credentials=/etc/smbcred.txt,_netdev,nofail  0  0

查看详细日志

# 查看内核日志
dmesg | tail -20

# 查看系统日志
journalctl -xe

# 实时监控挂载
sudo mount -a -v

常见问题 FAQ

Q1: 密码包含特殊字符怎么办?

使用转义符或凭据文件:

# 方法1:密码中特殊字符用 \ 转义
password=P@ss\!123

# 方法2:使用凭据文件(推荐)
# /etc/smbcred.txt 中直接写原始密码
password=P@ss!123

Q2: 如何让普通用户也能读写挂载目录?

# 设置 uid 和 gid 为普通用户的 ID
id username  # 查看用户 uid 和 gid

# 修改挂载选项
uid=1000,gid=1000,dir_mode=0755,file_mode=0755

Q3: 如何挂载 Windows 隐藏共享(如 C$)?

# Windows 管理共享使用 $ 结尾
sudo mount -t cifs //x.x.x.x/C$ /mnt/c-drive -o username=admin,password=123456,vers=3.0

Q4: 如何查看远程服务器支持的 SMB 版本?

# 使用 nmap 扫描 SMB 协议
nmap -p 445 --script smb-protocols x.x.x.x

Q5: 挂载后中文文件名乱码?

添加字符集选项:

sudo mount -t cifs //x.x.x.x/Kingdom/KIDM/ /usr/local/fs/file/KIDM/ \
  -o username=admin,password=123456,iocharset=utf8,vers=2.0

快速参考

# === 安装 ===
sudo yum install -y cifs-utils          # CentOS
sudo apt-get install -y cifs-utils      # Ubuntu

# === 手动挂载 ===
sudo mount -t cifs //server/share /mnt/point \
  -o username=user,password=pass,vers=2.0

# === 永久挂载 ===
echo "username=user" | sudo tee /etc/smbcred.txt
echo "password=pass" | sudo tee -a /etc/smbcred.txt
sudo chmod 600 /etc/smbcred.txt

echo "//server/share /mnt/point cifs credentials=/etc/smbcred.txt,vers=2.0,_netdev 0 0" \
  | sudo tee -a /etc/fstab

sudo mount -a

# === 查看 ===
df -h | grep cifs

# === 卸载 ===
sudo umount /mnt/point

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaobangsky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值