我有一个 USB 驱动器,里面有一个 encfs 加密文件夹。我通常用以下方法解密
encfs /media/user/DBx/enc /media/user/DBx/dec
当我使用 22.04.3 在新的 Ubuntu 安装上尝试此操作时,出现错误:
fusermount:禁止通过文件系统类型 0x7366746e 进行安装 fuse 失败。常见问题:
- fuse 内核模块未安装 (modprobe fuse)
- 选项无效 -- 请参阅使用信息
当我跑步时:
sudo modprobe -v fuse
我没有收到错误,但也没有得到任何输出。
以下是 encfs 命令的详细输出:
encfs -vf /media/user/DBx/enc /media/user/DBx/dec
2023-08-15 06:45:43,758 VERBOSE Root directory: /media/user/DBx/enc/ [main.cpp:686]
2023-08-15 06:45:43,759 VERBOSE Fuse arguments: (fg) (threaded) (keyCheck) encfs /media/user/DBx/dec/ -f -o use_ino -o default_permissions [main.cpp:687]
2023-08-15 06:45:43,771 VERBOSE found new serialization format [FileUtils.cpp:299]
2023-08-15 06:45:43,771 VERBOSE subVersion = 20100713 [FileUtils.cpp:313]
2023-08-15 06:45:43,771 VERBOSE checking if ssl/aes(3:0:2) implements ssl/aes(3:0) [Interface.cpp:103]
2023-08-15 06:45:43,771 VERBOSE allocated cipher ssl/aes, keySize 24, ivlength 16 [SSL_Cipher.cpp:395]
2023-08-15 06:45:43,771 VERBOSE useStdin: 0 [FileUtils.cpp:1660]
EncFS Password:
2023-08-15 06:46:15,760 VERBOSE checking if ssl/aes(3:0:2) implements ssl/aes(3:0) [Interface.cpp:103]
2023-08-15 06:46:15,760 VERBOSE allocated cipher ssl/aes, keySize 24, ivlength 16 [SSL_Cipher.cpp:395]
2023-08-15 06:46:17,538 VERBOSE cipher key size = 44 [FileUtils.cpp:1673]
2023-08-15 06:46:17,539 VERBOSE checking if nameio/block(4:0:2) implements nameio/block(4:0) [Interface.cpp:103]
fusermount: mounting over filesystem type 0x7366746e is forbidden
USB 驱动器上的文件系统是 ntfs。驱动器已满 24%。
但我可以用 sudo 挂载它:
sudo encfs /media/user/DBx/enc /media/user/DBx/dec
然后如果我以 root 身份启动文件管理器,我就可以读取解密的文件夹。我希望能够像在其他 ubuntu 系统上一样以普通用户身份解密该文件夹。
我可以读取/写入常规文件到 USB 驱动器。
我还可以以普通用户身份在我的硬盘上使用 encfs:
encfs /home/user/temp/enc /home/user/temp/dec
在我的 22.04.2 Xubuntu 系统上,我可以将 /media/user/DBx/enc 以用户身份挂载,就像在 18.04 系统上一样。
我无法在 22.04.3 系统上的 USB 驱动器上创建新的加密文件。我收到相同的错误:
encfs /media/user/DBx/test/enc /media/user/DBx/test/dec
Configuration finished. The filesystem to be created has
the following properties:
Filesystem cipher: "ssl/aes", version 3:0:2
Filename encoding: "nameio/block", version 4:0:2
Key Size: 256 bits
Block Size: 1024 bytes, including 8 byte MAC header
Each file contains 8 byte header with unique IV data.
Filenames encoded using IV chaining mode.
File data IV is chained to filename IV.
File holes passed through to ciphertext.
fusermount: mounting over filesystem type 0x7366746e is forbidden
fuse failed. Common problems:
- fuse kernel module not installed (modprobe fuse)
- invalid options -- see usage message
两个 22.04 系统都安装了相同的与 fuse 相关的库,并且所有版本都匹配:encfs、fuse3、gvfs、gvfs-backends、gvfs-common、gvfs-daemons、gvfs-fuse、gvfs-libs、libfuse2、libfuse3-3、libntfs-3g89、ntfs-3g、psmisc。
在两个系统上,我与普通用户属于同一组:user、adm、cdrom、sudo、dip、plugdev、lpadmin、lxd、sambashare。
我需要 root 权限的 22.04.3 是双启动机器,而我可以以普通用户身份使用 encfs 的 22.04.3 则只有 linux。存在权限问题的 22.04.3 系统有 5 个磁盘分区。linux 分区是 ext4,就像 encfs 以普通用户身份工作的 22.04.2 系统一样。
由于两个系统上的库相同,并且在磁盘实用程序中两个系统都说 USB 驱动器是 ntfs,所以我认为由于某种原因两个系统之间的磁盘类型的十六进制表示形式必须不同。
根据: https://github.com/libfuse/libfuse/issues/572 每个十六进制表示都必须在 fusermount.c 中列入白名单,而 0x7366746e 并不存在。https://github.com/libfuse/libfuse/pull/573/files
但从相关文章来看,https://github.com/rfjakob/gocryptfs/issues/662#issuecomment-1166474509提供了一种解决方法 - 只需将挂载点更改为其他地方,例如 /tmp 下。这很有效。从性能角度来看,将挂载点移出 USB 可能更好。我将挂载点放在 USB 上的原因是我开始在内存或硬盘空间很少的 chromebook 上执行此操作。
因此,系统之间的一个区别是 Linux 内核。enfcs 可以挂载到 ntfs usb 驱动器的系统是 5.15.0-76-generic,而 encfs 无法挂载到 ntfs usb 驱动器的内核是 6.2.0-26-generic。猜猜这是进步吗?
答案1
Ubuntu 6.2 内核引入了适用于 Microsoft NTFS 文件系统的新内核驱动程序。它具有不同的魔法,即必须将其列入 fuse 白名单才能允许在其上安装文件系统。
我已经提交了拉取请求以将其包含在内。您可以在以下位置查看其进度:https://github.com/libfuse/libfuse/pull/830
我不知道它是否会被移植到 Ubuntu 中的当前 fuse 包中。到目前为止,使用其他地方的挂载点是唯一的解决方案。