Linux 具有shred
来自 GNU coreutils 软件包的 功能,可以在删除文件时安全地就地覆盖数据。 BSD 系统(特别是 macOS)上的等效项是什么?
答案1
qorg11给出的答案是对您问题的技术上准确的答案(所以去投票吧!)。
现实是那shred
是没用的。所有 BSD 以及 Linux 都具有现代文件系统,其中“覆盖文件以实际覆盖存储介质上的字节”根本不会发生,因为这不是文件系统的结构以及存储设备的工作方式。
shred 的作用是获取一个文件并用零覆盖其内容。很好,但是许多现代文件系统都是“写时复制”(即,当您更改文件中的某些内容时,您不会修改存储设备上的相同块,而是会制作受影响块的修改副本)。 Apple的APFS绝对是这些文件系统之一。
某些文件系统具有“稀疏检测”:您写入全零,因此文件系统不会将这些零写入磁盘,而只是表示文件中的一个漏洞。
所有 SSD 都具有写入磨损平衡:您实际上无法防止攻击者访问存储在内存芯片上的原始数据,因为全部对系统的写入本质上是写入时复制,以在介质上均匀分布写入数据的负载(写入同一单元通常会导致老化并增加错误概率;由于 SSD 具有统一的访问延迟,因此将逻辑块广泛分布在整个介质上)物理介质没有缺点)。另一方面,现代文件系统驱动程序支持 TRIM 操作(通常称为“丢弃”),该操作向 SSD 发出信号,表明数据可以清零,如果被要求,SSD 很可能甚至不会读取零逻辑块。
因此,正如 qorg11 所说,即使在非 GNU 系统上,如果您安装了 GNU coreutils, 也shred
相当于,但实际上, an 也同样有效。shred
rm
答案2
brew install coreutils
您可以在 macOS(使用 Homebrew)、pkg install coreutils
FreeBSD 或OpenBSD 中安装 GNU coreutils pkg_add coreutils
,然后运行,其行为与 Linux 中gshred
完全相同。shred
答案3
rm
本身有 -P 标志。
OS X 手册页将其记录为:
-P Overwrite regular files before deleting them. Files are
overwritten three times, first with the byte pattern 0xff,
then 0x00, and then 0xff again, before they are deleted.
OpenBSD 手册页:
-P Attempt to overwrite regular writable files before deleting them. Files
are overwritten once with a random pattern. Files with multiple links will
be unlinked but not overwritten.`
然而在 FreeBSD 上它什么也不做,但为了兼容性而保留了该标志。
OpenBSD 手册页的 BUGS 部分警告了其局限性:http://man.openbsd.org/rm#BUGS
-P 选项假定底层文件系统和存储介质都就地写入。对于 FFS 和 MS-DOS 文件系统以及磁性硬盘来说是这样,但对于大多数闪存存储来说并非如此。
这些也适用于切碎。