以前用群晖,文件夹可以进行加密,挂载后,才能查看,而现在切换到飞牛后,发现官方没有这个功能。怎么办?发挥自己动手,丰衣足食的光荣传统,自己搭一个!!!
发现有两个方案可以实现,一个是gocryptfs,一个是cryfs,都是基于内核的FUSE 用户空间文件系统框架的。两个方案大同小异,对比如下。我选了gocryptfs。
区别对比
| 特性 |
gocryptfs (推荐) |
CryFS |
| 加密单位 |
基于文件(1对1加密) |
基于数据块(拆分为固定大小的块) |
| 隐私保护 |
加密文件名和内容,但泄露文件大小、数量和目录结构 |
完全隐藏。攻击者无法知道文件大小、数量或目录结构 |
| 读写性能 |
极快。开销非常小,适合 NAS 存储大量数据 |
较慢。因为要维护复杂的块映射,随着文件增多性能下降明显 |
| 存储效率 |
高。原始文件多大,加密后基本还是多大 |
较低。由于采用固定块,会产生大量小文件,且存在空间浪费 |
| 云同步 |
非常友好(只同步变动的文件) |
较友好,但因为块太多,同步工具压力大 |
| 审计/成熟度 |
经过专业安全审计,非常稳定 |
基于博士论文设计,尚未经过同级规模的审计 |
登录飞牛SSH,开干
安装步骤
-
先进入root
sudo -i
-
安装需要的包
apt update
apt install gocryptfs fuse
- 因为ssh挂载用户权限和飞牛web页面用户可能不一致,或者要通过SMB 访问,必须打开允许其他用户访问的选项。
sudo nano /etc/fuse.conf
取消里面user_allow_other的注释,然后Ctrl+S保存,Ctrl+X退出
- 建立加密目录和解密挂载目录
例如:在存储1中建立文件夹xiaomimi,文件夹内部建立存放加密数据的文件夹mi,和挂载解密的明文文件夹ming

-
ssh中初始化加密文件夹
cd /vol1/1000/xiaomimi
先切换到xiaomimi目录,后面的指令都是在此文件夹下执行
gocryptfs -init ./mi
执行如下所示:输入两次你的加密密码,会生成一个恢复密钥,自己复制保存,以防自己忘记密码时恢复用
-------------------------------------------
Choose a password for protecting your files.
Password:
Repeat:
Your master key is:
631d7c49-718edfe0-d7baf442-79b291c2-
cbd4d2eb-ffdf421d-d0d5824f-bc8400ee
If the gocryptfs.conf file becomes corrupted or you ever forget your password,
there is only one hope for recovery: The master key. Print it to a piece of
paper and store it in a drawer. This message is only printed once.
The gocryptfs filesystem has been created successfully.
You can now mount it using: gocryptfs mi MOUNTPOINT
-
使用时,把加密文件夹挂载到明文文件夹,然后在明文文件夹ming中进行增删改查,内容会自动加密到加密文件夹mi
gocryptfs -allow_other ./mi ./ming
注意:一定要加-allow_other选项,不然ssh挂载了,web端可能没有权限修改
好了,你现在可以把你的小秘密都放到ming文件夹中了!!!!!!!!
-
放好了小秘密,卸载明文文件夹,小秘密从ming文件夹消失,藏起来啦!
fusermount -u ./ming
特别注意事项:有些人可能会遇到挂载后,无法在ming文件夹根目录建立文件夹,但可以建立文件的问题,似乎是FUSE对挂载根目录权限太严的原因,这时候,只要挂载后,ssh中去执行强行建立一个子文件夹,然后子文件夹中,就不存在无法建立文件夹的问题了。
挂载ming后,切换到ming目录,建立一个子文件夹
cd ming
mkdir -p mimi
一定要加-p参数,不然无法建立,然后所有数据丢mimi文件夹就好了
为了防止大家每次打命令太累,提供两个脚本,放任意目录,用ssh或者应用市场中的FntermX网页终端执行即可,大家自行取用:
挂载mount.sh:
#!/bin/bash
# 配置路径(请根据你的实际路径修改)
CIPHER_DIR="/vol1/1000/xiaomimi/mi"
MOUNT_POINT="/vol1/1000/xiaomimi/ming"
# 检查是否已经挂载
if mountpoint -q "$MOUNT_POINT"; then
echo "⚠️ 错误:文件夹已经挂载了。"
exit 1
fi
echo "🔐 正在准备挂载加密文件夹..."
echo "请输入 gocryptfs 主密码:"
# 执行挂载命令
# -allow_other 确保文件管理器可见
sudo gocryptfs -allow_other "$CIPHER_DIR" "$MOUNT_POINT"
if [ $? -eq 0 ]; then
echo "✅ 挂载成功!你现在可以在文件管理器访问了。"
else
echo "❌ 挂载失败,请检查密码是否正确。"
fi
卸载unmount.sh:
#!/bin/bash
# 配置路径
MOUNT_POINT="/vol1/1000/xiaomimi/ming"
echo "🔓 正在尝试卸载加密文件夹..."
# 使用 fusermount 卸载
# -u 卸载,-z 懒惰卸载(如果文件被占用,等不占用后再彻底卸载)
sudo fusermount -u "$MOUNT_POINT"
if [ $? -eq 0 ]; then
echo "✅ 卸载成功,数据已锁定。"
else
echo "⚠️ 卸载失败,请确保没有程序(如文件管理器或下载器)正在占用该文件夹。"
fi
用脚本还是不够优雅,还有一种方案是利用docker建立一个网页页面,在页面中进行输入密码,然后点击按钮进行挂载和卸载,等研究好了,再更新出来~~~