有关在uff和ext4上使用fscrypt的差异的问题

问题描述

我正在一个可以在多个Linux上运行的嵌入式Linux项目中 平台。一个使用e.MMC进行存储,另一个使用NAND闪存。我想要 加密所有文件系统(主要是为了防止他人 拆开闪存芯片并将其放入阅读器中)。我想要 尽量在两种硬件类型之间保持通用的方法 尽可能。两者之间的最大区别是磨损平衡 在e,MMC的硬件中,而对于NAND,我将使用UBI。

对于根文件系统,我正在考虑使用squashfs 使用dm-crypt保护。对于NAND设备,我已经尝试过了 我可以将dm-crypt放在ubiblock上,然后使用设备映射器 加载南瓜。这可以很好地映射到e.MMC世界 唯一的区别是设备映射器位于gpt分区上 而不是ubiblock设备。

我面临的挑战是其他读取/写入文件系统。我想挂载 在只读根目录和数据分区之上覆盖文件系统。 我希望这两个都也要加密。我一直在调查 fscrypt如何帮助我。 (我相信dm-crypt不能与ubifs一起使用。)

对于e.MMC上的文件系统,我将使用ext4和NAND。 ubifs。该文档说这两个都支持fscrypt。我很努力 一点点找到有关如何与ubifs一起使用的详细文档 (ext4还有很多),但我认为还有一些 我想在每个方法上实现此方法间的差异 知道更多的人来确认这一点。

在NAND方面,我只能通过使用 fscryptctl工具(https://github.com/google/fscryptctl ),而不是功能更全面的fscrypt工具 (https://github.com/google/fscrypt)。这是遵循我的指示 在修补程序中找到,可以在此处将fscrypt支持添加到mkfs.ubifs:

https://patchwork.ozlabs.org/project/linux-mtd/cover/20181018143718.26298-1-richard@nod.at/

这似乎使用以下命令加密分区上的所有文件: 提供的密钥。当我在ext4上查看fscrypt时,您似乎在这里 无法做到这一点。根目录本身不能加密,只能加密 子目录。在这里阅读: https://www.kernel.org/doc/html/v4.17/filesystems/fscrypt.html 说:

”请注意,ext4文件系统不允许将根目录设置为 加密,即使它为空。想要加密整个用户用户 一键文件系统应该考虑改用dm-crypt。”

所以这是不同的。看来,使用ubifs我无法申请 像在ext4中一样加密子目录。 README.md 这里的https://github.com/google/fscryptctl给出了一个使用ext4的示例。 这会加密称为test的子目录。我不知道该怎么做 使用ubifs也是如此。有人可以帮我吗?

我一直在使用NANDSIM内核模块进行测试。在......的最后 这篇文章是用于构建加密的覆盖ubifs的脚本 文件系统。如您所见,mkfs.ubifs直接获取了密钥 并似乎将其应用于分区上的所有文件。您 然后无法将策略应用于任何子目录,因为它们已经 加密。

我想使用用户空间中的其他一些功能 fscrypt工具提供了保护器(所以我不需要使用 直接输入主密钥)。但是我看不到任何获得用户空间fscrypt的方法 在ubif上设置加密的工具。 userspace fscrypt命令 在目录的根目录中创建一个.fscrypt目录 分区以存储有关策略和保护者的信息。这个 似乎更适合ext4实现,因为root本身未经加密。

当我尝试使用“ fscrypt setup”设置未加密的ubif时,我会运行 麻烦,因为制作标准ubif似乎会创建v4 ubifs格式 版本而不是必需的v5。这意味着“ fscrypt加密” 命令失败。 (在dmesg输出中看到这样的错误

[12022.576268] UBIFS error (ubi0:7 pid 6006): ubifs_enable_encryption
[ubifs]: on-flash format version 5 is needed for encryption).  

是否有某种方法可以使mkfs.ubifs创建格式未加密的v5 文件系统?还是v5意味着加密?

这是我的脚本,用于使用fscryptctl工具创建加密的ubif:

#!/bin/bash

MTD_UTILS_ROOT=../../mtd-utils
FSCRYPTCTL=../../fscryptctl/fscryptctl
MOUNTPOINT=./mnt

dd if=/dev/urandom of=overlay.keyfile count=64 bs=1 # XTS needs a 512bit key
descriptor=`$FSCRYPTCTL get_descriptor < overlay.keyfile`
$MTD_UTILS_ROOT/mkfs.ubifs --cipher AES-256-XTS --key overlay.keyfile
-m 2048 -e 129024 -c 32 -r ./overlay -o overlay.enc.img

$MTD_UTILS_ROOT/ubiupdatevol /dev/ubi0_6 overlay.enc.img

# Try it out
$FSCRYPTCTL insert_key < overlay.keyfile
key=`keyctl show | grep $descriptor | awk '{print $1}'`
mount -t ubifs /dev/ubi0_6 $MOUNTPOINT
ls $MOUNTPOINT
umount $MOUNTPOINT
keyctl unlink $key

NB我一直在5.4内核上使用mtd-utils v2.1.2。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)