首页 / 资讯中心 / 文章详情

基于OpenWrt搭建SAMBA服务实现本地网络存储服务的方法

基于OpenWrt搭建SAMBA服务实现本地网络存储服务的方法 ★ FEATURED ARTICLE
其实我有一个正儿八经的NAS但似乎基于X86平台实现的NAS在实际部署后干得最多的事情是在局域网内当U盘加上现在的工作地点离家倒也不远不近但跑一趟也要跑个三五十公里。既然如此那又何必专门额外准备一台NAS于是我想起了以前折腾过的OpenWrt……基于Linux开发的OpenWrt的路由器具有足够的可扩展性可靠性不说久经考验但也软件生态环境丰富多样而且家用路由器的硬件设计时就考虑了节能设计为了实现无线上网路由器又是现实刚需那就整合到一起虽然性能说不上有多强但是至少节能降耗于是我又开始俺寻思……。以及吐个槽OpenWrt的文档是真的不友好散落得到处都是写个回忆录也算是一次逆熵之旅吧。环境搭建环境搭建包括两部分硬件环境和软件环境以下将分开阐述。本文使用的路由器为中兴E8820S处理器为MediaTek MT7621具有256MB RAM和128MB Flash五个RJ45 GBE网口和一个USB2.0接口以及一个5521 12V外负内正电源接口实测9V也能用估计里头还是有buck电路转3.3和5V使用breed作为bootloader。U盘为市售USB3.0 U盘使用前格式化为exFAT格式分配单元大小128KB。使用的OpenWrt固件版本为23.05.4 (因为是在自家百la宝ji箱dui里挖出来的感觉能用就继续用按说现在应该有新版本只是懒得更新了)型号HiWiFi HC5962在luci控制台界面“系统-管理权-SSH访问”中启用SSH访问接口配置为lan端口配置为22启用密码验证和允许root用户凭密码访问。个人认为OpenWrt版本并不重要只是顺便记录。在部署 NAS 服务之前应通过命令提示符以 SSH 方式执行指令完成相关软件包的安装#通过SSH方式以root用户登录 #工具可以是cmd、powershell、bash或者别的什么东西 #IP不要抄我的看你自己的 ssh root192.168.114.1 #每次ssh登陆OpenWrt安装新软件时都必须更新软件列表建议切换到国内源 opkg update #usb驱动 opkg install kmod-usb-core #SCSI总线驱动 opkg install kmod-scsi-core #scsi驱动 opkg install kmod-scsi-generic #USB OHCI controllers opkg install kmod-usb-uhci #USB UHCI controllers opkg install kmod-usb-ohci #USB EHCI controllers opkg install kmod-usb-ehci #USB XHCI controllers opkg install kmod-usb-xhci-hcd #usb2.0驱动 opkg install kmod-usb2 #usb3.0驱动用于USB3.0设备 opkg install kmod-usb3 #usb存储设备驱动 opkg install kmod-usb-storage #exFAT文件格式支持 opkg install kmod-fs-exfat #块设备挂载管理工具 opkg install block-mount #samba服务 opkg install samba4-server #samba服务图形化界面 #可选的图形化界面汉化包 luci-i18n-samba4-zh-cn opkg install luci-app-samba4设置USB存储器自动挂载考虑到路由器运行过程中可能出现的频繁掉电与服务重启本章内容围绕 USB 存储设备的自动挂载展开说明以保证外部存储在系统恢复时能够被稳定识别。在配置自动挂载前应先检查路由器是否成功识别所连接的 USB 存储器。ls -h /dev/sd*检查是否成功识别存储器执行上述命令后若系统返回设备节点信息则表明存储器已被识别。例如系统反馈如下brw------- 1 root root 8, 0 Jan 1 1970 /dev/sda brw------- 1 root root 8, 1 Jan 1 1970 /dev/sda1根据反馈可知USB存储器已成功识别并生成设备节点/dev/sda1。将存储器挂载到文件系统以挂载到/etc/smb1为例当然较真的话这东西适不适合挂载在/etc下我觉得有点争议不过我觉得开心就好mkdir /etc/smb1 mount -t exfat /dev/sda1 /etc/smb1默认状态下mount命令缺省参数是async可用于启用异步写入提升性能但是如果不想处理可能的缓存问题建议改为sync虽然会变慢。但是通过此法挂载的存储器不会开机自动挂载需要通过block-mount工具实现开机自动挂载文件系统然后使用默认自带的vi工具编辑/etc/config/fstab文件已实现开机自动挂载。#生成标准配置文件 block detect /etc/config/fstab #执行完成后修改fstab配置文件 #编辑fstab配置文件OpenWrt默认文本编辑器为vi #用不用vi不重要开心最重要 vi /etc/config/fstab config global option anon_swap 0 option anon_mount 0 option auto_swap 1 option auto_mount 1 option delay_root 5 option check_fs 0 config mount option target /etc/smb1 option device /dev/sda1 #磁盘分区类型 option fstype exfat #将自动挂载后的参数设置为sync若要使用异步写入则为async option options rw,sync option enabled 1 #启动时自动挂载 option enabled_fsck 0完成fstab文件编辑后启动自动挂载/etc/init.d/fstab enable完成上述步骤之后重启路由器拔电源、reboot命令按说都随便运行df命令应可见USB存储器被挂载到目标目录#grep用于查找文件里符合条件的字符串此处用于仅显示/etc/smb1当然想一眼万行也无所谓 df | grep /etc/smb1 #应出现的结果类似物 /dev/sda1 122874752 1458048 121416704 1% /etc/smb1部署samba服务因为samba服务默认禁用root用户而在OpenWrt中默认用户即为root存在矛盾。详见以下命令运行结果#grep用于查找文件里符合条件的字符串此处用于仅显示invalid user #想看原文直接cat /etc/samba/smb.conf或者vi /etc/samba/smb.conf cat /etc/samba/smb.conf | grep invalid user #以下为运行结果类似物 ## set invalid users invalid users root有三种方式解决此矛盾一是允许匿名用户访问此操作将允许任意连接到局域网内的用户访问网络存储器二是注释掉/etc/samba/smb.conf中的“invalid users root”此操作将允许以root用户身份访问网络存储器三是添加一个samba账户用于访问网络存储器。由于前两个方法存在显而易见的信息安全问题故以下将着重对第三种方式进行说明。添加samba用户修改/etc/passwd文件添加名为“nas_user”的samba用户vi /etc/passwd #在文本末尾添加 nas_user:x:1919:65534:NAS User:/var:/bin/false参数x的含义为指代密码保存在/etc/shadow中1919为用户ID必须确保在passwd文件中唯一65534为对应用户的主组在OpenWrt中指代nobody组/var为samba用户的根目录/bin/false表示samba用户不能登录系统只作为服务账号使用。添加samba用户后使用passwd命令设置用户密码#以nas_user为例按下回车就开始输密码 passwd nas_user然后使用smbpasswd 命令设置用户nas_user的samba服务密码#以nas_user为例按下回车就开始输密码 smbpasswd -a nas_user设置samba服务在本次配置中使用了samba服务的luci界面进行设置页面位置在服务-网络共享-常规设置。主要参数为接口选择lan用于局域网访问工作组设置为NAS描述为Samba on OpenWRT共享目录名称为NAS1将作为存储器卷名路径设置为/etc/smb1勾选可浏览允许用户设置为nas_user创建权限掩码设置为666、目录权限掩码设置为777。理论上还可以通过修改/etc/samba/smb.conf文件进行设置但是本次设置中仅使用luci界面以下为推测欢迎试毒vi /etc/samba/smb.conf #设置以下参数 Netbios name OpenWrt interfaces br-lan server string Samba on OpenWRT unix charset UTF-8 workgroup NAS #以下省略 #将下述代码添加到“# Filesystem and creation rules #”注释后 ######### Dynamic written config options ######### [NAS1] path /etc/smb1 valid users nas_user create mask 666 directory mask 777 read only no guest ok no配置完成之后通过以下命令重启samba服务/etc/init.d/samba4 restart连接测试反正我测下来都能用除了ipad不知道为什么会出现能读取但是不能写入的问题……就这样吧。
阅读完成 · 觉得有帮助?
咨询建站