如何确定目录或文件确实被删除了?

jco*_*ora 17 filesystems security files data-destruction

我知道大多数文件在删除后实际上并没有从磁盘中删除,并且可以在以后恢复。

如何确保我删除的目录实际上会从磁盘中删除?有实用程序吗?

我正在使用 Debian Linux。

taf*_*fer 15

有一个非常流行的工具叫做shred. 它会覆盖每个文件 25 次,然后才会被删除。这可能是我正在寻找的。

shred 的用法很简单

$ shred secret_archive.tar.gz
Run Code Online (Sandbox Code Playgroud)

但是请注意,如果出现以下情况,现代系统shred可能效率低下无用

  • 您的程序会创建您不知道的临时文件(像许多 GUI 应用程序一样)
  • 您的 FS 基于写时复制(如 ZFS 或 Btrfs)
  • 您的 FS 是基于日志的(如 NILFS)
  • 您的 FS 使用数据日志(如某些配置中的 JFS、ReiserFS、XFS、ext3 或 ext4)
  • 您的 FS 使用压缩
  • 您的 FS 在不同位置分配新版本的文件
  • 您有快照或备份
  • 你在网络FS
  • 您正在使用具有磨损均衡算法的 SSD

其他可能更安全的选项是:

  • 加密关键数据
  • 覆盖整个分区或存储设备
  • 设备的物理破坏

  • `shred` 是万金油:它并不比 `head -c $(wc -c secret_archive.tar.gz)` >!secret_archive.tar.gz` 好。除非您使用的是 1980 年代或 1990 年代初期的硬盘,否则使用 shred 始终毫无意义。 (3认同)
  • 切碎/bcwipe/等。是文件系统级别的万金油。对于任何文件系统。由于您处理文件的方式:每次单击保存时,旧文件都会被删除(驻留在可用空间中),并创建一个新文件。如果文件系统已经忘记了它,你就不能粉碎它。-- 它在设备级别或覆盖所有可用空间级别上有所不同。shred 是 Linux/Unix 中少数可用的快速随机数据源之一。/dev/(u)random 它太慢了,无法用于覆盖大量数据。-- 因此,单个 shred pass 可以用于设备或可用空间,但不适用于单个文件 (3认同)

Gil*_*il' 14

在存储数据之前加密数据。要擦除数据,请擦除密钥。

如果您已经以明文形式写入数据,那么再以简单的方式将其擦除为时已晚。在不同的地方可能有多个数据副本:

  • 如果文件被多次写入(覆盖或替换),则在文件系统上;
  • 在文件系统上,如果它作为碎片整理的一部分重新排列;
  • 在日志中(在上次写入数据后这可能会很快消失);
  • 在备份中;
  • 在禁用扇区中(尤其是在 SSD 上)。

要清除文件系统上的数据副本,一个粗略的方法是填充可用空间(cat /dev/zero >somefile并等待它停止,因为文件系统已满)。这将覆盖所有完整的块。

小部分数据可能会保留在不完整的块中,这些块被其他文件部分使用。这对文件名尤其重要,文件名可能保留在存储目录内容的块中。要清除所有内容,请备份所有文件,完全覆盖包含文件系统的设备,然后恢复文件。

存储介质可以在不再使用的块中保留数据。在硬盘上,这意味着已重新分配的坏块;在磁盘开始磨损之前,这种情况非常罕见。在 SSD 上,由于磨损均衡,这很常见。在这两种情况下,威胁都非常低,因为访问该数据需要一个有点老练的攻击者以及一些中等昂贵的硬件和时间来浪费。如果您关心这些威胁,请加密您的数据,不要将您的密钥留在身边。

请注意,您可能会看到有关通过多次通过或使用随机数据而不是零(“Gutmann 擦除”)来擦除数据的建议。算了:这仅适用于 1980 年代的硬盘(即使如此,重建数据也不是那么便宜,重建也相当不可靠)。用零覆盖就足够了;进行多次随机传递是过时的建议或万金油。请参阅为什么在硬盘驱动器上多次写入零(或随机数据)比只执行一次好?