在 Linux 下,如何作为安全擦除的一部分对目录名称进行加密?

在 Linux 下,如何作为安全擦除的一部分对目录名称进行加密?

Linux 有许多工具可用于安全地擦除每个文件的数据:shredwipesrm,... 随便你怎么说。相关说明和建议通常侧重于要删除的文件的内容,但很少关注这些文件的名称,大多数这些工具都会保留这些文件的名称,以便在剩余的目录条目中进行不必要的恢复。非日志文件系统的一个积极例外是shred,见下文。

下面举一个例子来说明这个问题:

想象一下,你生活在一个对任何与 Fnords 相关的活动都严惩不贷的国家。所以你肯定不想被发现有一个名为

Frobnicating_Fnords_mini-HOWTO.html

即使该文件的内容被 覆盖了 32 次,它也不会在您的文件系统中消失srm。如果您使用非日志文件系统,则可以使用shred -u ...,它通过在取消链接之前多次重命名文件来解决该问题。

但是,shred不能用于目录。那么如何处理目录

Frobnicating_Fnords_mini-HOWTO_files

html此示例中的文件附带什么?

这就是我提出这个问题的背景:

是否有一个 Linux 工具(或者可以在命令行上使用的 shell 脚本片段)可以安全地扰乱目录名称,以便无法在文件系统级别上再恢复它?

请注意:这个问题不是关于重复进入目录以删除整个目录树。而是关于伪装单个目录的名称。

集中讨论问题:让我们假设我们正在使用非加密、非日志文件系统,例如Ext2

展望来源shred,即函数wipename,似乎它只是renameatu在取消链接文件之前执行简单的重命名()。不幸的是,我无法通过在命令行上模仿此方法获得所需的结果mvrename(为什么?)有关详细信息,请参阅下面的补充。

当然,一种可能的解决方案是按惯例删除所有受影响的文件和目录,将整个文件系统内容复制到第二个文件系统,安全擦除第一个文件系统,并可选择将所有内容复制回来。但我正在寻找一种侵入性较小的方法,只要你听到他们的直升机的声音,你就可以迅速采取行动……


警告

的手册页shred仅在使用挂载选项 的情况下,在对 Ext3 文件系统进行日志记录时,效果才会有所滞后data=journal。这只适用于文件内容的擦除,而不适用于shred的文件名混乱能力:无论data使用哪种挂载选项模式,后者都会在 Ext3 和 Ext4 上失效。原因是文件名是元数据,并且始终记录在这些文件系统上。在这些情况下,文件名是否仍然存在,shred -u ...可以通过以下补充中显示的方法轻松验证。


补充

shred正如 Patrick Mevzek 在他的评论中所建议的那样,我在这里给出了我模仿的重命名策略来扰乱目录名称的尝试的细节:

首先,我设置了一个(新的)映像文件来保存测试文件系统,并将该文件系统挂载到/mnt

rm -f img
truncate -s 3M img
losetup /dev/loop0 img
mke2fs -m 0 -t ext2 /dev/loop0
mount /dev/loop0 /mnt/

kkkkkkkkkk然后,我在中创建了目录,并在其中创建了一个名为内容为的/mnt常规文件。然后我同步了:lllllllllllmmmmmmmmmm

cd /mnt
mkdir kkkkkkkkkk
cd kkkkkkkkkk
echo mmmmmmmmmm > lllllllllll
sync

检查图像文件(在另一个目录中),所有这些字符模式均可见:

# hexdump -C img | grep kkk
0001c030  d4 03 0a 02 6b 6b 6b 6b  6b 6b 6b 6b 6b 6b 00 00  |....kkkkkkkkkk..|
# hexdump -C img | grep lll
0001f820  6c 6c 6c 6c 6c 6c 6c 6c  6c 6c 6c 00 00 00 00 00  |lllllllllll.....|
# hexdump -C img | grep mmm
00080400  6d 6d 6d 6d 6d 6d 6d 6d  6d 6d 0a 00 00 00 00 00  |mmmmmmmmmm......|

回到过去/mnt/kkkkkkkkkk,我做了一个

shred -u lllllllllll

得出

# hexdump -C img | grep kkk
0001c030  d4 03 0a 02 6b 6b 6b 6b  6b 6b 6b 6b 6b 6b 00 00  |....kkkkkkkkkk..|
# hexdump -C img | grep lll
# hexdump -C img | grep mmm

随后检查图像文件。请注意,最后两个命令没有给出任何输出:因此成功扰乱了常规文件的shred内容(mmmmmmmmmm)和名称( )。lllllllllll

现在我想覆盖(现在为空的)目录的名称kkkkkkkkkk。为此,我做了:

cd /mnt
mv kkkkkkkkkk xxxxxxxxxx
sync

屈服

# hexdump -C img | grep kkk
0001c030  14 00 0a 02 6b 6b 6b 6b  6b 6b 6b 6b 6b 6b 00 00  |....kkkkkkkkkk..|
# hexdump -C img | grep xxx
0001c040  0c 00 00 00 c0 03 0a 02  78 78 78 78 78 78 78 78  |........xxxxxxxx|

相反,我不希望从 获得任何输出grep kkk。显然,mv为重命名的目录创建了一个新的目录条目,xxxxxxxxxx而不是重新使用旧的插槽,因此仍然保留旧名称kkkkkkkkkk

我也尝试过rename(1),结果类似:旧目录名保留了下来。

相关内容