跳至内容

实验 8:Samba

目标

完成此实验后,您将能够

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

完成此实验的估计时间:40 分钟

简介

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

Samba 是一个开源的“通用互联网文件系统”(CIFS)实现。CIFS 也被称为服务器消息块(SMB)、LAN Manager 或 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 ///Shared ~/samba-client -o user=sambarockstar
    
  2. 使用 `mount` 命令列出所有已挂载的 CIFS 类型文件系统。输入

    mount -t cifs
    
    输出
    ///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
    ///Shared  73364480 17524224  55840256  24% ~/samba-client
    

  4. 接下来,列出已挂载共享的内容。输入

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

    touch ~/samba-client/testfile.txt
    

练习 4

修改共享权限

调整共享权限

  1. 将“共享”Samba 共享定义设为只读。这可以通过在 smb.conf 配置文件中将 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

本练习将介绍如何通过用户的本地组 membership 来限制对 Samba 共享的访问。这为使共享资源仅对特定用户组可访问提供了一种便捷的机制。

为 Samba 用户创建一个新组

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

在 Samba 配置中配置有效用户

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

练习 6

本练习模拟了一个真实场景,您将扮演客户端系统的管理员,然后尝试访问远程系统(server HQ)上的 Samba 服务,而您对该系统没有任何管理访问或权限。作为学生,您将在您的机器(serverXY)上设置 Samba 客户端,以访问托管在另一台机器(serverHQ)上的 Samba 服务。这反映了标准的职场设置。

假设

  • 您没有 serverHQ 的 root 访问权限。
  • serverHQ 上的 Samba 共享已设置好并且可以访问。

在 serverXY 上设置 Samba 客户端

将您的机器(serverXY)配置为 Samba 客户端,以访问另一台主机(serverHQ)上的共享目录。

  1. 确保您的本地系统已安装必要的 Samba 客户端实用程序。如果需要,请通过运行以下命令进行安装

    sudo dnf install samba-client cifs-utils -y
    
  2. 在 serverXY 上创建挂载点

    mkdir ~/serverHQ-share
    

从 serverHQ 挂载 Samba 共享

您需要 serverHQ 的 IP 地址或主机名、共享名称以及您的 Samba 凭据。

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

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

验证并访问挂载的共享

  1. 检查来自 serverHQ 的共享目录是否已成功挂载到您的机器上

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

    touch ~/serverHQ-share/newfile.txt
    

卸载远程共享

完成后,卸载共享

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

作者:Wale Soyinka

贡献者:Ganna Zhyrnova