我正在尝试提供一项服务,尽可能少地保留其用户的数据。为此,我想确保使用取证工具的人不会获得比查看我的数据库或文件系统更多的信息。换句话说,你不应该能够用十六进制编辑器浏览我的硬盘并找到用户昨天删除的消息。
我已经采取的措施:
我在 30 分钟内删除了带有识别信息的日志文件。我已经关闭了交换。我有/tmp
, /home
, /root
, 并/var/log
安装在 RAM 磁盘上。我已删除rm
,并srm
在其位置放置了硬链接。
我有一个不会重新分配块的硬盘,除非有坏扇区。
我的系统目前存在的问题:
- 如果敏感文件被修改并变小,那将(AFAIK)释放一个扇区,即使
srm
在文件上调用该扇区,也不会被粉碎。 - 更改
rm
对于直接调用 unlink 的程序没有任何作用。 我在 MySQL 中有包含敏感数据的行。我删除了这些行,但我担心 MySQL 会以某种方式保留它们。
编辑:似乎 SQLite 有一个名为secure_delete
. 我将改用 SQLite。
可能的改进:
- 设置 chattr 属性
s
(安全删除) 我现在没有这个设置,因为 chattr 手册说 ext2/3/4 忽略了这个标志。我发现关于 ext4 是否支持它的信息相互矛盾。哪些文件系统尊重它? - 擦除可用空间。似乎是一种大锤方法,但我无法找到解决#1的方法。此外,我看到的执行此操作的方法涉及制作一个非常大的文件,然后将其删除。我担心当这个系统几乎没有空间时它可能会导致程序崩溃。
我可以对 MySQL 数据库(绝对不包含已删除的行)进行文本备份,删除原始文件,然后恢复它们。切换到不同的 SQL 守护进程?- 重新启动以清除 RAM 磁盘。但是,我不希望经常停机。此外,它不会做任何事情来清除残留在硬盘上的数据。
解决这三个问题的最佳方法是什么?我目前正在使用带有 ext3 和MySQL SQLite 的 Arch Linux。我愿意改变其中的任何一个。
感谢您的关注!