Linux Samba 共享配置与故障排查指南
📋 文档概述
本文档记录了在 OpenEuler 服务器上配置 Samba 共享服务,并为 Ubuntu 11 客户端提供访问权限的完整过程。重点解决了 Samba 版本不兼容、服务启动失败和客户端连接问题。
🎯 环境信息
服务器端
- 系统: OpenEuler
- Samba 版本: 4.19.3
- 共享目录:
/backup/mysql_38_data_bak - 共享名称:
mysql_backup - 访问用户:
wcs(可读写访问)
客户端
- 系统: Ubuntu 11
- Samba 客户端版本: 3.5.8
- 目标: 挂载服务器共享目录
📝 完整配置流程
第一阶段:服务器端 Samba 服务安装与配置
1.1 安装 Samba 软件包
# OpenEuler 系统
sudo dnf install samba samba-client samba-common
1.2 配置 Samba 共享
编辑配置文件 /etc/samba/smb.conf:
sudo nano /etc/samba/smb.conf
正确配置示例(注意注释格式):
[global]
workgroup = WORKGROUP
server string = Samba Server
security = user
map to guest = bad user
# 兼容旧客户端的关键配置
client min protocol = NT1
server min protocol = NT1
client max protocol = SMB3
server max protocol = SMB3
[mysql_backup]
comment = MySQL 38 Data Backup Directory
path = /backup/mysql_38_data_bak
browseable = yes
writable = yes
read only = no
guest ok = yes
# 允许匿名访问(如果需要密码访问改为 no)
create mask = 0775
directory mask = 0775
force create mode = 0775
force directory mode = 0775
⚠️ 重要提醒:
- Samba 配置文件中不允许在参数值后面直接跟注释
- 错误示例:guest ok = yes # 这是注释(会导致服务启动失败)
- 正确示例:guest ok = yes(注释单独一行)
1.3 设置目录权限
# 确保共享目录存在并有正确权限
sudo mkdir -p /backup/mysql_38_data_bak
sudo chmod 775 /backup/mysql_38_data_bak
# 或者设置专用用户组
sudo groupadd sambashare
sudo usermod -aG sambashare wcs
sudo chgrp sambashare /backup/mysql_38_data_bak
1.4 创建 Samba 用户(如需密码访问)
# 添加用户到 Samba(用户需已存在系统)
sudo smbpasswd -a wcs
# 输入两次 Samba 专用密码
# 启用用户
sudo smbpasswd -e wcs
第二阶段:Samba 服务启动与管理
2.1 OpenEuler 中的服务管理
# 检查可用服务
systemctl list-unit-files | grep -i samba
# 启动 NMB 服务(NetBIOS 名称服务)
sudo systemctl start nmb
sudo systemctl enable nmb
# 启动 SMB 服务(文件共享服务)
sudo systemctl start smb
sudo systemctl enable smb
2.2 服务启动失败排查
如果 smb 服务启动失败:
# 查看详细错误信息
journalctl -xeu smb.service
journalctl -u smb -f
# 常见错误:配置文件注释格式错误
# 错误信息示例:
# set_variable_helper(no # 允许匿名访问...): value is >
# 修复方法:确保注释单独成行
2.3 验证服务状态
# 检查服务运行状态
systemctl status smb
systemctl status nmb
# 检查进程
ps aux | grep -E "smbd|nmbd"
# 检查端口监听
netstat -tlnp | grep -E "139|445"
# 测试配置文件语法
sudo testparm
2.4 防火墙配置
# 开放 Samba 相关端口
sudo firewall-cmd --permanent --add-service=samba
sudo firewall-cmd --reload
# 或手动开放端口
sudo firewall-cmd --permanent --add-port=139/tcp
sudo firewall-cmd --permanent --add-port=445/tcp
sudo firewall-cmd --permanent --add-port=137/udp
sudo firewall-cmd --permanent --add-port=138/udp
sudo firewall-cmd --reload
第三阶段:客户端配置与连接
3.1 Ubuntu 客户端安装必要软件
# Ubuntu 11 等较旧系统
sudo apt-get update
sudo apt-get install smbclient cifs-utils
3.2 客户端连接测试
由于客户端 Samba 版本较旧(3.5.8),需要特殊处理:
# 方法1:指定协议版本(重要!)
smbclient -L //192.168.0.22 -U wcs -m NT1
# 或
smbclient -L //192.168.0.22 -U wcs -m SMB2
# 方法2:直接挂载测试
sudo mkdir -p /mnt/mysql_backup
# 尝试不同 SMB 版本
sudo mount -t cifs //192.168.0.22/mysql_backup /mnt/mysql_backup \
-o username=wcs,password=密码,vers=1.0
# 或者
sudo mount -t cifs //192.168.0.22/mysql_backup /mnt/mysql_backup \
-o username=wcs,password=密码,vers=2.0
3.3 永久挂载配置
编辑 /etc/fstab 文件:
sudo nano /etc/fstab
添加以下行(根据实际情况选择版本):
# 使用 SMBv1(最兼容旧客户端)
//192.168.0.22/mysql_backup /mnt/mysql_backup cifs username=wcs,password=密码,vers=1.0,uid=1000,gid=1000,iocharset=utf8,file_mode=0775,dir_mode=0775 0 0
# 或使用凭据文件(更安全)
//192.168.0.22/mysql_backup /mnt/mysql_backup cifs credentials=/etc/samba/credentials,vers=1.0,uid=1000,gid=1000 0 0
创建凭据文件:
sudo nano /etc/samba/credentials
内容:
username=wcs
password=你的密码
设置权限:
sudo chmod 600 /etc/samba/credentials
3.4 测试挂载
# 测试 fstab 配置
sudo mount -a
# 验证挂载
df -h | grep mysql_backup
ls -la /mnt/mysql_backup
🔧 故障排查指南
故障1:SMB 服务启动失败
症状:
systemctl start smb
# 提示:Job for smb.service failed because the control process exited with error code.
排查步骤:
1. 查看详细日志:
bash
journalctl -xeu smb.service
-
检查配置文件语法:
bash sudo testparm -
常见问题:行内注释格式错误
- ❌ 错误:
guest ok = yes # 注释 -
✅ 正确:
guest ok = yes(注释单独一行) -
手动调试启动:
bash sudo /usr/sbin/smbd -i -d 3
故障2:客户端连接失败(协议不兼容)
症状:
smbclient -L //服务器IP -U 用户名
# 提示:protocol negotiation failed: NT_STATUS_INVALID_NETWORK_RESPONSE
原因:客户端 Samba 版本太旧(如 3.5.8)与服务器版本(4.19.3)不兼容
解决方案:
-
服务器端配置(关键步骤):
ini [global] client min protocol = NT1 # 支持最旧的 SMBv1 server min protocol = NT1 client max protocol = SMB3 server max protocol = SMB3 -
客户端指定协议版本:
bash # 尝试不同协议 smbclient -L //IP -U user -m NT1 smbclient -L //IP -U user -m SMB2 smbclient -L //IP -U user -m SMB2_10 -
客户端挂载时指定版本:
bash mount -t cifs //IP/share /mnt -o username=user,vers=1.0 mount -t cifs //IP/share /mnt -o username=user,vers=2.0
故障3:权限拒绝
排查步骤:
# 服务器端检查
1. 目录权限:ls -ld /backup/mysql_38_data_bak
2. SELinux 状态:sestatus
3. Samba 用户状态:sudo pdbedit -L
# 临时关闭 SELinux 测试
sudo setenforce 0
故障4:挂载成功但无法写入
检查:
1. 共享配置中的 writable = yes
2. 目录的 Linux 文件系统权限
3. 挂载选项中的 file_mode 和 dir_mode
📊 快速诊断命令集
服务器端诊断
# 服务状态
systemctl status smb nmb
# 端口监听
netstat -tlnp | grep -E "139|445"
# 活动连接
sudo smbstatus
# 配置验证
sudo testparm -s
# 日志查看
tail -f /var/log/samba/log.smbd
客户端诊断
# 网络连通性
telnet 服务器IP 445
telnet 服务器IP 139
# 共享发现
nmblookup -A 服务器IP
# 协议测试
for ver in NT1 SMB2 SMB2_10 SMB2_22 SMB3; do
echo "测试 $ver:"
smbclient -L //IP -U user -m $ver 2>&1 | grep -i "domain\|failed"
done
# 挂载测试
mount -t cifs //IP/share /mnt/test -o username=user,vers=1.0,password=pass
✅ 配置检查清单
服务器端
- [ ] Samba 软件包已安装
- [ ]
/etc/samba/smb.conf配置正确(无行内注释) - [ ] 共享目录存在且有正确权限
- [ ] 防火墙端口已开放(139/tcp, 445/tcp, 137-138/udp)
- [ ] Samba 用户已创建并启用(如需密码访问)
- [ ] 协议兼容性配置已添加(针对旧客户端)
- [ ] 服务已启动并运行正常
客户端
- [ ] Samba 客户端工具已安装
- [ ] 网络连通性正常
- [ ] 使用正确的协议版本连接
- [ ] 挂载点目录已创建
- [ ] 凭据信息正确
🔄 维护与监控
日常维护命令
# 查看活动连接和文件锁
sudo smbstatus
# 查看共享使用情况
sudo smbstatus -S
# 重新加载配置(无需重启服务)
sudo smbcontrol smbd reload-config
# 查看日志
sudo tail -f /var/log/samba/log.*
性能监控
# 实时监控连接
watch -n 5 'smbstatus | head -20'
# 监控 I/O 性能
iostat -x 5 | grep -A1 "Device"
⚠️ 安全注意事项
- SMBv1 安全风险:
- NT1(SMBv1)协议存在安全漏洞
- 仅在必要时为旧客户端启用
-
考虑升级客户端系统或使用其他共享方式
-
密码安全:
- 避免在命令行或 fstab 中明文存储密码
- 使用凭据文件并设置 600 权限
-
定期更改 Samba 密码
-
访问控制:
- 最小权限原则
- 使用 IP 限制(
hosts allow/hosts deny) - 定期审计访问日志
📚 附录
Samba 协议版本对应关系
- NT1: SMBv1(Windows NT 4.0)
- SMB2: SMBv2(Windows Vista/Server 2008)
- SMB2_02: SMBv2.02
- SMB2_10: SMBv2.1(Windows 7/Server 2008 R2)
- SMB3: SMBv3(Windows 8/Server 2012)
常见错误代码
NT_STATUS_ACCESS_DENIED: 权限不足NT_STATUS_BAD_NETWORK_NAME: 共享名错误NT_STATUS_LOGON_FAILURE: 认证失败NT_STATUS_INVALID_NETWORK_RESPONSE: 协议不匹配
参考资料
- Samba 官方文档:https://www.samba.org
man smb.conf- Samba 配置文件手册man mount.cifs- CIFS 挂载选项手册
文档版本: 1.0
最后更新: 2026-01-09
适用环境: OpenEuler + Ubuntu 11(或其他旧版 Linux)
维护者: 金石艾特技术团队
提示:本文档基于实际故障解决过程编写,重点记录了跨版本 Samba 共享的兼容性问题和解决方案。在实际部署时,请根据具体环境调整配置参数。