问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

基于 sftp 的 NAS (局域网文件存储服务器)

创作时间:
作者:
@小白创作中心

基于 sftp 的 NAS (局域网文件存储服务器)

引用
CSDN
1.
https://blog.csdn.net/secext2022/article/details/140305630

本文详细介绍了如何基于sftp搭建局域网文件存储服务器(NAS),内容包括目录权限设置、GNOME(ArchLinux)PC配置、Android手机配置以及总结展望。文章结构清晰,内容详实,包含了具体的命令操作和图示说明,适合有一定技术基础的读者参考学习。

局域网NAS(文件存储服务器)的基本功能有:能够存储文件,同时能够通过多个设备访问(上传/下载)文件。这些功能通过sftp可以实现。sftp是基于SSH的文件传输协议,SSH全程加密传输,使用公钥认证(不使用密码/口令),能够提供很高的安全性。

上文说到,在LVM和btrfs的加持之下,可以获得很高的存储灵活度。即使只有2块硬盘,也可以同时使用RAID 0(文件存储一份)和RAID 1(文件存储2份)。并且,RAID 0和RAID 1占用的存储空间还可以做到动态分配(在线扩容)。硬盘数量方面也很灵活,2块硬盘、3块硬盘、4块硬盘,都可以使用这种存储方案,添加新的硬盘也很方便。每小时一次快照,每月一次全盘数据检查(读取),提高了文件存储的安全性。这就是使用老旧e5主机和廉价二手硬盘手搓的存储服务器。

目录权限设置

对不同的文件分类存放,计划按照2个维度分成4类:

  • srv2:重要数据(不允许丢失),可以公开。比如本文。
  • srv1:允许丢失的数据,可以公开。比如软件安装包,很容易下载的电影等视频,学习资料等。
  • sd2:重要数据(不允许丢失),不能公开。比如自己的照片。
  • sd1:允许丢失的数据,不能公开。

其中是否允许数据丢失,是一个维度。是否可以公开,是另一个维度。分别创建目录存放。

相关命令:

fc-test@MiWiFi-RA74-srv:/mnt/data/bf1s/@fct$ pwd
/mnt/data/bf1s/@fct
fc-test@MiWiFi-RA74-srv:/mnt/data/bf1s/@fct$ ls -al
total 16
drwxr-xr-x. 1 fc-test fc-test  8 Jun 30 11:57 .
drwxr-xr-x. 1 root    root    32 Jun 30 09:38 ..
drwxr-xr-x. 1 fc-test fc-test 24 Jun 30 12:55 srv1
fc-test@MiWiFi-RA74-srv:/mnt/data/bf1s/@fct$ mkdir sd1
fc-test@MiWiFi-RA74-srv:/mnt/data/bf1s/@fct$ chmod 700 sd1
fc-test@MiWiFi-RA74-srv:/mnt/data/bf1s/@fct$ ls -al
total 16
drwxr-xr-x. 1 fc-test fc-test 14 Jul  1 06:11 .
drwxr-xr-x. 1 root    root    32 Jun 30 09:38 ..
drwx------. 1 fc-test fc-test  0 Jul  1 06:11 sd1
drwxr-xr-x. 1 fc-test fc-test 24 Jun 30 12:55 srv1
fc-test@MiWiFi-RA74-srv:/mnt/data/bf1s/@fct$

其中mkdir命令创建新的目录,chmod命令更改权限,700表示只有自己可以访问。

fc-test@MiWiFi-RA74-srv:/mnt/data/bf2s/@fct$ pwd
/mnt/data/bf2s/@fct
fc-test@MiWiFi-RA74-srv:/mnt/data/bf2s/@fct$ ls -al
total 16
drwxr-xr-x. 1 fc-test fc-test 28 Jun 30 11:57 .
drwxr-xr-x. 1 root    root    32 Jun 30 09:38 ..
drwxr-x---. 1 root    root    62 Jul  1 06:00 .snapshots
drwxr-xr-x. 1 fc-test fc-test 58 Jun 30 13:04 srv2
fc-test@MiWiFi-RA74-srv:/mnt/data/bf2s/@fct$ mkdir sd2
fc-test@MiWiFi-RA74-srv:/mnt/data/bf2s/@fct$ chmod 700 sd2
fc-test@MiWiFi-RA74-srv:/mnt/data/bf2s/@fct$ ls -al
total 16
drwxr-xr-x. 1 fc-test fc-test 34 Jul  1 06:11 .
drwxr-xr-x. 1 root    root    32 Jun 30 09:38 ..
drwxr-x---. 1 root    root    62 Jul  1 06:00 .snapshots
drwx------. 1 fc-test fc-test  0 Jul  1 06:11 sd2
drwxr-xr-x. 1 fc-test fc-test 58 Jun 30 13:04 srv2
fc-test@MiWiFi-RA74-srv:/mnt/data/bf2s/@fct$ sync

