与 sudo 相比,在用户空间运行应用服务器(如 Unicorn)有哪些好处?

与 sudo 相比,在用户空间运行应用服务器(如 Unicorn)有哪些好处?

我已经在很多项目中使用了 Phusion Passenger + Rails/Sinatra。Passenger 在主 Nginx 或 Apache 进程下运行。

但我对 Unicorn 感兴趣,部分原因是它在用户空间中运行。您只需设置 Nginx 将请求代理传递到连接到您在普通用户帐户下启动的 Unicorn 进程的 unix 套接字即可。

这两种运行 Web 应用程序的方法有什么优缺点吗?我指的是管理的简易性、稳定性、简单性等。

答案1

当您说 sudo 时,我在这里说 root - sudo 将用户提升到 root 权限,但本质上是一样的。

嗯,低编号端口仅供根用户使用,因此在许多情况下,以普通用户身份运行应用程序可能需要进行一些防火墙更改。

使用用户空间,您可以选择更好的划分(至少每个应用程序/堆栈用户,这样您就可以在一个地方设置所有内容并轻松地在系统之间移动),甚至可以 chroot。通常,避免以 root 身份运行是好的(许多应用程序在启动时会降为“nobody”,以避免以 root 身份运行),因为如果以 root 身份运行的进程受到威胁,攻击者可能会获得 root 权限。

在我看来,以普通用户身份运行通常更安全,但这实际上取决于您的应用程序。

答案2

嗯,Phusion/Nginx/Unicorn 都在用户空间和内核空间上运行,我想你想说的是非特权用户相对特权/root 用户. 这样做有以下优点:

  1. 更安全,如果你的应用程序做了一些愚蠢的事情,它就无法访问服务器的关键部分
  2. 可移植性,应用程序被划分在单一空间内。
  3. 如果你使用 rails,那么你可能会使用 capistrano 进行部署,这意味着你可以直接从部署流程启动 unicorn 流程,而无需 sudo

除此之外,我建议你使用 Nginx 的 Unicorn 套接字选项,这可以简化部署过程,并阅读有关无需完全重启即可部署应用服务器

答案3

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

  • Phusion Passenger 生成的所有应用程序进程都以普通用户身份运行。更具体地说,作为拥有 config/environment.rb 或 config.ru 的用户,不是作为 Apache/Nginx 用户。这是 Phusion Passenger 自 1.0 版以来就具有的“用户切换”功能的一部分。
  • 使用 Unicorn,您必须以所需用户的身份手动启动进程。Phusion Passenger 会自动为您处理此事。
  • Phusion Passenger 绝对拒绝以 root 身份运行任何应用程序进程。您无法覆盖此行为。Phusion Passenger 非常重视安全性,因此添加了此安全预防措施。
  • Apache/Nginx 不以特权用户身份运行。在大多数系统上,它们配置为在帐户下运行www-data
  • 有一些 Phusion Passenger 辅助进程以 root 身份运行,因此它们可以以其他用户身份生成进程,但您可以通过关闭用户切换来禁用此功能,在这种情况下全部Phusion Passenger 进程(包括应用程序进程)运行您指定的用户帐户。

Phusion Passenger 比 Unicorn 更易于管理和安装,因为它可以为您自动执行更多操作。由于采用看门狗架构,Phusion Passenger 非常稳定。它监视其内部辅助进程,并在任何进程发生故障时重新启动它们。Phusion Passenger 被超过 150,000 个网站包括大型品牌例如皮克斯、纽约时报、AirBnB、Oakley 和赛门铁克。即​​将推出的 Phusion Passenger 4 将添加更多与稳定性和可靠性相关的功能。

相关内容