是否可以使用基本的 Unix/Linux 命令行工具自行安全擦除文件,而无需使用诸如擦除或粉碎之类的工具?

use*_*444 8 linux command-line

正如标题所说,这可能吗?

假设我有一个名为 的文件myfile.datrm不能完成这项工作,如果我没有安装wipeshred其他工具的能力,我可以“自己”安全地删除这个文件吗?

sch*_*ily 12

即使使用此类工具,这种安全擦除方法是否有效也取决于底层文件系统。

如果您使用的是基于写时复制的现代文件系统,这些工具将根本无法使用,因为它们不会写入文件使用的先前块。

如果您喜欢进行安全擦除,您要么需要支持内置于文件系统中的该功能,要么文件系统需要实现允许检索文件的磁盘块编号的接口。然而,后一种方法存在安全风险,只能为特权用户提供支持。


小智 6

请记住,文件级擦除在实践中的效果在很大程度上取决于底层文件系统和驱动器硬件。现代的写时复制(日志式)文件系统,例如 ext4,不会“覆盖”原始位置的文件数据,这使得大多数面向文件的擦除工具,例如shredwipe,远不如过去几年有用。SSD 在块级别具有类似的特性,请参阅https://www.howtogeek.com/234683/why-you-cant-securely-delete-a-file-and-what-to-do-instead/

因此,我们必须假设您是在老式磁性硬盘驱动器和非日志式非 COW 文件系统上执行此操作。1990 年代的假设也许可以接受,但它们在 2020 年是否现实?

然后,“基本的 Unix/linux 命令行工具”似乎含糊不清。 shred是 coreutils 的一部分,它一组“基本的 Unix/Linux 命令行工具”。因此,在一个级别上,使用shred并满足您的要求!

shred -zu FILENAME
Run Code Online (Sandbox Code Playgroud)

否则,您似乎在寻求一种方法来覆盖现有文件的内容(可能重复),然后“自己”删除它。您可以使用dd将零复制到文件中,但dd它也是 coreutils 的一部分,所以为什么在实践中“我自己”而不是使用shred是有争议的。

“我自己”是指仅使用 sh 或 bash 内部命令吗?

  • 首先是一个重要的注意事项:`shred` 是一个专有的 GNU 命令,而不是 UNIX 命令行工具的一部分,然后 `dd` 默认强制写入新的磁盘块,即使底层文件系统不是 COW 文件系统,顺便说一句:为什么您认为日志文件系统是 COW 文件系统? (3认同)
  • 写时复制和日记*不是*一回事。CoW 就是像 BTRFS 这样的文件系统。EXT4 记录元数据,但实际数据更改只会覆盖已分配的块。(或者`data=journal` 也会在日志中留下一份实际数据的副本)。https://lwn.net/Articles/576276/ 解释了 BTRFS 与 EXT4 和 XFS 等普通 FS 的不同之处。 (2认同)