首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何安全地从文件系统中删除文件名?

如何安全地从文件系统中删除文件名?
EN

Server Fault用户
提问于 2019-09-21 00:51:20
回答 1查看 571关注 0票数 1

我想删除linux ext4文件系统上的一个文件,这样磁盘就不包含文件的名称(空闲空间、文件系统元数据或其他任何地方)。

例如,我不希望磁盘上有一个名为"passwords.txt“的文件。

我有一种不同的形式的在超级用户上发布了这个问题,没有人成功地回答过它。

我更喜欢使用/usr/bin/shred。它可以很好地删除文件的数据,但是文件的名称仍然可以在磁盘上看到。下面是我测试它的方法:

代码语言:javascript
复制
dd if=/dev/zero of=fs bs=1M count=300
hexdump -C fs   # verify it's empty
mkfs.ext4 fs
mkdir m
sudo mount fs m
sudo chown -R $USER m
cd m
echo secretkey > passwords.txt
cd ..
sudo umount m
grep secretkey fs   # <== shows up as expected
grep passwords.txt fs
strings fs | grep sec
strings fs | grep pass
sudo mount fs m
cd m
/usr/bin/shred -vuz -n 1 passwords.txt
cd ..
sudo umount m
grep secretkey fs   # <== does not show up, this is good
grep passwords.txt fs   # <== PROBLEM: filename still shows
strings fs | grep sec
strings fs | grep pass   # <== problem: still shows up
hexdump -C fs | grep sec
hexdump -C fs | grep pass

下面是mount命令的输出,它显示了一些文件系统的模式:

代码语言:javascript
复制
type ext4 (rw,relatime,data=ordered)

关于感兴趣者的更多详细信息:

更新1:

将文件从passwords.txt重命名为类似于"asdfasdf.txt“之类的随机内容,然后再分解它并不能解决问题。当您在详细模式下运行/usr/bin/shred时,您将看到它在截断/取消文件链接之前经过一系列文件重命名。我认为这是一种安全删除文件名痕迹的方法。为了支持这一点,文件系统需要启用某些模式吗?我将复制/粘贴shred's输出在文件删除过程中的样子:

代码语言:javascript
复制
/usr/bin/shred: passwords.txt: pass 1/2 (random)...
/usr/bin/shred: passwords.txt: pass 2/2 (000000)...
/usr/bin/shred: passwords.txt: removing
/usr/bin/shred: passwords.txt: renamed to 0000000000000
/usr/bin/shred: 0000000000000: renamed to 000000000000
/usr/bin/shred: 000000000000: renamed to 00000000000
/usr/bin/shred: 00000000000: renamed to 0000000000
/usr/bin/shred: 0000000000: renamed to 000000000
/usr/bin/shred: 000000000: renamed to 00000000
/usr/bin/shred: 00000000: renamed to 0000000
/usr/bin/shred: 0000000: renamed to 000000
/usr/bin/shred: 000000: renamed to 00000
/usr/bin/shred: 00000: renamed to 0000
/usr/bin/shred: 0000: renamed to 000
/usr/bin/shred: 000: renamed to 00
/usr/bin/shred: 00: renamed to 0
/usr/bin/shred: passwords.txt: removed
EN

回答 1

Server Fault用户

发布于 2019-09-23 07:28:54

文件名存储在具有“(字符串)文件名”和相应的"(int) inode“值的”目录“数据结构中。该目录负责将文件名映射到inode,并将inode映射到磁盘上的扇区。文件名不会像文件内容那样保存在磁盘的扇区上。

文件名和目录结构有以下含义:

  • inodes不包含文件名,只包含其他文件元数据。
  • 目录是关联结构的列表,每个结构包含一个文件名和一个inode编号。
  • 文件系统在访问数据时,必须在目录中搜索特定的文件名,然后将文件名转换为正确的inode编号。
  • 不跨越文件系统边界而只是元数据更改的文件重命名,因此应该保留inode编号。
  • 在ext4文件系统上,名称的记录确实会影响inode本身(修改时间的改变),但是前面的名称仍然不会存储在任何地方。

因此,将文件重命名为随机文件实际上应该会使名称永久消失,除非您有备份系统进行定期备份--在这种情况下,您也必须处理这些备份。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/985078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档