我正在查看Quake II的源代码,发现它们阻止用户以root身份运行游戏
/* Prevent running Quake II as root. Only very mad
minded or stupid people even think about it. :) */
if (getuid() == 0)
{
printf("Quake II shouldn't be run as root! Backing out to save your ass. If\n");
printf("you really know what you're doing, edit src/unix/main.c and remove\n");
printf("this check. But don't complain if Quake II eats your dog afterwards!\n");
return 1;
}在《地震2》中这样做的具体原因是什么?
发布于 2020-01-04 01:08:39
我怀疑他们有没有想过任何非常具体的代码。很可能所有的软件都有bug,以root权限运行软件会使bug变得更加危险。
但是,用来创建mods的QuakeC语言是一个很好的候选方案。特别是由于这些mods是由用户制作的,并且不受Id软件的控制。同时,它也是一个包含服务器和客户端的网络应用程序。这本身就是足够的理由。
所以原因很可能很简单,99%的以root身份启动游戏的人是错误地这样做的,通常情况下,没有任何理由以root身份运行游戏。
实际上我真的很喜欢这个。我非常喜欢它,所以我正在考虑在几乎所有未来的代码中使用这个简单的检查。
编辑:
我想举个例子会是个好主意。作为根用户执行程序可能会出错的情况有很多,但是想象一下,程序或游戏在/tmp/mygame中存储了一些临时文件,在退出时,程序会执行类似于rm -rf /tmp/mygame的东西。现在假设't'字符由于任何原因(缓冲区溢出、位翻转、一些程序员“测试某件东西”而没有恢复或其他原因)而损坏,并获得值'\0'。记住,C字符串是NUL结尾的。
现在,它将执行rm -rf /,而不是执行rm -rf /tmp/mygame。如果发生这种情况,您可能希望它不是以root权限执行的。
是的,我知道您需要添加--no-preserve-root,才能使这个特定的示例造成任何破坏,但这不是重点。关键是,如果程序以root访问权限执行时存在可能导致损坏的风险,并且程序不需要以root访问权限执行来执行它应该做的事情,那么明智的做法是完全阻止它以root用户身份执行。它只是增加了一层额外的安全性。
另一个例子是程序可能感染了病毒。如果是这种情况,您肯定不想以root用户身份执行它。
https://stackoverflow.com/questions/59582491
复制相似问题