【问题标题】:Run sails.js with least privileges in Production在生产环境中以最低权限运行sails.js
【发布时间】:2015-01-14 06:05:44
【问题描述】:

我在 Ubuntu Trusty 上的节点 0.10.33 上使用 Sails.js 0.10.5。我想在生产环境中以具有最低权限的非 root 用户身份执行节点进程。我对绑定到 1024 以下端口的各种选项感到满意,但我更关心目录权限。

理想情况下,我希望节点进程只有对其日志文件的写入权限,而没有其他权限。它应该只有对包含 app.js 及以下目录的读取权限。

目前,由于启动时运行的 grunt 任务,我需要授予对 ./.tmp 目录和 ./views 目录的写入权限。我宁愿在部署时作为不同的用户而不是在运行时执行 grunt 任务。 sails www 命令看起来很有希望,但我无法获得预期的结果。

有人可以指出正确的方向来运行 Sails.js,并且对其资产、视图等的写入权限为零吗?

【问题讨论】:

  • 这听起来就像简单地创建一个用户(对特定目录具有特定权限)并运行node(或启动您的应用程序),因为该用户应该可以工作。你试过吗?
  • sudo -u foo grunt somethingsudo -u bar node app.js(或类似)?
  • @Whymarrh 据我了解,为基于 Sails 的应用程序运行 node app.js 然后将 grunt 作为同一用户帐户的子进程启动。如果有人知道如何将 grunt 的自动执行与 Sails 分开,这将有助于回答我的问题。

标签: javascript node.js ubuntu gruntjs sails.js


【解决方案1】:

已编辑:我使用 PM2 和 apache 作为代理(使用 mod WS)。

您可以使用 apache 之类的代理从端口 80 路由到基于主机的其他内部服务器端口。

通过这种方式,您可以在同一服务器上运行多个应用程序。

它有很多有用的功能,比如查看终端中各种应用程序的日志、重启和记录崩溃的应用程序、以用户身份运行应用程序、应用程序状态...等。

pm2链接:https://github.com/Unitech/pm2

PM2 配置:https://github.com/Unitech/PM2/blob/development/ADVANCED_README.md#options

【讨论】:

  • 我在某些地方使用 PM2,在其他地方使用 Forever。无论哪种情况,它只是确保节点应用程序在发生故障时继续运行。这些工具对节点应用所需的权限没有影响。
  • 是的,但您可以将它与 apache 或 nginx 之类的代理一起使用
  • 根据我问题的第一段,通过 Apache 或 Nginx 之类的代理,或通过 iptables 端口映射,或通过 cap_net_bind_service,支持具有有限权限的端口 80 是一个已解决的问题。我的目标是运行节点应用程序,对其源文件的写访问权限为零。
【解决方案2】:

使用sails www 构建静态资产

chmod -R 440 所有文件和目录,以便您的用户和网络服务器(组)可以访问这些文件。

使用 nginx/apache 在端口 80/443 上托管网络服务器,并将请求代理到sails(在其自己的端口上或通过 unix 套接字运行)。

使用 PM2 运行风帆以使其保持运行并让它管理/收集日志。

Sails 将升起,但无法写入其 .tmp 目录,这甚至没有必要,因为您的所有静态文件都将通过 nginx/apache 路由到 www 目录。

【讨论】:

  • 另外,您可以将 www 目录移到sails 之外,并将其归网络服务器所有。
  • 这似乎可行。您是否建议即使sails.js 无法写入其.tmp 目录,它也会提升并继续运行?我还发现sails/grunt 正在尝试写入./views/ 目录。
【解决方案3】:

对我来说,最简单的解决方案似乎是将需要提升权限的 grunt 任务分离到一个单独的文件中,您可以在部署时使用不同的用户调用该文件。然后sails 不需要运行任何东西并且可以只读。

【讨论】:

    猜你喜欢
    • 2013-03-04
    • 2011-04-17
    • 1970-01-01
    • 1970-01-01
    • 2012-12-26
    • 2011-03-20
    • 2016-10-22
    • 1970-01-01
    • 2013-08-24
    相关资源
    最近更新 更多