我想快速可靠地销毁一些数据。如何?

Kaz*_*lfe 5 security files

所以,长话短说,我有一些,呃,敏感的数据,我想保护它们免受试图窥探的人的侵害。假设它在我桌面上一个名为My Secrets.

但是,我想保留某种方法来销毁这些数据,使其无法恢复,以这种方式无法恢复并且没有证据表明这些数据甚至首先存在。

我希望能够保留我的 Ubuntu 安装和任何/所有非敏感数据,所以一个完整的核弹(遗憾的是)不是一个选择。

我如何在 Ubuntu 中实现这一目标?

理想情况下,我还希望能够在放置引脚时触发此删除操作,从那时起就不会停止(至少是部分)破坏我的数据。我也愿意使用需要设置的解决方案(例如,任何需要存储的未来数据)。

hee*_*ayl 6

shredGNUcoreutils是专门为此目的而设计的。

来自man shred

重复覆盖指定的文件,以便即使是非常昂贵的硬件探测也难以恢复数据。

shred实际上从/dev/urandom文件中读取随机字节并用它们覆盖文件内容,最后可以选择用零覆盖内容(来自/dev/zero)。因此,如果您想重新发明轮子,您可以手动完成此操作,但最好使用shred已经针对任务进行了优化的工具。


例如,对于任何给定的文件my_secured_file.txt,您可以执行以下操作:

shred my_secured_file.txt
Run Code Online (Sandbox Code Playgroud)

这里:

  • -v 为了冗长
  • -z 之后用零覆盖文件,以隐藏粉碎
  • -n 5 用于迭代次数,默认为 3

您可以根据需要增加迭代次数,尽管默认值就足够了,甚至可以删除文件 ( -u, --remove)。

检查man shred


至于shred操作文件,这样做的一个目录(递归),例如中的所有文件的操作my_secret_dir

shopt -s globstar
for f in my_secret_dir/**/*; do shred -vzn 5 -- "$f"; done
Run Code Online (Sandbox Code Playgroud)

或者find

find my_secret_dir -type f -exec shred -vzn 5 -- {} +
Run Code Online (Sandbox Code Playgroud)

笔记:

shred有一个警告,它不能在日志、缓存、RAID、压缩文件系统上正常工作。引用man shred

注意:请注意,shred 依赖于一个非常重要的假设:文件系统将数据覆盖到位。这是传统的做事方式,但许多现代文件系统设计并不满足这一假设。以下是 shred 在其上无效或不保证在所有文件系统模式下都有效的文件系统示例:

  • 日志结构或日志文件系统,例如随 AIX 和 Solaris(以及 JFS、ReiserFS、XFS、Ext3 等)提供的文件系统

  • 写入冗余数据并在某些写入失败时继续执行的文件系统,例如基于 RAID 的文件系统

  • 制作快照的文件系统,例如 Network Appliance 的 NFS 服务器

  • 缓存在临时位置的文件系统,例如 NFS 版本 3 客户端

  • 压缩文件系统

    在 ext3 文件系统的情况下,上述免责声明仅在 data=journal 模式下适用(因此 shred 的有效性有限),该模式除了元数据之外还记录文件数据。在 data=ordered(默认)和 data=writeback 模式下,shred 照常工作。可以通过将 data=something 选项添加到 /etc/fstab 文件中特定文件系统的挂载选项来更改 Ext3 日志模式,如挂载手册页 (man mount) 中所述。

    此外,文件系统备份和远程镜像可能包含无法删除的文件副本,这将允许以后恢复粉碎的文件。


在 Ubuntu 中,如果您使用的ext4文件系统也是日志文件系统,则日志模式是元数据的默认模式,而不是数据(data=ordered默认),因此shred除非更改默认值,否则您应该使用-ing获得预期结果。


作为旁注,您可以通过以下方式找到默认文件系统选项:

sudo dumpe2fs -h /partition |& grep 'Filesystem features'
Run Code Online (Sandbox Code Playgroud)

例子:

% sudo dumpe2fs -h /dev/sda3 |& grep 'Filesystem features'
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Run Code Online (Sandbox Code Playgroud)

has_journal表明这是一个日志文件系统以及默认的日记选项(S)是:

% sudo dumpe2fs -h /dev/sda3 |& grep 'Journal features'
Journal features:         journal_incompat_revoke
Run Code Online (Sandbox Code Playgroud)

两者同时:

% sudo dumpe2fs -h /dev/sda3 |& grep 'features' 
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Journal features:         journal_incompat_revoke
Run Code Online (Sandbox Code Playgroud)

  • 您必须多次写入磁盘或文件系统的“理论”很久以前就已被揭穿 - http://www.howtogeek.com/115573/htg-explains-why-you-only-have-to- wipe-a-disk-once-to-erase-it/ 和 http://skeptics.stackexchange.com/questions/13674/is-it-possible-to-recover-data-on-a-zeroed-hard-drive . 请不要传播FUD =) (3认同)