在RAID 1上进行类似的操作。

fc-test@MiWiFi-RA74-srv:~$ ls -al /mnt/data/bf1s/@fct
total 16
drwxr-xr-x. 1 fc-test fc-test 14 Jul  1 06:11 .
drwxr-xr-x. 1 root    root    32 Jun 30 09:38 ..
drwx------. 1 fc-test fc-test  0 Jul  1 06:11 sd1
drwxr-xr-x. 1 fc-test fc-test 24 Jun 30 12:55 srv1
fc-test@MiWiFi-RA74-srv:~$ ls -al /mnt/data/bf2s/@fct
total 16
drwxr-xr-x. 1 fc-test fc-test 34 Jul  1 06:11 .
drwxr-xr-x. 1 root    root    32 Jun 30 09:38 ..
drwxr-x---. 1 root    root    62 Jul  1 06:00 .snapshots
drwx------. 1 fc-test fc-test  0 Jul  1 06:11 sd2
drwxr-xr-x. 1 fc-test fc-test 58 Jun 30 13:04 srv2
fc-test@MiWiFi-RA74-srv:~$

这就是最终的结果了,一共4个目录,分别存放不同的文件:

  • sd1和srv1目录位于RAID 0上(文件只存储一份),存储允许丢失的数据。
  • sd2和srv2位于RAID 1上(在两块硬盘上分别存放一份,互为镜像),存储重要数据(不允许丢失)。由于RAID 0(btrfs)没有开启条带(也就是单个文件连续存储,而不是打散成数据块分散存储),所以如果损坏一块硬盘,RAID 0大约丢失一半数量的文件(另一半文件基本完好),而RAID 1不会丢失文件。

其中sd1和sd2存放不能公开的数据,只有通过SSH登录(公钥认证)之后才能访问(读写)。

srv1和srv2存放可以公开的数据,并通过HTTP服务器对整个局域网提供下载(只读),方便访问。

这种分类存储方案,在数据安全(SSH)和方便访问(HTTP)之间取得了平衡,在防止数据丢失(RAID 1)和节省存储空间(RAID 0)之间也取得了平衡。

fc-test@MiWiFi-RA74-srv:~$ ln -s /mnt/data/bf1s/@fct/sd1 sd1
fc-test@MiWiFi-RA74-srv:~$ ln -s /mnt/data/bf2s/@fct/sd2 sd2
fc-test@MiWiFi-RA74-srv:~$ ls -al
lrwxrwxrwx. 1 fc-test fc-test       23 Jul  1 06:13 sd1 -> /mnt/data/bf1s/@fct/sd1
lrwxrwxrwx. 1 fc-test fc-test       23 Jul  1 06:13 sd2 -> /mnt/data/bf2s/@fct/sd2
lrwxrwxrwx. 1 fc-test fc-test       24 Jun 30 11:59 srv1 -> /mnt/data/bf1s/@fct/srv1
lrwxrwxrwx. 1 fc-test fc-test       24 Jun 30 11:59 srv2 -> /mnt/data/bf2s/@fct/srv2

为了方便访问,可以使用ln -s命令创建符号链接。

GNOME(ArchLinux)PC

本章节适用于PC(台式机/笔记本),以ArchLinux操作系统举栗。别的操作系统也是类似的。

2.1 配置SSH登录服务器

  • (1)生成SSH密钥,比如:
ssh-keygen -t ed25519 -C fc-server-202406 -f ~/.ssh/id_ed25519-fc-server-202406

详见文章:《安装Fedora CoreOS操作系统》

  • (2)将公钥写入服务器的配置文件,比如:
fc-test@MiWiFi-RA74-srv:~$ cat ~/.ssh/authorized_keys.d/sftp
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILPbf/zBsqQw86+uqA9PoL1IlquO04KKrOTpzhRTbvCR fcst-p9-20240701
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIk8koHw0tEFA+frh+uSqijJOv2aRtKodITqgAibaNXE fcst-c6-20240701

每个公钥一行,如果有多个设备需要登录,每个设备都有自己的公钥,就多写几行。

  • (3)修改本机的SSH配置文件,比如:
