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

如何解决有关在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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?