在 BSD 系统上使用“shred”

Car*_*yan 4 bsd shred macos

Linux 具有shred来自 GNU coreutils 软件包的 功能,可以在删除文件时安全地就地覆盖数据。BSD 系统(特别是 macOS)上的等效项是什么?

Mar*_*ler 7

qorg11 给出的答案在技术上是对您的问题的准确答案(所以去投票吧!)。

现实是那shred是没用的。所有 BSD 以及 Linux 都具有现代文件系统,其中“覆盖文件以实际覆盖存储介质上的字节”根本不会发生,因为这不是文件系统的结构以及存储设备的工作方式。

shred 的作用是获取一个文件并用零覆盖其内容。很好,但是许多现代文件系统都是“写时复制”(即,当您更改文件中的某些内容时,您不会修改存储设备上的相同块,而是会制作受影响块的修改副本)。Apple的APFS绝对是这些文件系统之一。

某些文件系统具有“稀疏检测”:您写入全零,因此文件系统不会将这些零写入磁盘,而只是表示文件中的一个漏洞。

所有 SSD 都具有写入磨损平衡:您实际上无法防止攻击者访问存储在内存芯片上的原始数据,因为对系统的所有写入本质上都是写入时复制,以均匀分布写入数据的负载介质(写入相同的单元通常会导致老化并增加错误概率;由于 SSD 具有统一的访问延迟,因此在物理介质上广泛分布逻辑块没有任何缺点)。另一方面,现代文件系统驱动程序支持 TRIM 操作(通常称为“丢弃”),该操作向 SSD 发出信号,表明数据可以清零,如果被要求,SSD 很可能甚至不会读取零。逻辑块。

因此,正如 qorg11 所说,即使在非 GNU 系统上,如果您安装了 GNU coreutils, 也shred相当于,但实际上, an 也同样有效。shredrm

  • “所有 BSD 以及 Linux 都具有现代文件系统,其中“覆盖文件以实际覆盖存储介质上的字节”根本不会发生”,这根本不是真的。现在最常见的 Linux 文件系统仍然是 ext4,它是日志式的。Btrfs、ZFS 和 F2FS 仍未完全成为主流 (7认同)
  • 嗯,切碎并不简单地用零覆盖文件的内容。它会用随机数据覆盖,然后可以选择在最后一遍中用零覆盖,以便看起来干净。这依赖于就地执行随机数据的覆盖而不是被优化掉。当然,这不一定是真的——文件系统可能会利用任何覆盖来优化块放置——但在许多文件系统上都是如此。类似地,文件系统可能会压缩除最后一个块写入之外的所有块写入,即使已刷新或同步。 (3认同)

小智 6

brew install coreutils您可以在 macOS(使用 Homebrew)、pkg install coreutilsFreeBSD 或OpenBSD 中安装 GNU coreutils ,pkg_add coreutils然后运行​​,其行为与Linux 中gshred完全相同。shred