如何在 Linux 中将文件传输到可移动存储设备时强制加密

如何在 Linux 中将文件传输到可移动存储设备时强制加密

我尝试在将文件传输到可移动存储器时强制加密,但我不知道该怎么做。

场景是,用户插入一个 USB 记忆棒,其中可能已经包含一些文件。用户尝试将文件从本地文件系统复制到记忆棒。该文件被即时透明地加密,并且记忆棒上复制的文件现在已加密。这不应该是可选的,而是强制性的。没有 root 权限的用户不应该能够绕过这一点,并将未加密的文件传输到记忆棒。

我正在寻找的是“堆叠文件系统加密”,而不是块设备加密,因为我不想加密整个驱动器,而只想加密写入其中的文件(我也不想加密记忆棒上已经存在的文件)。

我能找到的最接近的解决方案是encfs,但它不会强制加密整个记忆棒,而是在记忆棒上创建一个加密文件夹,只有将文件复制到该文件夹​​时才加密。我尝试安装 USB 磁盘的根文件夹,但很麻烦,因为它已经被文件系统安装。

也许我应该将其作为内核模块来实现,但我想知道是否存在针对我的问题的现有解决方案或解决方法?

答案1

您在这里能做的最好的事情是使用 LUKS 卷作为 USB 记忆棒上的唯一分区,然后在该 LUKS 卷内创建一个 ext4 文件系统。但请注意,这样的配置可能需要 root 权限才能挂载,因为 udisks 可能不知道如何透明地处理这个问题。您可能希望创建一个 setuid 助手来解决这个问题。

您还可以尝试使用带加密的 ext4 格式化 USB 驱动器,尽管我上次查看时,这仍处于试验阶段。它也不如完全加密的块设备那么安全,但它可能足以满足您的需求。

还有一些特殊的 USB 记忆棒,要求用户在设备上输入 PIN 进行解密,然后才能将其识别为记忆棒。

如果您的目标不是创建单个安全记忆棒,而是强制加密所有 USB 记忆棒的所有访问,那么您的解决方案要么是从内核中删除所有 USB 模块,要么放弃并永久关闭所有 USB 端口。有多种 USB 设备和协议可用于传输数据,其中许多发生在用户空间,例如 MTP(用于将数据传输到 Android 手机),因此如果您可以让内核识别 USB 设备,那么您可能可以从设备上获取未加密的数据。事情就是这样。

相关内容