diff -u:内核开发中的新内容
内核开发人员面临的一个持续性问题是删除数据的最佳方法,以防止其他人恢复数据。通常有一些简单的工具可以恢复意外删除的文件,尽管某些文件系统使此操作比其他文件系统更容易。
Alexander Holler 希望让任何人更难恢复已删除的数据。他并不一定想胜过我们政府统治者无限的资源,但他想让普通恶意攻击者更难进行数据恢复。他认为问题在于文件系统通常实际上不会费心删除数据,而只是将数据与文件分离,并使磁盘的该部分可供其他文件使用。但是数据仍然会存在,至少在一段时间内,任何人都可以再次将其重新耦合到文件中。
Alexander 发布了一些补丁,以实现一个新的系统调用,该调用首先会覆盖与给定文件关联的所有数据,然后再使该磁盘空间可供其他文件使用。他认为,由于文件系统知道磁盘上的哪些块与哪些文件关联,因此将所有相关数据归零将是一项微不足道的操作。
存在各种反对意见。Alan Cox 指出,如今硬盘变得非常智能,以至于很难确切知道它们对给定命令的响应是什么。正如他所说,“如果您将扇区归零,[磁盘]完全有权在归零扇区的主索引中设置一位,而根本不必费心实际将数据归零。” Alan 说,磁盘只需接受用户输入并返回正确的输出,幕后发生的一切完全取决于硬件制造商。
Russ Dill 指出,许多用户程序也使得更难确切知道文件的数据在磁盘上的位置。例如,vim 程序创建了临时备份文件,许多其他程序也是如此。
对 Alexander 的补丁支持不多。但我认为永久删除文件的能力在某个时候会再次出现。不过,对于内核功能而言,目标始终是做好一份彻底的工作,在这种情况下,至少确实会胜过政府统治者恢复数据的努力。
关于 cgroups 存在持续的争论,一方是想要实现酷炫功能的人,另一方是想要确保安全的人。安全人员总是获胜,但辩论很少简单,有时一个酷炫的功能只需要稍微调整一下才能满足安全要求。
例如,Aleksa Sarai 想要添加一个很酷且有用的功能,限制给定虚拟机中允许打开的进程数量。这将防止某些类型的拒绝服务攻击。正如 Tejun Heo 指出的那样,问题在于打开进程限制与真实系统上的任何实际限制都不对应。而且,人们强烈反对对任何非真实资源(如 RAM、磁盘空间、CPU 数量等)施加限制。
另一方面,正如 Austin Hemmelgarn 所说,进程 ID (PID) 是真实系统上的实际限制,Tejun 同意允许在 cgroup 中限制它们可能是有意义的。并且由于这可以用于限制打开的进程数量,每个人最终都可能感到满意。但是该功能必须被呈现为限制实际系统资源,而不是限制系统的相对任意的特征。
跟踪系统 最近显示出超出其基础设施的迹象,Steven Rostedt 最近发布了一些补丁来修复这个问题。到目前为止,跟踪目录使用 DebugFS。但是正如 Steven 所说,跟踪需要创建和删除目录,而 DebugFS 不支持这一点。因此,跟踪一直在使用各种 hack 来解决这个问题。Steven 的解决方案是创建一个名为 TraceFS 的新文件系统,专门用于跟踪系统。
没有主要的反对意见,但有一些技术障碍需要克服。特别是,Steven 发现 perf 系统 被硬编码为假定跟踪系统使用 DebugFS,因此在 TraceFS 进入内核之前必须修复这个问题。
还出现了一些其他问题;例如,Greg Kroah-Hartman 建议将 TraceFS 基于 KernFS,Steven 考虑了一段时间。但事实证明,KernFS 有很多 TraceFS 不需要的与 cgroup 相关的复杂性,Al Viro 评论说:“对于任何事物来说,这不是一个好模型,除非是反硬毒品海报(‘不要注射那玩意,否则你最终可能会幻觉到这个’)。” 最终,Steven 决定反对 KernFS。