设置生产服务器,应用程序运行的用户是什么?

我试图设置一个生产服务器,我应该创build一个单独的用户来运行某些类似于apache的应用程序吗? 他们以root身份运行是不安全的吗?

操作系统:Ubuntu 9.10

该服务器是为基于Web的应用程序,它承载一个网站,但作为支持的服务器进程也是如此

我更喜欢让每个应用程序服务都以自己的用户身份运行,以便尽可能多地隔离它们。 如果系统的任何部分被破坏或损害,我想尽可能的本地化损害。

根是魔法button。 尽可能less的应该以root身份运行。

其余的,这是一个专用的服务器? 也就是说,它运行了多less个应用程序? 只有一个,select任何用户。 即使运行它作为networking用户。

基本上可以把用户当作边界。 如果所有东西都以同一用户(例如www)运行,那么所有这些东西都可以直接访问到彼此。 如果有人妥协,这是完全公开的。

但是,对于很多用途,这并不重要。 不要把这个错误,但你似乎不是一个安全专家,所以我有一种感觉,如果有人得到任何访问您的机器,反正都结束了。 它需要竭尽全力来对抗专门的攻击者。

你没有提到你的web应用程序是用什么语言编写的。 如果Ruby on Rails,每个应用程序都可以很容易地成为自己的用户。 如果PHP,好吧,可能不是。 可能运行这些作为networking用户。

什么我有我的每个django实例作为单独的用户运行。 这是做到这一点的最好方法。 我正在使用Apache + WSGI守护进程。 我以前曾经用同一个用户运行过所有的实例。 但是我们随意面对了一些问题。 作为微调许多事情的一部分,我分离了每个实例的用户。 从那以后,我在过去8个月没有任何问题。
就像John提到的,如果你的一个实例被攻破了,那么所有其他的实例都不必担心。

绝对不build议以root身份运行Python Web应用程序。 如果代码的特定部分必须以root身份运行,那么最好将其分解为单独的后端服务,主Web应用程序使用一些进程间通信进程进行通信。 该后端应用程序应该只接受来自Web应用程序运行的主机的连接,而不是来自任何主机的任意连接。

除此之外,你不会说你是如何托pipeDjango的,所以如果你也在隔离代码作为特定用户运行的方法之后,就更难build议你了。 你正在使用mod_python,mod_wsgi,fastcgi或代理到运行它的后端Python WSGI服务器吗?

在最糟糕的情况下,你唯一的select是让代码以Apache运行的相同用户身份运行。 如果在同一个Apache上运行其他应用程序,不pipe是Python,PHP还是其他语言,都不build议这样做。 这是因为所有的应用程序都可能会互相干扰,所以在单独的应用程序中的违规行为仍然可能会导致您的问题。

因此,运行单独的应用程序作为不同的用户,并locking文件系统的权限,以便每个人只能访问该应用程序的数据是最好的。

如果你想要一个额外的偏执狂水平,那么你开始看在chroot环境中运行单个应用程序。

你能做什么取决于你如何托pipe它,为什么重要的是知道这一点。