shred命令用法和在Linux中安全删除文件的示例

时间:2020-03-21 11:47:12  来源:igfitidea点击:

每当我们在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,类似于上面显示的那样。