第2章:进阶Linux系统——第1节:配置与管理Samba服务器

目录

一、配置与管理Samba服务器

[任务 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 服务器实例解析(企业部门共享实战))

1.需求

2.环境信息

3.配置步骤

[任务 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 协议
  1. SMB(Server Message Block)是局域网上共享文件和打印机的协议,由 Microsoft 和 Intel 于 1987 年制定,为 Microsoft 网络核心通信协议;Samba 将 SMB 协议移植到 UNIX/Linux 系统。
  2. 基于NetBIOS over TCP/IP,Samba 可实现局域网及互联网的资源共享(互联网核心协议为 TCP/IP)。
  3. SMB 工作在会话层、表示层及部分应用层,使用 NetBIOS 的 API,是开放性协议,支持扩展,包含约 65 个上层作业,每个作业超 120 个函数,结构庞大复杂。

10.1.3 掌握 Samba 的工作原理
  1. SMB 协议端口:早期基于 NBT 协议(NetBIOS over TCP/IP),使用 UDP 137、138 及 TCP 139 端口;后期可直接运行于 TCP/IP,无 NBT 层,使用 TCP 445 端口。
  2. Samba 工作流程(4 步):协议协商(negprot 请求 / 响应)→建立连接(session setup &X 请求 / 响应)→访问共享资源(tree connect &X 请求 / 响应)→断开连接。
  3. Samba 相关进程(核心 2 个)
    • nmbd:实现 NetBIOS 名解析,提供浏览服务,展示网络共享资源列表。
    • smbd:管理 Samba 服务器的共享目录、打印机,负责共享资源的数据传输管理,是客户端访问共享的核心进程。


任务 2 配置 Samba 服务

10.2.1 安装并启动 Samba 服务(RHEL7/CentOS7)
  1. 检测已安装包

    复制代码
    rpm -qa |grep samba
  2. 安装前准备

    • 挂载 ISO 镜像:

      复制代码
      mkdir /iso 
      mount /dev/cdrom /iso
    • 制作用户 yum 源(/etc/yum.repos.d/dvd.repo):

      复制代码
      [dvd] 
      name=dvd 
      baseurl=file:///iso
      gpgcheck=0 
      enabled=1 
  3. 安装 Samba

    复制代码
    yum clean all 
    yum install samba -y
  4. 验证安装

    复制代码
    rpm -qa | grep samba

    会显示 samba、samba-common、samba-libs 等相关包。

  5. 服务管理命令

    • 启动:

      复制代码
      systemctl start smb
    • 开机自启:

      复制代码
      systemctl enable smb
    • 重启 / 重载 / 停止:

      复制代码
      systemctl restart/reload/stop smb
    • 注意:修改配置文件后必须重启 / 重载服务,配置才生效。


10.2.2 Samba 服务器配置工作流程
  1. 编辑主配置文件 smb.conf,指定共享目录并设置共享权限;
  2. 在 smb.conf 中指定日志文件名称和存放路径;
  3. 设置共享目录的本地系统权限;
  4. 重新加载 / 启动 SMB 服务,使配置生效;
  5. 关闭防火墙(或放行 Samba 服务),设置 SELinux 为允许状态。

Samba 访问流程:客户端请求→服务器查询 smb.conf 验证共享目录和访问权限→记录访问日志→权限通过则允许访问。


10.2.3 主要配置文件 smb.conf
  1. 文件位置

    复制代码
    /etc/samba/smb.conf

    ,配套示例文件smb.conf.example(建议研读),RHEL7 的 smb.conf 简化后约 36 行,按功能分段划分。

  2. 配置文件备份

    复制代码
    cd /etc/samba 
    cp smb.conf smb.conf.bak

    (防止配置错误无法恢复)。

  3. 核心参数及作用

  4. Share Definitions 共享服务定义(常用字段)

    1. 共享名:**[共享名](**配置段名,如 [public])
    2. 描述:comment = 备注信息
    3. 共享路径:path = 绝对地址路径
    4. 匿名访问:public = yes/no(yes 允许,no 禁止)
    5. 访问用户:valid users = 用户名/@组名(指定可访问的用户 / 用户组)
    6. 只读设置:read only = yes/no(yes 只读,no 读写)
    7. 主机过滤:hosts allow = 网段/主机名(允许访问的主机);hosts deny = 网段/主机名(禁止访问的主机)
    8. 可写设置:writable = yes/no(全局可写);write list = 用户名/@组名(指定可写的用户 / 组)
    9. 特殊段:[homes](用户主目录)、[printers](打印机共享)
  5. 配置示例

    • 示例 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 服务的日志文件和密码文件
  1. 日志文件

    • 配置字段:

      复制代码
      log file = /var/log/samba/log.%m

      (在 smb.conf 中设置)

    • 存放路径:默认/var/log/samba/,为每个来访主机单独建立日志文件

    • 查看日志:

      复制代码
      ls -a /var/log/samba
  2. 密码文件

    • 核心命令: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.配置步骤
  1. 创建共享目录及测试文件

    复制代码
    mkdir /companydata
    mkdir /companydata/sales
    touch /companydata/sales/test_share.tar
  2. 添加销售组、用户及 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账号
  3. 修改 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
  4. 设置共享目录本地系统权限

    复制代码
    chmod 777 /companydata/sales --R  # 递归设置读写执行权限
    chown sale1:sales /companydata/sales -R  # 递归设置属主属组
    chown sale2:sales /companydata/sales -R
    • -R:递归处理,对目录下所有文件 / 子目录生效。
  5. SELinux 设置(二选一)

    • 临时修改上下文:

      复制代码
      chcon -t samba_share_t /companydata/sales -R
    • 临时关闭 SELinux:

      复制代码
      setenforce Permissive

      (查看状态:getenforce

  6. 防火墙放行 Samba 服务

    复制代码
    firewall-cmd --permanent --add-service=samba  # 永久放行
    firewall-cmd --reload  # 重载防火墙
    firewall-cmd --list-all  # 验证是否放行
  7. 重启 Samba 服务

    复制代码
    systemctl restart smb
  8. 权限说明 :客户端最终访问权限 = Samba 共享权限 + 本地文件系统权限,取最严格的一项。



任务 4 配置 Samba 客户端

1. Windows 客户端(Win7)访问方式
  1. UNC 路径直接访问 :开始→运行→输入\\192.168.10.1→输入 Samba 账号(sale1/sale2)和密码,即可访问共享。
    • 测试:用 test_user1 登录会因无权限被拒绝。
  2. 映射网络驱动器 :我的电脑→工具→映射网络驱动器→选择盘符(如 Z)→输入地址\\192.168.10.1\sales→输入账号密码,映射后可直接通过盘符访问。
2. Linux 客户端(RHEL7)访问方式

前提 :安装客户端工具samba-clientcifs-utils(步骤同服务端,挂载 ISO、配置 yum 源后安装):

复制代码
yum install samba-client cifs-utils -y
  1. smbclient 命令查看共享列表

    • 格式:smbclient -L 目标IP/主机名 -U 用户名%密码
    • 匿名查看:smbclient -L 192.168.10.1(直接按回车)
    • 认证查看:smbclient -L 192.168.10.1 -U sale2%12345678
  2. smbclient 交互式访问共享

    • 格式:smbclient //目标IP/共享目录 -U 用户名%密码

    • 示例:

      复制代码
      smbclient //192.168.10.1/sales -U sale2%12345678
      smb: \> ls  # 查看文件
      smb: \> mkdir testdir  # 创建目录
      smb: \> exit  # 退出
  3. 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+,新增特性:
    1. 更好的 SMB 3.1.1 协议支持,兼容 Windows 10/11、Windows Server 2019/2022;
    2. 支持 SMB 加密,提升数据传输安全性;
    3. 优化 LDAP 集成,支持更多域控场景;
    4. 增强多线程性能,提升大文件共享速度。
  • Samba 4.x 相比 3.x 的核心变化:支持 Active Directory(AD)域控制器功能,可替代 Windows AD 实现域管理。

2. Samba 安全验证方式的深度解析

教程中提到 4 种安全级别,实际生产中userdomain为常用方式,补充说明:

验证方式 适用场景 优缺点
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 客户端)

  1. Samba 服务永久开机自启 :教程中systemctl enable smb已实现,补充查看自启状态:systemctl is-enabled smb

  2. 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 的常用维护与故障排查命令

  1. 配置文件语法检查testparm(核心命令,修改 smb.conf 后必执行,检测语法错误并显示配置摘要)。
  2. 查看 Samba 服务状态systemctl status smb nmbd(nmbd 需单独启动,systemctl start nmbd)。
  3. 查看 Samba 在线用户smbstatus(显示当前连接的用户、访问的共享、进程信息)。
  4. 重启 Samba 相关进程systemctl restart smb nmbd(nmbd 负责名称解析,需与 smb 一起重启)。
  5. 日志排查tail -f /var/log/samba/log.客户端IP(实时查看来访主机的访问日志,定位权限、连接错误)。

7. Samba 打印机共享的补充配置

教程中仅提及load printers = yes,补充完整打印机共享配置步骤(基于 CUPS):

  1. 安装 CUPS 服务:yum install cups -ysystemctl start cups && systemctl enable cups

  2. 在 CUPS 网页端配置打印机:访问http://服务器IP:631,添加并测试打印机。

  3. Smb.conf 中启用打印机共享: plaintext

    复制代码
    [printers]
        comment = All Printers
        path = /var/spool/samba
        browseable = no
        guest ok = no
        writable = no
        printable = yes  # 关键参数,允许打印
  4. 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 的性能优化技巧(生产环境)

  1. 调整最大连接数 :在 [global] 中添加max connections = 100(根据服务器性能设置,默认无限制)。

  2. 开启缓存 :添加cache directory = /var/cache/sambacache size = 10240(缓存大小 10GB,提升文件访问速度)。

  3. 优化端口 :仅启用 SMB 3.0 + 协议,关闭旧端口(137/138/139),仅保留 445 端口:

    plaintext

    复制代码
    [global]
        smb ports = 445
        server min protocol = SMB3_00
  4. 设置文件权限掩码 :添加create mask = 0644directory mask = 0755(统一客户端创建文件 / 目录的权限)。

  5. 禁用不必要的服务 :关闭浏览服务(browseable = no)、打印机共享(load printers = no),减少资源占用。


10. Samba 的高可用部署(企业进阶)

对于核心业务的 Samba 共享,可采用Keepalived + Samba实现主备高可用,核心思路:

  1. 两台 Samba 服务器配置相同的共享目录、账号、权限(可通过 NFS/GlusterFS 实现数据同步)。
  2. 安装 Keepalived,配置虚拟 IP(VIP),主服务器提供服务,备服务器待机。
  3. 当主服务器故障时,Keepalived 自动将 VIP 漂移到备服务器,实现无缝切换,保证服务不中断。
相关推荐
Ama_tor2 小时前
FLASK|完整版学习(ALL)
python·学习·flask
乐观勇敢坚强的老彭2 小时前
本周C++编程课笔记:for循环练习
java·c++·笔记
HyperAI超神经2 小时前
在线教程丨免费CPU资源快速部署,覆盖Qwen3.5/DeepSeek-R1/Gemma 3/Llama 3.2等热门开源模型
人工智能·深度学习·学习·机器学习·ai编程·llama·vllm
摇滚侠2 小时前
从 Tomcat 服务最大连接数角度讲一讲高峰期高考查分网站打不开,服务器的资源是有限的,同一时间大量用户连接服务器,会耗尽服务器的资源,服务器会拒绝新的连接
java·服务器·tomcat
稽稽稽稽不如人2 小时前
《从零开始的java从入门到入土的学习生活——JavaWeb后端篇》Chapter15——JavaWeb后端篇学习记录——多表关系、多表查询、分页查询
学习·生活
今天你TLE了吗2 小时前
JVM学习笔记:第九章——StringTable字符串常量池
java·jvm·笔记·后端·学习
谢娘蓝桥2 小时前
Mac mini 4 docker 安装openclaw
运维·docker·容器
心前阳光2 小时前
Mirror网络库插件使用4
java·linux·网络·unity·c#·游戏引擎
XHW___0012 小时前
linux 解决挖矿病毒的方法
linux·运维·服务器