跳到内容

实验 8:Samba

目标

完成本实验后,您将能够

  • 安装和配置 Samba
  • 使用 Samba 在 Linux 系统之间共享文件和目录
  • 使用常见的 Samba 工具

预计完成本实验所需时间:40 分钟

介绍

Samba 允许在 Unix/Linux 和 Windows 系统之间共享文件和打印服务。

Samba 是一个开源的“通用互联网文件系统”(CIFS)实现。CIFS 也被称为服务器消息块 (SMB)、LAN 管理器或 NetBIOS 协议。Samba 服务器包含两个主要守护进程 - smbd 和 nmbd。

smbd:此守护进程为 SMB 客户端(如运行各种 Microsoft 操作系统的机器)提供文件和打印服务。

nmbd:此守护进程提供 NETBIOS 名称服务和浏览支持。

本实验中的练习重点介绍如何在 Rocky Linux 服务器上将 Samba 设置为服务器和客户端。

练习 1

安装 Samba 并配置基本共享目录

安装 Samba 服务器应用程序

  1. 使用 dnf 工具在您的服务器上安装 Samba 服务器和客户端软件包。键入
    sudo dnf install -y samba
    

配置 Samba

  1. 在 /tmp 文件夹下创建一个名为 samba-share 的目录以供共享。键入

    mkdir /tmp/samba-share
    
  2. 让我们创建一个基本的 Samba 配置来共享 /tmp/samba-share 文件夹。通过在 Samba 配置文件中创建一个新的共享定义来实现这一点

    sudo tee -a /etc/samba/smb.conf << 'EOF'
    [Shared]
    path = /tmp/samba-share
    browsable = yes
    writable = yes
    EOF
    

启动并启用 Samba 服务

  1. 启动并启用 Samba 服务

    sudo systemctl start smb nmb
    sudo systemctl enable smb nmb
    
  2. 验证 Samba 服务使用的守护进程是否正在运行

    sudo systemctl status smb nmb
    

练习 2

Samba 用户

管理 Samba 服务器的一个重要且常见的管理任务是为需要访问共享资源的用户创建用户和密码。

本练习演示如何创建 Samba 用户并为用户设置访问凭据。

创建 Samba 用户和 Samba 密码

  1. 首先,创建一个名为 sambarockstar 的常规系统用户。键入

    sudo useradd sambarockstar
    
  2. 验证用户是否已正确创建。键入

    id sambarockstar
    
  3. 将新的 sambarockstar 系统用户添加到 Samba 用户数据库中,并同时为 Samba 用户设置密码

    sudo smbpasswd -a sambarockstar
    
    出现提示时,输入选择的密码,并在每次输入后按 ENTER。
  4. 重新启动 Samba 服务

    sudo systemctl restart smb nmb
    

练习 3

访问 Samba 共享(本地测试)

在本练习中,我们将尝试从同一系统访问新的 Samba 共享。这意味着我们将使用同一主机作为服务器和客户端。

安装 Samba 客户端工具

  1. 通过运行以下命令安装客户端实用程序

    sudo dnf -y install cifs-utils
    

    创建 Samba 挂载点

  2. 创建挂载点

    mkdir ~/samba-client
    

在本地挂载 SMB 文件系统

  1. 在本地挂载 Samba 共享

    sudo mount -t cifs //localhost/Shared ~/samba-client -o user=sambarockstar
    
  2. 使用 mount 命令列出所有已挂载的 CIFS 类型文件系统。键入

    mount -t cifs
    
    输出
    //localhost/Shared on ~/samba-client type cifs (rw,relatime,vers=3.1.1,cache=strict,username=sambarockstar....
    ...<SNIP>...
    
  3. 同样,使用 df 命令验证已挂载的共享是否可用。键入

    df -t cifs
    

    输出

    Filesystem         1K-blocks     Used Available Use% Mounted on
    //localhost/Shared  73364480 17524224  55840256  24% ~/samba-client
    
  4. 接下来,列出已挂载共享的内容。键入

    ls ~/samba-client
    
  5. 在共享中创建一个测试文件

    touch ~/samba-client/testfile.txt
    

练习 4

修改共享权限

调整共享权限

  1. 使“Shared” samba 共享定义为只读。这可以通过将 smb.con 配置文件中的 writable 参数的值从 yes 更改为 no 来完成。让我们使用 sed 单行器来完成此操作,方法是运行

    sudo  sed -i'' -E \
     '/\[Shared\]/,+3 s/writable =.*$/writable = no/'  /etc/samba/smb.conf
    
  2. 重新启动 Samba 服务

    sudo systemctl restart smb nmb
    
  3. 现在,通过尝试在已挂载的共享上创建文件来测试写入共享

    touch ~/samba-client/testfile2.txt
    

练习 5

使用 Samba 为特定用户组

本练习将引导您通过用户的本地组成员身份限制对 Samba 共享的访问。这提供了一种方便的机制,可以让共享资源仅对特定用户组可用。

要为 Samba 用户创建一个新组

  1. 使用 groupadd 实用程序创建一个名为 rockstars 的新系统组。在本例中,我们将使用此组来容纳可以访问给定资源的系统用户。输入
    sudo groupadd rockstars
    
  2. 将现有系统/Samba 用户添加到该组。输入
    sudo usermod -aG rockstars sambarockstar
    

要在 Samba 配置中配置有效用户

  1. 使用 sed 实用程序将新的有效用户参数添加到 Samba 配置文件中的共享定义中。输入
    sudo sed -i '/\[Shared\]/a valid users = @sambagroup' /etc/samba/smb.conf
    
  2. 重新启动 Samba 服务
    sudo systemctl restart smb nmb
    
  3. 现在使用 sambarockstar 测试对共享的访问,并验证访问权限。

练习 6

本练习模拟了一个现实场景,您将担任客户端系统的管理员,然后测试访问远程系统(服务器 HQ)上的 Samba 服务,您对此没有管理访问权限或特权。作为一名学生,您将在您的机器(服务器 XY)上设置一个 Samba 客户端来访问在另一台机器(服务器 HQ)上托管的 Samba 服务。这反映了标准的工作场所设置。

假设

  • 您没有服务器 HQ 的 root 权限。
  • 服务器 HQ 上的 Samba 共享已经设置好,可以访问。

要在服务器 XY 上设置 Samba 客户端

将您的机器(服务器 XY)配置为 Samba 客户端,以访问单独主机(服务器 HQ)上的共享目录。

  1. 确保您的本地系统上安装了必要的 Samba 客户端实用程序。如有必要,通过运行以下命令安装它们

    sudo dnf install samba-client cifs-utils -y
    
  2. 在服务器 XY 上创建一个挂载点

    mkdir ~/serverHQ-share
    

要从服务器 HQ 挂载 Samba 共享

您将需要服务器 HQ 的 IP 地址或主机名、共享名称以及您的 Samba 凭据。

将 serverHQ、sharedFolder 和 yourUsername 替换为实际值。

```bash
sudo mount -t cifs //serverHQ/sharedFolder ~/serverHQ-share -o user=yourUsername
```

要验证并访问挂载的共享

  1. 检查服务器 HQ 上的共享目录是否已成功挂载到您的机器上

    ls ~/serverHQ-share
    
  2. 尝试访问和修改挂载的共享中的文件。例如,要创建一个新文件

    touch ~/serverHQ-share/newfile.txt
    

要卸载远程共享

完成后,卸载共享

```bash
sudo umount ~/serverHQ-share
```

作者:Wale Soyinka

贡献者:Ganna Zhyrnova