目录
[任务 1 认识 Samba](#任务 1 认识 Samba)
[10.1.1 Samba 应用环境](#10.1.1 Samba 应用环境)
[10.1.2 了解 SMB 协议](#10.1.2 了解 SMB 协议)
[10.1.3 掌握 Samba 的工作原理](#10.1.3 掌握 Samba 的工作原理)
[任务 2 配置 Samba 服务](#任务 2 配置 Samba 服务)
[10.2.1 安装并启动 Samba 服务(RHEL7/CentOS7)](#10.2.1 安装并启动 Samba 服务(RHEL7/CentOS7))
[10.2.2 Samba 服务器配置工作流程](#10.2.2 Samba 服务器配置工作流程)
[10.2.3 主要配置文件 smb.conf](#10.2.3 主要配置文件 smb.conf)
[10.2.5 Samba 服务的日志文件和密码文件](#10.2.5 Samba 服务的日志文件和密码文件)
[任务 3 user 服务器实例解析(企业部门共享实战)](#任务 3 user 服务器实例解析(企业部门共享实战))
[任务 4 配置 Samba 客户端](#任务 4 配置 Samba 客户端)
[1. Windows 客户端(Win7)访问方式](#1. Windows 客户端(Win7)访问方式)
[2. Linux 客户端(RHEL7)访问方式](#2. Linux 客户端(RHEL7)访问方式)
[二、Samba 相关知识拓展](#二、Samba 相关知识拓展)
[1. Samba 的版本与新特性](#1. Samba 的版本与新特性)
[2. Samba 安全验证方式的深度解析](#2. Samba 安全验证方式的深度解析)
[3. passdb backend 三种用户后台的适用场景](#3. passdb backend 三种用户后台的适用场景)
[4. SELinux 对 Samba 的持久化配置](#4. SELinux 对 Samba 的持久化配置)
[5. Samba 服务的开机自启与持久化挂载(Linux 客户端)](#5. Samba 服务的开机自启与持久化挂载(Linux 客户端))
[6. Samba 的常用维护与故障排查命令](#6. Samba 的常用维护与故障排查命令)
[7. Samba 打印机共享的补充配置](#7. Samba 打印机共享的补充配置)
[8. Samba 与 NFS 的对比(Linux 跨系统共享方案选择)](#8. Samba 与 NFS 的对比(Linux 跨系统共享方案选择))
[9. Samba 的性能优化技巧(生产环境)](#9. Samba 的性能优化技巧(生产环境))
[10. Samba 的高可用部署(企业进阶)](#10. Samba 的高可用部署(企业进阶))
一、配置与管理Samba服务器
本内容来自《Linux 网络操作系统项目教程(RHEL 7.4/CentOS 7.4)(第 3 版)》项目十,围绕 Samba 服务器配置与管理展开,核心为 RHEL7/CentOS7 环境下的 Samba 服务部署、配置及客户端访问。
Samba 是实现 Windows 和 Linux 跨系统资源共享的核心服务,支持文件、打印机共享,具备身份验证、权限管理等功能,应用场景广泛。
任务 1 认识 Samba
10.1.1 Samba 应用环境
核心应用方向:文件和打印机共享、身份验证和权限设置、名称解析、浏览服务。
10.1.2 了解 SMB 协议
- SMB(Server Message Block)是局域网上共享文件和打印机的协议,由 Microsoft 和 Intel 于 1987 年制定,为 Microsoft 网络核心通信协议;Samba 将 SMB 协议移植到 UNIX/Linux 系统。
- 基于NetBIOS over TCP/IP,Samba 可实现局域网及互联网的资源共享(互联网核心协议为 TCP/IP)。
- SMB 工作在会话层、表示层及部分应用层,使用 NetBIOS 的 API,是开放性协议,支持扩展,包含约 65 个上层作业,每个作业超 120 个函数,结构庞大复杂。
10.1.3 掌握 Samba 的工作原理
- SMB 协议端口:早期基于 NBT 协议(NetBIOS over TCP/IP),使用 UDP 137、138 及 TCP 139 端口;后期可直接运行于 TCP/IP,无 NBT 层,使用 TCP 445 端口。
- Samba 工作流程(4 步):协议协商(negprot 请求 / 响应)→建立连接(session setup &X 请求 / 响应)→访问共享资源(tree connect &X 请求 / 响应)→断开连接。


- Samba 相关进程(核心 2 个)
- nmbd:实现 NetBIOS 名解析,提供浏览服务,展示网络共享资源列表。
- smbd:管理 Samba 服务器的共享目录、打印机,负责共享资源的数据传输管理,是客户端访问共享的核心进程。
任务 2 配置 Samba 服务
10.2.1 安装并启动 Samba 服务(RHEL7/CentOS7)
-
检测已安装包 :
rpm -qa |grep samba -
安装前准备
-
挂载 ISO 镜像:
mkdir /iso mount /dev/cdrom /iso -
制作用户 yum 源(/etc/yum.repos.d/dvd.repo):
[dvd] name=dvd baseurl=file:///iso gpgcheck=0 enabled=1
-
-
安装 Samba :
yum clean all yum install samba -y -
验证安装 :
rpm -qa | grep samba会显示 samba、samba-common、samba-libs 等相关包。
-
服务管理命令
-
启动:
systemctl start smb -
开机自启:
systemctl enable smb -
重启 / 重载 / 停止:
systemctl restart/reload/stop smb -
注意:修改配置文件后必须重启 / 重载服务,配置才生效。
-
10.2.2 Samba 服务器配置工作流程
- 编辑主配置文件 smb.conf,指定共享目录并设置共享权限;
- 在 smb.conf 中指定日志文件名称和存放路径;
- 设置共享目录的本地系统权限;
- 重新加载 / 启动 SMB 服务,使配置生效;
- 关闭防火墙(或放行 Samba 服务),设置 SELinux 为允许状态。
Samba 访问流程:客户端请求→服务器查询 smb.conf 验证共享目录和访问权限→记录访问日志→权限通过则允许访问。
10.2.3 主要配置文件 smb.conf
-
文件位置:
/etc/samba/smb.conf,配套示例文件
smb.conf.example(建议研读),RHEL7 的 smb.conf 简化后约 36 行,按功能分段划分。 -
配置文件备份:
cd /etc/samba cp smb.conf smb.conf.bak(防止配置错误无法恢复)。
-
核心参数及作用

-
Share Definitions 共享服务定义(常用字段)
- 共享名:**
[共享名](**配置段名,如 [public]) - 描述:
comment = 备注信息 - 共享路径:
path = 绝对地址路径 - 匿名访问:
public = yes/no(yes 允许,no 禁止) - 访问用户:
valid users = 用户名/@组名(指定可访问的用户 / 用户组) - 只读设置:
read only = yes/no(yes 只读,no 读写) - 主机过滤:
hosts allow = 网段/主机名(允许访问的主机);hosts deny = 网段/主机名(禁止访问的主机) - 可写设置:
writable = yes/no(全局可写);write list = 用户名/@组名(指定可写的用户 / 组) - 特殊段:[homes](用户主目录)、[printers](打印机共享)
- 共享名:**
-
配置示例
-
示例 1:发布 /share 为 public 共享,允许浏览、只读、匿名:
[public] comment = public path = /share browseable = yes read only = yes public = yes -
示例 2:/share/tech 仅允许 tech 组和经理 manger 访问:
[tech] comment=tech path=/share/tech valid users=@tech,manger -
示例 3:/public 仅允许 192.168.10.0 网段只读访问:
[public] comment=public path=/public public=yes read only=yes hosts allow = 192.168.10.
-
10.2.5 Samba 服务的日志文件和密码文件
-
日志文件
-
配置字段:
log file = /var/log/samba/log.%m(在 smb.conf 中设置)
-
存放路径:默认
/var/log/samba/,为每个来访主机单独建立日志文件 -
查看日志:
ls -a /var/log/samba
-
-
密码文件
-
核心命令:
smbpasswd -a 用户名(添加 Samba 账号,需先创建同名 Linux 系统账号) -
示例:添加 reading 用户为 Samba 账号
useradd reading # 创建Linux系统账号 passwd reading # 设置系统账号密码 smbpasswd -a reading # 添加Samba账号并设置密码
-
任务 3 user 服务器实例解析(企业部门共享实战)
1.需求
公司销售部资料存于/companydata/sales/,仅允许销售部员工访问,启用身份验证,支持 Linux/Windows 客户端访问。
2.环境信息
| 主机名称 | 操作系统 | IP 地址 | 网络连接方式 |
|---|---|---|---|
| Samba 服务器(RHEL7-1) | RHEL 7 | 192.168.10.1 | VMnet1 |
| Linux 客户端(RHEL7-2) | RHEL 7 | 192.168.10.20 | VMnet1 |
| Windows 客户端(Win7-1) | Windows 7 | 192.168.10.30 | VMnet1 |
3.配置步骤
-
创建共享目录及测试文件 :
mkdir /companydata mkdir /companydata/sales touch /companydata/sales/test_share.tar -
添加销售组、用户及 Samba 账号 :
groupadd sales # 创建销售组 useradd -g sales sale1 # sale1加入sales组 useradd -g sales sale2 # sale2加入sales组 useradd test_user1 # 测试用(非销售组) passwd sale1;passwd sale2;passwd test_user1 # 设置系统密码 smbpasswd -a sale1;smbpasswd -a sale2 # 添加Samba账号 -
修改 smb.conf 主配置文件 :
[global] workgroup = Workgroup server string = File Server security = user passdb backend = tdbsam printing = cups printcap name = cups load printers = yes cups options = raw [sales] comment=sales path=/companydata/sales writable = yes browseable = yes valid users = @sales -
设置共享目录本地系统权限 :
chmod 777 /companydata/sales --R # 递归设置读写执行权限 chown sale1:sales /companydata/sales -R # 递归设置属主属组 chown sale2:sales /companydata/sales -R-R:递归处理,对目录下所有文件 / 子目录生效。
-
SELinux 设置(二选一) :
-
临时修改上下文:
chcon -t samba_share_t /companydata/sales -R -
临时关闭 SELinux:
setenforce Permissive(查看状态:
getenforce)
-
-
防火墙放行 Samba 服务 :
firewall-cmd --permanent --add-service=samba # 永久放行 firewall-cmd --reload # 重载防火墙 firewall-cmd --list-all # 验证是否放行 -
重启 Samba 服务 :
systemctl restart smb -
权限说明 :客户端最终访问权限 = Samba 共享权限 + 本地文件系统权限,取最严格的一项。
任务 4 配置 Samba 客户端
1. Windows 客户端(Win7)访问方式
- UNC 路径直接访问 :开始→运行→输入
\\192.168.10.1→输入 Samba 账号(sale1/sale2)和密码,即可访问共享。- 测试:用 test_user1 登录会因无权限被拒绝。
- 映射网络驱动器 :我的电脑→工具→映射网络驱动器→选择盘符(如 Z)→输入地址
\\192.168.10.1\sales→输入账号密码,映射后可直接通过盘符访问。
2. Linux 客户端(RHEL7)访问方式
前提 :安装客户端工具samba-client和cifs-utils(步骤同服务端,挂载 ISO、配置 yum 源后安装):
yum install samba-client cifs-utils -y
-
smbclient 命令查看共享列表:
- 格式:
smbclient -L 目标IP/主机名 -U 用户名%密码 - 匿名查看:
smbclient -L 192.168.10.1(直接按回车) - 认证查看:
smbclient -L 192.168.10.1 -U sale2%12345678
- 格式:
-
smbclient 交互式访问共享:
-
格式:
smbclient //目标IP/共享目录 -U 用户名%密码 -
示例:
smbclient //192.168.10.1/sales -U sale2%12345678 smb: \> ls # 查看文件 smb: \> mkdir testdir # 创建目录 smb: \> exit # 退出
-
-
mount 命令挂载共享目录(持久化访问):
-
格式:
mount -t cifs //目标IP/共享目录 挂载点 -o username=用户名 -
示例:
mkdir -p /mnt/sambadata # 创建挂载点 mount -t cifs //192.168.10.1/sales /mnt/sambadata/ -o username=sale1 cd /mnt/sambadata;ls # 访问挂载目录 -
注意:输入Samba 账号密码,非 Linux 系统账号密码。
-
二、Samba 相关知识拓展
1. Samba 的版本与新特性
- 本教程使用 Samba 4.6.2(RHEL7 默认),目前最新稳定版为 Samba 4.19+,新增特性:
- 更好的 SMB 3.1.1 协议支持,兼容 Windows 10/11、Windows Server 2019/2022;
- 支持 SMB 加密,提升数据传输安全性;
- 优化 LDAP 集成,支持更多域控场景;
- 增强多线程性能,提升大文件共享速度。
- Samba 4.x 相比 3.x 的核心变化:支持 Active Directory(AD)域控制器功能,可替代 Windows AD 实现域管理。
2. Samba 安全验证方式的深度解析
教程中提到 4 种安全级别,实际生产中user 和domain为常用方式,补充说明:
| 验证方式 | 适用场景 | 优缺点 |
|---|---|---|
| share | 小型局域网、公共只读共享 | 优点:免密码,访问便捷;缺点:无身份验证,安全性极低,易被攻击 |
| user | 中小企业、独立服务器、部门级共享 | 优点:本地验证,配置简单,安全性适中;缺点:无法集中管理账号 |
| server | 多 Samba 服务器集群 | 优点:集中验证,减少账号维护成本;缺点:依赖远程验证服务器,单点故障风险 |
| domain | 企业级、有 AD 域的环境 | 优点:与域控集成,统一账号管理,适合大规模网络;缺点:配置复杂,依赖域环境 |
3. passdb backend 三种用户后台的适用场景
| 后台类型 | 配置命令 | 适用场景 |
|---|---|---|
| smbpasswd | smbpasswd -a/-d/-x 用户名(增 / 禁用 / 删) |
小型环境,用户量少(<50),配置简单 |
| tdbsam | pdbedit -a/-x 用户名(增 / 删),数据库文件/var/lib/samba/private/passdb.tdb |
中型环境,用户量 50-200,支持用户组、密码策略,本地数据库无需额外服务 |
| ldapsam | 结合 OpenLDAP 服务,需配置 LDAP 连接参数 | 大型环境,用户量>200,跨服务器 / 跨域的集中账号管理 |
4. SELinux 对 Samba 的持久化配置
教程中使用chcon为临时修改 SELinux 上下文,重启后失效,生产环境推荐持久化配置:
# 安装policycoreutils-python(提供semanage命令)
yum install policycoreutils-python -y
# 持久化设置samba共享上下文
semanage fcontext -a -t samba_share_t "/companydata/sales(/.*/)?"
# 生效配置
restorecon -Rv /companydata/sales
- 若需要 Samba 访问用户主目录,需开启 SELinux 布尔值:
setsebool -P samba_enable_home_dirs on(-P永久生效)。
5. Samba 服务的开机自启与持久化挂载(Linux 客户端)
-
Samba 服务永久开机自启 :教程中
systemctl enable smb已实现,补充查看自启状态:systemctl is-enabled smb。 -
Linux 客户端共享目录持久化挂载 :教程中
mount为临时挂载,重启后失效,需配置/etc/fstab:# 编辑fstab,添加以下行 //192.168.10.1/sales /mnt/sambadata cifs defaults,username=sale1,password=123456 0 0 # 验证配置并生效 mount -a # 无报错则配置正确,重启后自动挂载-
安全优化:避免密码明文写在 fstab,可创建密码文件
/etc/samba/cifs.pass,权限设为 600:echo -e "username=sale1\npassword=123456" > /etc/samba/cifs.pass chmod 600 /etc/samba/cifs.pass # fstab修改为 //192.168.10.1/sales /mnt/sambadata cifs defaults,credentials=/etc/samba/cifs.pass 0 0
-
6. Samba 的常用维护与故障排查命令
- 配置文件语法检查 :
testparm(核心命令,修改 smb.conf 后必执行,检测语法错误并显示配置摘要)。 - 查看 Samba 服务状态 :
systemctl status smb nmbd(nmbd 需单独启动,systemctl start nmbd)。 - 查看 Samba 在线用户 :
smbstatus(显示当前连接的用户、访问的共享、进程信息)。 - 重启 Samba 相关进程 :
systemctl restart smb nmbd(nmbd 负责名称解析,需与 smb 一起重启)。 - 日志排查 :
tail -f /var/log/samba/log.客户端IP(实时查看来访主机的访问日志,定位权限、连接错误)。
7. Samba 打印机共享的补充配置
教程中仅提及load printers = yes,补充完整打印机共享配置步骤(基于 CUPS):
-
安装 CUPS 服务:
yum install cups -y→systemctl start cups && systemctl enable cups。 -
在 CUPS 网页端配置打印机:访问
http://服务器IP:631,添加并测试打印机。 -
Smb.conf 中启用打印机共享: plaintext
[printers] comment = All Printers path = /var/spool/samba browseable = no guest ok = no writable = no printable = yes # 关键参数,允许打印 -
Windows 客户端添加网络打印机:开始→设备和打印机→添加打印机→选择
\\Samba服务器IP\打印机名,安装驱动即可使用。
8. Samba 与 NFS 的对比(Linux 跨系统共享方案选择)
Samba 主打Linux-Windows 跨系统共享 ,NFS 主打Linux-Linux/UNIX 共享,核心对比:
| 特性 | Samba | NFS |
|---|---|---|
| 协议 | SMB/CIFS | NFS(V3/V4) |
| 跨平台 | 支持 Linux/Windows/macOS | 主要支持 Linux/UNIX,Windows 需安装客户端 |
| 身份验证 | 支持 user/domain/LDAP,密码验证 | 基于 IP / 主机名授权,无密码验证(需配合 Kerberos) |
| 性能 | 中规中矩,适合小文件、多客户端 | 性能更高,适合大文件、高并发的 Linux 集群 |
| 配置复杂度 | 中等(需管理权限、账号) | 简单(仅需配置共享目录和授权 IP) |
| 适用场景 | 跨系统文件 / 打印机共享,企业混合网络 | Linux 服务器集群、大数据存储、本地局域网 Linux 共享 |
9. Samba 的性能优化技巧(生产环境)
-
调整最大连接数 :在 [global] 中添加
max connections = 100(根据服务器性能设置,默认无限制)。 -
开启缓存 :添加
cache directory = /var/cache/samba→cache size = 10240(缓存大小 10GB,提升文件访问速度)。 -
优化端口 :仅启用 SMB 3.0 + 协议,关闭旧端口(137/138/139),仅保留 445 端口:
plaintext
[global] smb ports = 445 server min protocol = SMB3_00 -
设置文件权限掩码 :添加
create mask = 0644→directory mask = 0755(统一客户端创建文件 / 目录的权限)。 -
禁用不必要的服务 :关闭浏览服务(
browseable = no)、打印机共享(load printers = no),减少资源占用。
10. Samba 的高可用部署(企业进阶)
对于核心业务的 Samba 共享,可采用Keepalived + Samba实现主备高可用,核心思路:
- 两台 Samba 服务器配置相同的共享目录、账号、权限(可通过 NFS/GlusterFS 实现数据同步)。
- 安装 Keepalived,配置虚拟 IP(VIP),主服务器提供服务,备服务器待机。
- 当主服务器故障时,Keepalived 自动将 VIP 漂移到备服务器,实现无缝切换,保证服务不中断。