> cat ~/.ssh/config
Host fc-server
    HostName fc-server.test
    User fc-test
    IdentityFile ~/.ssh/id_ed25519-fc-server-test-202406

然后使用ssh fc-server命令测试登录是否成功。

2.2 使用文件管理器访问服务器的文件

GNOME桌面环境自带的文件管理器,对sftp有很好的支持,直接就可以使用。(别的桌面环境,比如KDE,应该也可以,只是窝用的GNOME,所以就以GNOME举栗。)

相关链接:https://apps.gnome.org/zh-CN/Nautilus/

点击“其它位置”。

输入服务器地址。

输入ssh://fc-server,点击“连接”。

然后就能看到服务器上的文件了。

可以按键盘快捷键Ctrl+D把位置添加到收藏夹,方便快速访问。

然后就和访问本地文件基本一样了,比如视频文件可以直接打开播放。这边是千兆以太网局域网,上传/下载速度可达110MB/s,跑满带宽了。窝感觉挺好用哒~赞!

Android手机

在手机上可以使用质感文件(MaterialFiles)app:https://github.com/zhanghai/MaterialFiles

3.1 使用termux生成SSH密钥

安装termux:https://termux.dev/en/

在termux中安装openssh的命令:

pkg install openssh

然后使用ssh-keygen命令生成SSH密钥:

使用cat命令查看公钥

然后将公钥写入服务器的配置文件(详见上文)。

3.2 授权质感文件app访问termux里面的文件

打开质感文件app。

点击左上角“三条横线”按钮,打开侧边栏。

点击“添加存储空间”。

点击“外部存储空间”。

点击左上角“三条横线”按钮,打开侧边栏。

点击“Termux”。

点击“使用此文件夹”。

点击“允许”。

然后质感文件app侧边栏就会多出一个home,这个就是termux的文件。

3.3 配置SSH连接服务器

回到这个界面,点击“SFTP服务器”。注意不要选错类型了!这几个名称有点像。

输入服务器信息。

主机名填写服务器的IP地址。

路径就是对应的服务器上的文件(目录)路径。

名称就是显示的名称,只是为了方便显示,随意填写。

验证选择“公钥”。

用户名就是通过SSH登录服务器使用的用户名。

然后点击“私钥”右边的图标,来读取私钥文件:

打开侧边栏。

点击“home”。

点击右上角“三个点”。

点击“显示隐藏文件”。

点击进入.ssh目录。

选择私钥文件(以.pub结尾的是公钥,选择另一个文件)。

选择后会自动返回这个界面:

点击“连接并添加”。

然后侧边栏出现fc-server就是服务器上的文件。

点击即可访问。

喵呜~~!

4 总结与展望

基于sftp搭建局域网文件存储服务器(NAS)还是很简单的,只需要安装好Fedora CoreOS操作系统,配置好存储(比如LVM/btrfs)即可。SSH是服务器系统自带的,只要能通过SSH登录服务器,就自动的获得了一只NAS,妙!

PC和手机都能通过sftp协议来访问服务器上的文件,使用很方便。这下3只手机和2个PC的文件就能集中整理存放了。全部使用SSH公钥加密认证(登录),不使用密码(口令),显著提高了安全性。如果需要多人共享使用,可以在服务器上创建多个用户(详见文章《使用多用户增强服务器的安全性》),通过适当设置文件的Linux访问权限,可以做到互不影响,保持很高的灵活度与安全性。btrfs的RAID 1和快照等功能,从多个方面保护了存储的数据(详见文章《本地HTTP文件服务器的简单搭建(deno/std)》),比如一块硬盘突然损坏,误操作删除文件,或者遭遇加密勒索恶意软件。LVM使得添加/更换硬盘十分方便。作为低成本的文件存储服务器,挺适合窝等穷人使用的。

此处只实现了NAS服务器的基础功能(文件存储,多设备访问),还可以在存储的基础上,添加一些扩展功能,这些以后再慢慢完善。除了文件存储,服务器还可以方便的通过容器/虚拟机等部署更多应用,成为多功能的综合服务器。

只使用RAID 1和快照来保护存储的数据文件是不够的,比如无法应对整个服务器损坏/丢失,火灾/地震/洪水等自然灾害。还需要有额外的数据备份计划,比如传说中的“3-2-1”备份,网盘备份,高可用异地灾备等,都是可以考虑的发展方向。加油,年轻人!

Windows?

虽然窝基本不用,但是在此顺便说一句:sftp支持Windows。至少有2种使用方式:

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号