所以,长话短说,我有一些,呃,敏感的数据,我想保护它们免受试图窥探的人的侵害。假设它在我桌面上一个名为My Secrets.
但是,我想保留某种方法来销毁这些数据,使其无法恢复,以这种方式无法恢复并且没有证据表明这些数据甚至首先存在。
我希望能够保留我的 Ubuntu 安装和任何/所有非敏感数据,所以一个完整的核弹(遗憾的是)不是一个选择。
我如何在 Ubuntu 中实现这一目标?
理想情况下,我还希望能够在放置引脚时触发此删除操作,从那时起就不会停止(至少是部分)破坏我的数据。我也愿意使用需要设置的解决方案(例如,任何需要存储的未来数据)。
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)