如何自建NAS以及玩出花(五):做一个真正的NAS
如何自建NAS以及玩出花(五):做一个真正的NAS:filebrowser & smb
NAS对我们来说最常用的功能就是远程文件的存储,类似个人云盘。自建的NAS如果想要获得如成品NAS那样或者是如百度云盘那样的使用体验还是需要费一番功夫的。
我个人对于通用文件的存储需求不是很多,所谓通用文件,就是除了视频、音乐、图片这种专有分类的文件格式之外的文件,本身普通人的通用文件不会很多,另外想要百度云开会员后的速度,对于家用宽带的我们来说成本还是有些高。
基于此,我对通用文件的存储使用了2种方案,一种是在外网访问的filebrowser,一种是在内网更加方便的smb。
注意:千万不要在外网使用smb方案,因为smb协议的漏洞很多,很容易被注入恶意程序。
filebrowser
filebrowser 是一个使用go语言编写的软件,功能是可以通过浏览器对服务器上的文件进行管理。可以是修改文件,或者是添加删除文件,甚至可以分享文件,是一个很棒的文件管理器,你甚至可以当成一个网盘来使用。总之使用非常简单方便,功能很强大
因为filebrowser是基于浏览器的,所以这也免去了安装客户端的问题。当前的App或者是客户端,对于大公司来说有很多用处,可以将流量限制在自己的私有域中,获取用户数据等等,但是对于我们自己来说,使用浏览器的web端,是最简单最实用的工具了。只要是有图形化界面的地方都会有浏览器的存在,而且不限制平台,到处可以运行。
filebrowser安装
使用 filebrowser 最简单的方式,就是把 filebrowser 下载到你的电脑上。个人电脑、服务器、windows 系统、linux系统、甚至苹果系统都可以使用。只需要下载对应的版本即可。本质上你下载的就是一个文件,一个可以运行的文件。一旦运行,就可以通过浏览器对电脑上文件进行管理操作。
下载地址:filebrowser-github
打开后,根据本教程,应该选择linux-amd64-filebrowser.tar.gz,如果你是使用其他的系统或者架构,根据名称自由选择。文件的名字的结构是 操作系统+cpu架构。
下载好后,我们进行解压,你可以给他单独放一个文件夹,这样便于之后的控制:
tar -xzvf linux-amd64-filebrowser.tar.gz
CHANGELOG.md
LICENSE
README.md
filebrowser
下面直接运行一下,看看会发生什么:
./filebrowser
15:22:42 No config file used
15:22:42 Listening on 127.0.0.1:8080
15:22:57 Caught signal interrupt: shutting down.
2021/11/30 15:22:57 accept tcp 127.0.0.1:8080: use of closed network connection
[root@tchkq1 filebrowser]$
[root@tchkq1 filebrowser]$ ls
CHANGELOG.md filebrowser filebrowser.db LICENSE linux-amd64-filebrowser.tar.gz README.md
这样就证明,你的NAS是可以运行filebrowser的。
可以看到默认使用的是 1080的端口, 监听的地址是本机的地址 127.0.0.1 。介绍运行后在当前的目录增加了一个配置文件 filebrowser.db 。
更加详细的信息可以官方的交流网站:https://www.filebrowser.cn/
filebrowser配置
如果你看了官方网站,你就可以知道,filebrowser的配置可以在启动filebrowser的时候放在命令参数当中,也可以放在文件当中,这些文件通常位于以下三个文件夹中名字是 .filebrowser.{json, toml, yaml, yml}。
这次介绍一下,把filebrowser的配置就放在filebrowser.db当中。后续使用 systemctl
设置自启动的时候,可以直接访问这个filebrowser.db配置文件即可。
比价奇怪的是,这个.db文件是个二进制文件,需要通过filebrowser打开才能访问和修改
❯ ./filebrowser config cat # 默认查看当前目录下的db文件
Sign up: false
Create User Dir: false
Auth method: json
Shell:
Branding:
Name:
Files override:
Disable external links: false
Disable used disk percentage graph: false
Color:
Server:
Log: stdout
Port: 8082
Base URL:
Root: /home/
Socket:
Address: 0.0.0.0
TLS Cert:
TLS Key:
Exec Enabled: false
Defaults:
Scope: .
Locale: en
View mode: list
Single Click: false
Commands:
Sorting:
By: name
Asc: false
Permissions:
Admin: false
Execute: true
Create: true
Rename: true
Modify: true
Delete: true
Share: true
Download: true
Auther configuration (raw):
{
"recaptcha": null
}
后续都是类似的,每次修改配置,filebrowser都会把其中的内容打印一遍,让你查看修改了哪些内容。
可以根据自己的需要进行修改,filebrowser要写绝对路径,或者是直接在该文件的路径下执行,命令如下:
- 创建配置数据库:
filebrowser -d filebrowser.db config init
- 设置监听地址:
filebrowser -d filebrowser.db config set --address 0.0.0.0
- 设置监听端口:
filebrowser -d filebrowser.db config set --port 8088
- 设置语言环境(中文):
filebrowser -d filebrowser.db config set --locale zh-cn
- 设置日志位置:
filebrowser -d filebrowser.db config set --log /var/log/filebrowser.log
- 添加一个用户:
filebrowser -d filebrowser.db users add root password --perm.admin
,其中的root和password分别是用户名和密码,根据自己的需求更改。 - 设置根目录(就是filebrowser所能访问的最上层目录):
filebrowser -d filebrowser.db config set --root /home
, 路径根据自己的需求选择
自启动和管理
与之前一样,filebrowser的自启动和管理都使用了 systemctl
命令,基本除了docker有自己的管理工具,Linux原生程序都会使用这个命令来进行控制。
配置文件在:/etc/systemd/system
下面是配置过程:
❯ cd /etc/systemd/system
❯ sudo vim filebrowser.service
# 填入
[Unit]
# 服务名称,可自定义
Description = file server
After = network.target syslog.target
Wants = network.target
[Service]
Type = simple
User=unibeam
Group=unibeam
# 启动frps的命令,需修改为您的frps的安装路径
ExecStart = /绝对路径/filebrowser -d /绝对路径/filebrowser.db
[Install]
WantedBy = multi-user.target
使用 :wq
保存退出即可。
别忘了使用,sudo systemctl daemon-reload
命令重载配置文件。
sudo systemctl start filebrowser
启动filebrowser,如果没有报错,则说明启动成功。
sudo systemctl status filebrowser
查看运行状态。
sudo systemctl enable filebrowser
设置开机自启。
启动成功就可以使用浏览器访问FileBrowser了,在浏览器输入 服务器IP:端口
,示例:http://192.168.1.1:8088
可以在设置中根据自己的情况进行更改:
smb
SMB网络文件系统协议, 全名服务器消息块(Server Message Block),曾用名CIFS(通用互联网文件系统 Common Internet File System), 公元1983年诞生于IBM,幼年得到英特尔和微软的照料,最终在微软的培养下成长为当今世上网络文件系统协议两极之一的存在。
作为一个诞生在谷歌、亚马逊、雅虎、甚至思科都不曾存在的互联网“远古”时代的网络协议,SMB1.0已经不太适用于如今的互联网了,尤其是因为2017年因为WannaCry病毒事件爆出即为重大的安全漏洞,所以不建议将SMB开放端口,在互联网上进行访问。但因为其古老,所以很多的操作系统都支持这一协议,导致这一协议成为Windows、Linux、Mac之间能够无缝进行文件传输的存在。在Windows或Mac上,可以通过SMB协议,将Linux的硬盘映射成一个网络磁盘。
最早发布于1992年的SAMBA则是开源界对SMB协议支持最完整也是使用者最多的项目。现在我们需要使用这个项目构建自己的SMB服务器。
安装
使用apt可以直接安装samba服务。
sudo apt install samba
便于以后方便,开启防火墙:
sudo ufw allow samba
配置
samba的配置十分复杂,SMB协议作为一个古老的协议目前发展的已经非常充分,功能十分多。但我们只需要在内网使用即可,保证最基本的服务就行。
/etc/samba/smb.conf
是samba的主要配置文件。这个配置文件可以分为两个部分,一个部分是全局参数,一部分是共享资源相关参数。
[global]
#与主机名相关的设置
workgroup = WORKGROUP <==工作组名称
server string = %h server (Samba, Ubuntu) <==说明性文字,内容无关紧要
#与登录文件有关的设置
log file = /var/log/samba/log.%m <==日志文件的存储文件名,%m代表的是client端Internet主机名,就是hostname
max log size = 1000 <==日志文件最大的大小为1000Kb
[Share] <==资源组名,后续Windows添加的时候也需要用到
comment = home directories <==一些无关紧要的介绍
path = /home <==实际共享的目录
public = no <==是否设置公共属性,即使是内网,也建议选择NO
writable = yes <==是否可写入,如果是no就无法上传和修改SMB文件的内容了
browseable = yes <==设置可否被所有用户浏览到资源名称
read only = no <==只读属性
create mask = 0777 <==创建或上传文件的权限
directory mask = 0777 <==文件夹权限
available = yes
workgroup = sambauser <==用户组,通常出问题都是在这里
设置账号用于登录samba服务器,同时并设置密码。具体命令:
useradd sambauser
smbpasswd -a sambauser
New SMB password:
Retype new SMB password:
这个账户密码的配置通常是samba无法使用的主要原因。我是将用户名设置为自己的SSH登录时候使用的用户,这样比如要利用SMB上传一个文件到Linux,可以保持文件所有者和权限不变。
自启动和使用
使用 systemctl
进行控制,配置文件已经在使用apt安装的时候自动安装好了。
sudo systemctl restart samba
重启
如果没有报错的话,就说明没问题了。
sudo systemctl enable samba
添加一下开机自启,我们回到Windows上。
Windows打开此电脑,点击上边三个点的按钮,选择映射网络驱动器。
会要求你输入文件夹地址,IP选择自己的内网IP,后面跟着之前在smb.config中设置的资源名,这样他会自动进行查找,之后会要求你输入用户名和密码,这只需要输入一次,需要输入你使用 smbpasswd
命令创建的密码。
添加好之后你就可以如使用本地硬盘一样,使用网络存储了。