基于 sftp 的 NAS (局域网文件存储服务器)
基于 sftp 的 NAS (局域网文件存储服务器)
本文详细介绍了如何基于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种使用方式:
- (1)https://winscp.net/eng/docs/lang:chs
winscp是一个独立的sftp客户端软件,可以用来上传/下载文件。 - (2)https://github.com/winfsp/sshfs-win
sshfs-win的安装更复杂一些,可以将sftp服务器作为网络硬盘使用。