10.1 配置Samba服务

系列 - 配置与管理Samba服务器
实验概述
Samba是一个在Linux/Unix系统上实现SMB/CIFS协议的免费软件,通过它可以在不同操作系统之间共享文件和打印机。本实验将带你学习如何在Linux系统上配置Samba服务,实现与Windows系统的文件共享,让你掌握跨平台文件共享的配置技巧。

任务目标: 完成Samba的安装、共享目录创建、服务配置和用户管理,搭建一个可用的Samba文件共享服务器。

首先,我们需要安装Samba服务。在基于Red Hat的系统(如CentOS)中,使用yum包管理器进行安装:

bash

yum install -y samba
提示
-y 参数表示在安装过程中自动确认所有提示,无需手动输入y确认。

接下来创建一个专门用于共享的目录,并设置合适的权限:

bash

# 创建共享目录
mkdir -p /srv/smb

# 修改目录所有者和所属组
chown -R nobody:smbusers /srv/smb

# 设置目录权限
chmod -R 2770 /srv/smb
权限说明
权限2770中的"2"表示设置SGID位,这样在该目录下创建的文件会自动继承父目录的用户组属性,有利于团队协作。

Samba的主配置文件位于/etc/samba/smb.conf。我们需要编辑这个文件来定义共享目录的访问规则。

打开配置文件,在配置文件的末尾添加以下共享配置:

ini

[docker]
        comment = 共享给Docker使用
        # 基本权限
        browserable = yes         # 在网上邻居可见
        writable = yes            # 允许写入(需要认证)
        read only = no            # 非只读

        # 访问控制
        valid users = @smbusers   # 只允许smbusers组用户访问
        write list = @smbusers    # 写入权限给smbusers组

        # 强制用户组
        force group = smbusers
        force create mode = 0660
        force directory mode = 0770
配置参数详解
  • [docker]:共享名称,Windows用户访问时显示的名称
  • browserable = yes:使该共享在网络浏览器中可见
  • valid users = @smbusers:只有smb用户组的成员才能访问
  • force group = smbusers:强制所有创建的文件都属于smbusers组
  • force create mode = 0660:新建文件的默认权限(所有者可读写,组内成员可读写)

Samba服务使用独立的用户认证系统,需要为将要访问共享的用户创建Samba账户:

bash

# 创建用户组
groupadd smbusers

# 创建系统用户并添加到smbusers组
useradd -G smbusers zhangsan

# 为用户创建Samba密码
smbpasswd -a zhangsan

# 启用该Samba用户
smbpasswd -e zhangsan
注意
Samba密码独立于系统用户密码,即使系统用户密码和Samba密码相同,它们也是分开存储和管理的。

配置完成后,启动Samba服务并检查其状态:

bash

# 启动Samba服务
systemctl start smb

# 检查服务状态
systemctl status smb

任务目标: 从Windows系统连接到Linux上的Samba共享,映射为网络驱动器,并验证文件同步功能。

  1. 打开【此电脑】
  2. 点击顶部菜单的【计算机】→【映射网络驱动器】

在映射网络驱动器对话框中:

  1. 选择一个驱动器号(如Z:)
  2. 文件夹路径输入:\\服务器IP地址\docker

系统会提示输入凭据:

  • 用户名:zhangsan(或你创建的Samba用户)
  • 密码:该用户的Samba密码

访问提示

如果出现认证失败,请检查:

  1. Samba服务是否正常运行(使用 systemctl status smb 查看)
  2. 防火墙是否开放了Samba端口
  3. 用户名和密码是否正确
  4. Windows是否能ping通Linux服务器

成功连接后,你会在Windows中看到一个名为"docker"的网络驱动器。

现在让我们测试文件同步功能:

  1. 在Windows中,打开新映射的网络驱动器
  2. 创建一个新文件或文件夹(例如创建一个txt文件并写入一些内容)
  3. 保存文件

回到Linux服务器,检查共享目录中的文件:

bash

ls -la /srv/smb/

你应该能看到刚刚在Windows中创建的文件。

恭喜!
如果你能在服务器上看到Windows创建的文件,说明Samba共享配置成功!现在Windows和Linux系统之间可以无缝共享文件了。

任务目标: 学习如何使用Docker容器快速部署Samba服务,体验容器化部署的便利性。

为了避免端口冲突,我们需要先停止之前安装的Samba服务:

bash

# 停止系统Samba服务
systemctl stop smb

同时在Windows中断开之前的网络驱动器连接:

  1. 右键点击之前映射的网络驱动器
  2. 选择"断开连接"

现在我们使用 dperson/samba 这个预配置好的镜像来部署Samba服务:

bash

docker run -d \
  --name samba \
  -p 139:139 \
  -p 445:445 \
  --restart unless-stopped \
  -v /srv/smb:/mount \
  -e USER="zhangsan;你的密码" \
  -e SHARE="docker;/mount;yes;no;no;zhangsan;zhangsan" \
  dperson/samba
参数说明

Docker Samba镜像通过环境变量进行配置,主要参数如下:

环境变量 格式 说明
USER 用户名;密码 创建Samba用户
SHARE 共享名;路径;是否可浏览;是否只读;允许guest;读用户列表;写用户列表 定义共享目录的权限和访问规则

本次配置中SHARE参数解析:

  • docker:共享名称
  • /mount:容器内的共享目录路径
  • yes:允许在网络邻居中浏览
  • no:非只读模式(可写)
  • no:不允许guest用户访问
  • zhangsan:允许读取的用户
  • zhangsan:允许写入的用户

查看容器运行状态:

bash

docker ps

确认容器正在运行后,重复执行任务二的步骤,重新在Windows中连接到Samba共享。

Docker部署的优势
  1. 快速部署:一条命令即可启动完整的Samba服务
  2. 环境隔离:不影响系统本身的配置
  3. 易于迁移:容器可以在任何支持Docker的系统中运行
  4. 版本控制:可以轻松切换不同版本的Samba