shred命令用法和在Linux中安全删除文件的示例
每当我们在Linux或者任何其他操作系统下删除文件时,操作系统都不会从硬盘上完全删除该文件的数据。
每当我们要求操作系统删除文件时,它就会执行几项操作。
如果我们想了解文件删除的工作原理,那么非常有必要对Linux中的inode有一些基本了解。
Internet上免费提供许多开源取证工具,可用于从硬盘上检索丢失或者删除的数据。
他们中的许多人都非常易于使用并且是图形的,普通的台式机用户也可以简单地下载它们并检索数据。
因此,如果我们想安全地删除磁盘上的某些数据而不必担心检索,那么Linux可用的shred实用程序将是一个很好的工具。
我建议阅读有关inode和文件删除的文章以了解一些想法。
Shred是一个程序,已预装在大多数发行版中。
如果我们查看该命令,我们将了解到,它是通过redhat/centos中的coreutils软件包安装的
[root@localhost ~]# rpm -qf /usr/bin/shred
'coreutils-5.97-34.el5'
安装DVD centos/redhat中的coreutils软件包不可用。
现在让我们了解该命令及其工作原理。
如果使用shred命令删除文件,则可以查看文件发生了什么。
我们将使用root的主目录中的默认安装kickstart文件对此进行测试。
通常文件的内容如下。
[root@localhost ~]# tail -f anaconda-ks.cfg trousers fipscheck device-mapper-multipath sgpio perl-Convert-ASN1
让我们使用shred命令删除该文件。
[root@localhost ~]# shred anaconda-ks.cfg
现在,让我们尝试查看文件的内容。
tail -f anaconda-ks.cfg ¾µÏ4%ú ¶½hùcc~l&bÅYV¿þÌзÞUwFLÇ +³²ç3ÛªÀÛê|áðVqOÕömIJÀ\ºçÎð`º4£hÒÂ"/¹ÖIDP1`;í4#iHqÇGÿ ¨6ýÀ·UGç4÷sÜMóPoõ"®Xm{XÚþ_?Î]JíÀ,_GIÆR~ïi¦õ©¯ÁU .Ç]kh¤ó^`·¯>è]TX>=
我们可以清楚地看到,切细会使文件的内容变得杂乱无章。
哪是垃圾因此,在没有其他选项的情况下运行时,它将用垃圾数据覆盖文件的块。
这意味着真实数据将被一些杂乱的数据所覆盖,因此即使有人恢复了文件,他们也不会获得原始数据。
默认情况下,shred将用垃圾数据覆盖文件内容25次。
如果我们要覆盖文件数据的次数超过默认值25,那么可以使用-n选项,如下所示。
[root@localhost ~]# shred -n 30 anaconda-ks.cfg [root@localhost ~]#
注意:默认的anaconda kickstart文件是如此之小,这就是为什么shred能够将其覆盖30次如此之快的原因。
覆盖的速度将取决于文件的大小。
如果要查看详细模式下的操作,则可以使用-v选项,如下所示。
[root@localhost ~]# shred -v -n 30 anaconda-ks.cfg shred: anaconda-ks.cfg: pass 1/30 (random)... shred: anaconda-ks.cfg: pass 2/30 (7fffff)... shred: anaconda-ks.cfg: pass 3/30 (000000)... shred: anaconda-ks.cfg: pass 4/30 (dddddd)... shred: anaconda-ks.cfg: pass 5/30 (800000)... shred: anaconda-ks.cfg: pass 6/30 (777777)... shred: anaconda-ks.cfg: pass 7/30 (888888)... shred: anaconda-ks.cfg: pass 8/30 (249249)...
通过假设文件系统始终会覆盖数据,shred可以起作用。
在文件上应用shred有一些主要限制(尽管它在ext2上可以完美使用),下面将介绍一些限制。
- 切碎的文件删除不适用于某些日记文件系统,该日记系统同时记录数据和块
- 在高度部署的RAID(将数据复制到多个磁盘)中切碎文件可能会带来一些麻烦。
我们可以使用-s选项来切碎文件的某些第一个必需字节。
[root@localhost ~]# shred -s 2B anaconda-ks.cfg [root@localhost ~]#
上面提到的示例将覆盖文件的前2个字节(类似地,我们可以将K表示为千字节,将M表示为mega等)。
[root@localhost ~]# shred -n 30 -u anaconda-ks.cfg
如上所示,使用-u选项将在用垃圾内容覆盖文件30次后截断/删除文件。
由于前面提到的在删除文件时切碎的限制,它更适合完全擦除分区和设备。
整个分区的粉碎示例如下所示。
[root@localhost ~]# shred -n 30 /dev/sda1
如果要删除外部设备的内容,则可以将设备名称作为参数传递给shred,类似于上面显示的那样。