4

我正在查看 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;
}

在 Quake II 中这样做的具体原因是什么?

4

1 回答 1

7

我怀疑他们是否想到了任何非常具体的代码。很可能只是所有软件都有错误,而以 root 权限运行软件会使错误更加危险。

但是引起问题的一个很好的候选者是用于创建 mod 的 QuakeC 语言。特别是因为这些模组是由用户制作的,并且不受 Id Softwares 的控制。此外,它是具有服务器和客户端的网络应用程序。就其本身而言,这绝对是足够的理由。

所以原因很可能很简单,99% 的以 root 身份启动游戏的人都是错误的,通常没有任何理由以 root 身份运行游戏。

我真的很喜欢这个。我非常喜欢它,以至于我正在考虑在几乎所有未来的代码中使用这个简单的检查。

编辑:

我认为举个例子是个好主意。有很多情况下,以 root 身份执行的东西可能会变坏,但是想象一下程序或游戏/tmp/mygame在退出时存储了一些临时文件,程序执行类似于rm -rf /tmp/mygame. 现在想象一下,'t'无论什么原因(缓冲区溢出、位翻转、某些程序员“测试一个东西”并且没有恢复或其他任何原因),字符都被破坏并获得了 value '\0'。请记住,C 字符串是 NUL 终止的。

现在,rm -rf /tmp/mygame它不会执行,而是执行rm -rf /. 如果发生这种情况,您会希望它不是以 root 权限执行的。

是的,我知道您需要添加--no-preserve-root才能使这个特定示例造成任何损害,但这不是重点。关键是,如果程序存在以 root 访问权限执行时可能造成损坏的风险,并且程序不需要以 root 访问权限执行它应该做的事情,那么防止它以 root 身份执行是明智的一点也不。它只是增加了一层额外的安全性。

另一个例子是程序可能感染了病毒。如果是这种情况,您绝对不想以 root 身份执行它。

于 2020-01-03T17:08:38.960 回答