游戏服务器托管和安全

1 linux security games hosting-services

我正在为我的一个爱好项目开发一个小型控制面板,该项目应该设置游戏服务器。但是我对安全性有一些担忧,我想对此提供一些意见。

我的第一个想法是让控制面板“远程”(Web 前端与之交互)以用户身份运行,并且在设置游戏服务器时,它们都将进入其主文件夹的子目录,如下所示:

/home/paneluser/servers/server1/
/home/paneluser/servers/server2/
/home/paneluser/servers/server3/
Run Code Online (Sandbox Code Playgroud)

但是,由于用户可以通过 FTP 访问这些子目录,他们将能够上传恶意代码(即更改可执行文件),因此他们可以轻松访问其他服务器的文件,例如删除文件。

我的第二个想法是运行控制面板“远程”,因为它是自己的用户(root?),然后为每个服务器创建单独的用户,并将它们作为适当的用户启动。

我的第三个想法是扩展第一个,并在某种沙箱中运行所有服务器,其中可执行文件无法访问外部文件。但从技术上讲,我不知道这将如何完成,或者是否可能。

所以我想知道最好的方法是什么。或者还有另一种更好的方法吗?

str*_*gee 5

我的第二个想法是运行控制面板“远程”,因为它是自己的用户(root?),然后为每个服务器创建单独的用户,并将它们作为适当的用户启动。

这不是最好的解决方案,但为了你学习的兴趣,无论如何我都会批评它。我将在一秒钟内找到最佳解决方案,但这很重要。

跟我重复一遍永远不要,如果可以的话,永远不要以 root 用户身份运行面向 Web 的服务(在这种情况下,你可以帮助它,因为你可以控制应用程序)。

实现这一点的正确方法是拥有一个以 root 身份启动的守护进程,但会将特权授予非特权用户。你会让这个守护进程在它放弃特权之前产生第二个守护进程,并且非特权守护进程会与特权守护进程对话。然后特权守护进程将代表非特权守护进程执行操作。

跟我重复一遍:除非特权守护进程执行验证,否则这种权限分离是无用的。这意味着您不能让特权守护进程盲目地接受来自非特权守护进程的命令。它必须确保命令正确且有意义。如果不做验证,就引入了混淆副问题漏洞。在编写此类安全代码时,假设您的面向 Web 的服务将受到威胁。我听到你在说什么——“那永远不会发生”。是的,它会。安全就是限制损害。您还可以从阅读计算机安全中的六个最愚蠢的想法中受益。

我的第三个想法是扩展第一个,并在某种沙箱中运行所有服务器,其中可执行文件无法访问外部文件。但从技术上讲,我不知道这将如何完成,或者是否可能。

A+:这是(部分)实现这种 Web 应用程序安全性的正确方法。完成此操作的方法是在chroot jail中生成服务器进程。