OpenWrt 与 Samba:家庭网络文件共享指南

3,988 阅读5分钟

引言

手头有一个大容量正吃灰的机械硬盘, 乘着周末有空就想着利用起来, 需求:

  • 家里有个树莓派, 一直跑着一个 OpenWRT 单独作为路由器使用
  • 现在需要在树莓派上接入机械硬盘, 并将其作为家庭网络共享文件,
  • 最终希望的是, 只要设备接入家里的 WIFI 就可以通过 smb 协议访问到机械硬盘

SMB(Server Message Block)协议是一种网络文件共享协议, 主要用于在局域网中共享文件、打印机、串行端口和通信资源。它允许应用程序或用户在网络上的计算机之间读取和写入文件, 并请求服务。SMB 协议最初由 IBM 开发, 后来由微软扩展和推广, 广泛应用于各大操作系统中。

一、安装 Samba

我这里主里环境是 OpenWrt(Linux), 通过 Samba 来实现网络共享

访问 OpenWrt 后台页面, 并进入软件包

image

首先我们需要先更新下软件包列表

image

更新完软件包后, 在搜索栏搜索 samba4, 在搜索结果中选择 luci-app-samba4 进行安装

image

在安装 luci-app-samba4 时实际上会安装所有所需的包, 如下图所示, 实际上安装了四个包呢

image

安装完成, 刷新页面会在服务一栏多出网络共享菜单

image

二、创建 Samba 用户

在进行网络共享时, 我们应该避免使用 root 用户来登录 samba 服务器。 为此, 我们需要单独创建一个用户来用于 Samba 服务器的访问, 并为它赋予文件夹的访问权限。

下面我们需要进入 OpenWrt 上进行操作, 所以这里需要先通过 SSH 访问 OpenWrt

ssh root@192.168.0.111

在开始前我们可以提前安装两个软件包:

  • shadow-useradd: 提供 useradd 命令, 可以用于添加用户
  • shadow-userdel: 提供 userdel 命令, 可用于删除用户(如果需要的话)
opkg update  # 更新软件包
opkg install shadow-useradd # 先安装 shadow-useradd 软件包
opkg install shadow-userdel # 先安装 shadow-userdel 软件包, 提供 userdel 命令

下面我们尝试添加新用户 test, 后面通过配置我们将对共享目录进行一个权限控制(只有 test 用户才能够访问共享目录)

useradd test # 使用 useradd 命令创建 test 用户
smbpasswd -a test # 为用户 test 创建 Samba 服务的密码, 会提示输设置码和确认密码

image

补充: 如果创建的用户不想继续使用, 可使用以下命令进行删除

smbpasswd -x test # 删除用户 test 的密码
userdel test # 删除用户

三、创建共享目录

下面创建共享文件目录 /share, 并添加一个测试文件 test.txt

mkdir -p /share
cd /share
echo "string" > test.txt

image

目录创建完后, 我们还需要为共享目录用户设置权限

# 更改 /share 目录及其所有子目录和文件的「所有者」和「所属组」两个 test 都换成你设置的用户名
chown -R test:test /share

image

四、Samba 配置

访问 OpenWrt 后台管理页面, 并进入网络共享页面, 如下图所示

image

先设置下接口

image

新增一条类目, 并填写相关信息(具体描述看图), 最后保存并应用

image

五、Mac 连接

上面👆🏻配置完, 其实整个网络共享目录就已配置完成, 下面我们开始测试:

Mac 下, 在菜单栏找到 前往 -> 连接服务器

image

这时会出来一个弹窗, 输入 Smb 服务器地址, 格式如下: smb://192.168.0.111/test IP 就是我树莓派地址, test 就是上面新增配置时设置的名称

image

然后点击连接, 选择 注册用户, 名称就是最开始我们设置的 Samba 用户名, 密码就是对应用户密码, 最后点击连接

image

这里不出意外, 就可以访问到共享文件目录了, 如下图所示:

image

这里我们也可以试着拖一个文件进来

image

然后树莓派上, 可以同步查看到该文件

image

六、挂载硬盘

上面我们是在 OpenWrt 宿主机器上创建了一个共享目录, 这里其实只是做个演示; 而我们真正的目的是要将外部的硬盘设置为共享目录, 但是在开始我们需要先把硬盘挂载到 OpenWrt

开始前先使用 lsblk 查看硬盘信息: 其目的是为了找到要挂载的硬盘路径

lsblk -l

从下面结果确定要挂载的硬盘路径为 /dev/sdb2(通过硬盘的大小确定)

image

补充:在类 Unix 操作系统(如 Linux)中, 硬盘路径前面的 /dev 代表 device(设备), 这是因为在这些操作系统中, 所有的硬件设备(包括硬盘、光驱、USB 设备等)都被表示为文件系统中的文件, 这些文件通常位于 /dev 目录下

确定了硬盘设备路径, 我们还需要创建一个目录用于作为挂载点

mkdir -p my-data

image

因为该目录后面会作为共享目录, 所以我们需要设置下目录和文件的所有者和所属组(设置为 Samba 用户 test)

chown -R test:test my-data

image

下面我们就可以开始挂载硬盘了

mount /dev/sdb2 my-data

image

遇到的坑: 由于我的硬盘是 Exfat 格式的, 导致挂载失败, 而失败原因其实就是默认情况下 OpenWrt 并不支持 Exfat 文件格式, 为解决该问题, 我这里单独又装了 kmod-fs-exfat 目的添加 Exfat 格式的支持

image

七、共享硬盘

挂载完硬盘, 下面就需要修改下我们上面配置的网络共享设置了, 修改了共享文件路径为硬盘的挂载点路径, 最后点击保存并应用

image

测试: Mac 下重新连接 Smb 服务器

image

八、参考

大家好, 我是墨渊君, 如果您喜欢我的文章可以: