我正在上操作系统课。接下来,我们必须做一些修改内核代码的工作。我们被建议不要使用个人机器来测试(我想这意味着安装它),因为我们可能会编写糟糕的代码并在不应该编写的地方编写。为了安全起见,我们可以使用实验室的机器。
如果我要使用虚拟机进行测试,是否可以保护主机系统免受潜在不安全代码的影响?我真的希望不必拘泥于学校的系统,快照会很有用。
如果风险仍然很高,我需要考虑什么才能安全地进行测试,有什么建议吗?
我们将首先使用 linuxmint 之类的东西。如果有人想查看当前项目中的内容:http://www.cs.fsu.edu/~cop4610t/assignments/project2/writeup/specification.pdf
答案1
开发内核模块的主要风险是,与使用常规代码相比,您可能更容易使系统崩溃,并且您可能会发现有时创建的模块无法卸载,这意味着您必须重新启动才能重新加载解决问题后再进行修复。
是的,虚拟机非常适合这种开发,我在处理内核模块时就使用它。 VM 很好地将您的测试环境与正在运行的系统隔离。
如果你要拍摄和恢复快照,你应该将源代码签入到版本控制存储库中外部以便您在放弃 VM 的当前状态时不会意外丢失最新代码。
答案2
假设您不尝试为实际硬件编写驱动程序,这是处理模块的好方法。您可以对工作系统进行快照,如果您破坏了某些内容,只需返回快照即可。
如果可以的话,制作虚拟机的完整副本,以防快照系统比我想象的更奇怪。 :)
答案3
假设您已经编写了一些 C 程序作为用户空间中的进程运行(进程只是正在执行的程序),现在您想要获得真正的操作所在(内核空间)。单个野指针可以清除您的文件系统的地方可能是您的整个内核。
是的,我会为初学者推荐一个虚拟机。这将保护你的内核免受你的侵害 XD。
有些人更喜欢 Docker,这不是一个好的选择,因为最终您使用的是主内核。 Docker 就像同一内核上的另一个发行版。
快照仅用于恢复主目录的文件。您可以使用任何版本控制系统以简单的方式做到这一点。