我正在尝试设置一个生产服务器,我是否应该创建一个单独的用户来运行某些应用程序,类似于 Apache 所做的那样?以 root 身份运行它们是否不安全?
操作系统:Ubuntu 9.10
该服务器用于基于 Web 的应用程序,它托管一个网站,但也托管许多支持服务器进程
答案1
我更愿意让每个应用服务以自己的用户身份运行,以便尽可能地隔离它们。如果系统的任何部分出现故障或受到损害,我希望尽可能地将损害限制在局部。
答案2
Root 是神奇的按钮。应尽量少以 root 身份运行。
其余的,这是专用服务器吗?也就是说,它运行了多少个应用程序?只有一个,选择任何用户。甚至可以以 Web 用户身份运行它。
基本上,你可以将用户视为边界。如果所有内容都以同一用户身份运行(例如 www),那么所有这些内容都可以直接相互访问。如果其中一个受到威胁,则所有内容都是开放的。
但是,对于许多用途来说,这并不重要。别误会,但你似乎不是安全专家,所以我有种感觉,如果有人能访问你的机器,一切都完了。需要付出专门的努力才能使机器免受专门攻击者的攻击。
顺便说一句,您没有提到您的 Web 应用程序是用什么语言编写的。如果是 Ruby on Rails,则每个应用程序都可以轻松地成为其自己的用户。如果是 PHP,那么可能不行。可能以 Web 用户身份运行它们。
答案3
whatWhat 我让每个 django 实例都以单独的用户身份运行。这是最好的方法。我使用的是 Apache + WSGI Daemon 进程。我之前用同一个用户运行过所有实例。但我们随机遇到了一些问题。作为微调许多事情的一部分,我遵循了将每个实例的用户分开的做法。从那时起,在过去的 8 个月里我没有遇到任何问题。
就像 John 提到的那样,如果您的一个实例受到损害,那么所有其他实例都不必担心。
答案4
以 root 身份运行 Python Web 应用程序绝对是不明智的。如果代码的特定部分必须以 root 身份运行,那么最好将其分解为单独的后端服务,主 Web 应用程序使用某些进程间通信过程与该服务进行通信。该后端应用程序应仅接受来自运行 Web 应用程序的主机的连接,而不是来自任何主机的任意连接。
除此之外,您没有说明如何托管 Django,因此如果您也想使用隔离代码以特定用户身份运行的方法,那么就很难给您提供建议。您使用的是 mod_python、mod_wsgi、fastcgi 还是代理到运行它的后端 Python WSGI 服务器?
在最坏的情况下,您唯一的选择是让代码以与 Apache 相同的用户身份运行。如果在同一个 Apache 上运行其他应用程序(无论是 Python、PHP 还是其他语言),则不建议这样做。这是因为所有应用程序都可能相互干扰,因此单独应用程序中的漏洞仍然会给您带来问题。
因此,最好以不同的用户身份运行各个应用程序,并锁定文件系统权限,使得每个用户只能访问该应用程序的数据。
如果您想要更高级别的谨慎,那么您可以开始考虑在 chroot 环境中运行单个应用程序。
您具体能做什么取决于您如何托管它,因此了解这一点很重要。