第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-client和cifs-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 种安全级别,实际生产中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 客户端)

  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 -y → systemctl 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/samba → cache size = 10240(缓存大小 10GB,提升文件访问速度)。

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

    plaintext

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

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


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

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

  1. 两台 Samba 服务器配置相同的共享目录、账号、权限(可通过 NFS/GlusterFS 实现数据同步)。
  2. 安装 Keepalived,配置虚拟 IP(VIP),主服务器提供服务,备服务器待机。
  3. 当主服务器故障时,Keepalived 自动将 VIP 漂移到备服务器,实现无缝切换,保证服务不中断。
相关推荐
志尊宝41 分钟前
Vue3 零基础每日笔记(071):暗黑模式与主题切换——CSS 变量 + Element Plus 暗黑方案
前端·css·笔记·vue·html·前端开发·软件开发
wewowilling2 小时前
认识微服务
java·运维·微服务·springcloud
玖石书2 小时前
Ubuntu 24.04 UFW 全命令攻略:从入门到端口开放实战
linux·运维·ubuntu
xiaoqiMikko2 小时前
Linux 实战(七):useradd、sudoers、umask、SGID、软链 —— 三台真机实测
linux·centos
沪上企服通2 小时前
历史账套科目重映射与规则版本重算:旧账梳理的“口径复位”工程
笔记·架构
gjf05_053 小时前
人该怎样活着呢?版本75.8
学习
weifont3 小时前
自动化抓取和上架商品:能不动手,就少动手
运维·前端·自动化
拂拉氏4 小时前
【知识讲解】 Linux之动静态库的了解
linux·运维·服务器·动静态库
Fcy6484 小时前
Linux下 五种IO模型的认识与⾮阻塞IO的实现
linux·服务器·io
li星野4 小时前
【学习记录】PCB与PCBA核心知识全解析:从设计到制造的关键细节
学习·制造