在用户空间中运行应用程序服务器有什么好处,比如独angular兽,而不是sudo?

我一直在使用Phusion Passenger + Rails / Sinatra进行很多项目。 乘客在主要的Nginx或Apache进程下运行。

但是我对Unicorn感兴趣,部分原因是因为它运行在用户空间。 您只需将Nginx设置为将proxy_pass请求连接到以正常用户帐户启动的Unicorn进程的unix套接字。

这两种替代方法运行Web应用程序的优点和缺点有什么要说的吗? 我的意思是在pipe理方便,稳定,简单等方面。

当你说sudo – sudo提升用户root权限,但是本质上是相同的。

那么,低编号的端口只对root用户可用,所以在许多情况下以普通用户身份运行应用程序可能需要更改一些防火墙。

在用户空间中,您可以select更好的划分(每个应用程序/堆栈用户最less使用,因此您可以将所有内容设置在一个地方并轻松在系统之间移动),甚至是chroot。 一般情况下,避免以root身份运行(很多应用程序在开始避免以root身份运行时会下降到“nobody”),因为如果以root身份运行的进程受到威胁,您可能会让攻击者获得root权限。

以普通用户身份运行通常对安全性更好,但IMO确实取决于您的应用程序。

那么,Phusion / Nginx / Unicorn都在用户空间和内核空间上运行,我想你可以说它是作为非特权用户运行的,而不是特权/ root用户 。 这有一些优点:

  1. 更安全的是,如果你的应用程序做了一些愚蠢的事情,它不能访问服务器的关键部分
  2. 可移植性,应用程序被划分在一个单一的空间。
  3. 如果您使用rails,则可能使用capistrano进行部署,这意味着您可以直接从部署过程启动独angular兽进程,而不需要sudo

除此之外,我build议你在Nginx中使用Unicorn的套接字选项,这样可以简化部署过程,并且在不需要完全重启应用服务器的情况下阅读关于部署的文档

正如coredump所说,你的意思是作为一个特权用户而不是普通用户运行。 但是Phusion Passenger绝对不会作为特权用户运行

  • Phusion Passenger产生的所有应用程序都是以普通用户身份运行的。 更具体地说,作为拥有config / environment.rb或config.ru的用户, 而不是Apache / Nginx用户 。 这是Phusion Passenger 1.0版以来的“用户切换”function的一部分。
  • 使用独angular兽,您必须手动启动stream程作为所需的用户。 Phusion Passenger会为您自动处理这个问题。
  • Phusion Passenger绝对拒绝以root身份运行任何应用程序进程。 您无法重写此行为。 Phusion Passenger非常重视安全性,所以增加了安全防范措施。
  • Apache / Nginx不能作为特权用户运行。 在大多数系统上,它们被configuration为在www-data帐户下运行。
  • 有一些以root身份运行的Phusion Passenger helper进程,以便它们可以像其他用户一样产生进程,但是您可以通过closures用户来closures此进程,在这种情况下, 所有 Phusion Passenger进程(包括应用程序进程)都会运行一个用户帐户指定。

Phusion Passenger比Unicorn更容易pipe理和安装,因为它可以为你自动执行更多的事情。 Phusion Passenger由于其看门狗架构而非常稳定。 它监视其内部的帮助程序并在其中任何一个失败时重新启动它们。 Phusion Passenger被超过15万个网站使用,其中包括Pixar,纽约时报,AirBnB,Oakley和赛门铁克等大品牌 。 即将到来的Phusion Passenger 4将增加更多稳定性和可靠性相关的function。