【问题标题】:How do I create files without sudo-limited access in nodejs如何在nodejs中创建没有sudo限制访问的文件
【发布时间】:2013-03-04 18:54:04
【问题描述】:

所以我正在运行一个我已经从事了一段时间的项目。 我正在使用 sudo node 运行它,我首先想知道这是否是个好主意?我一直这样做的原因是因为偶尔它不会让我在端口 80 上监听,除非我使用 sudo 启动我的程序。

无论如何,当我使用 fs.appendFileSync 或任何文件创建时,它会限制对 sudo 的文件访问(我只能使用 sudo rm ... 删除操作系统中的文件,我希望能够删除和修改这些来自任何其他系统用户的文件。

那么我应该使用 sudo 来启动节点吗?以及如何在 sudo 中创建文件,然后允许其他用户删除它们(例如我自己使用 ui)?

【问题讨论】:

  • 您使用的是哪种风格的 linux——品牌的还是自制的?此外,serverfault.com/questions/112795/…unix.stackexchange.com/questions/10735/… 可能会有所帮助。
  • 您也可以使用 iptables 并将端口 80 转发到 8000 或任何其他端口 > 1024 - 好吧,我刚刚看到 jonathan 的链接,基本上就是这样;)
  • 我正在使用ubuntu,我会调查这些链接,干杯。

标签: linux node.js file-permissions sudo


【解决方案1】:

有几种比 sudo 更好的方法。

  1. 使用监听端口 80 的反向代理将流量转发到您的节点进程,该进程以非 root 身份运行并监听端口 > 1024。这是绝大多数或现实世界部署的运行方式,并且有充分的理由。请参阅 Why should one use a http server in front of a framework web server?my answer here 以获取支持论据。
  2. 以 root 身份启动您的节点进程,以 root 身份绑定端口 80,然后使用process.setuid 将权限删除给非 root 用户。 Here's an article on this technique

请注意,sudo 的目的主要是让用户登录并运行交互式 shell 以运行特定命令。它在运营网络服务方面确实没有任何作用。

在权限方面,您的节点进程应以非 root 用户身份运行,并根据需要在特定目录中具有适当的文件系统写入权限,以便在其应用程序操作中写入文件。

有时它不会让我在端口 80 上监听,除非我使用 sudo 启动我的程序

不是“偶尔”,而是永远。 Unix 进程必须是 root 才能绑定到网络端口

【讨论】:

  • hmmm 所以将以非 root 用户身份订阅端口 8080,然后在更高的路由器/防火墙级别将端口 80 上的流量直接传输到我的进程是一种更好的方法,然后直接在端口 80 并需要 root 访问权限?这样做有什么缺点吗?
  • 您想要的是一个反向代理,例如 nginx/apache/varnish/ha-proxy/etc(不是路由器,也不是防火墙)充当您的 Web 服务器和反向代理。我在上面链接的答案中完全列出了这有很多优点。
  • 那么仅使用路由器/防火墙以这种方式进行端口转发的缺点是什么?感谢您提供所有有用的信息。
  • 缺点是缺乏我在上面链接的答案中描述的好处:当您的应用服务器关闭时,您无法提供错误页面,您无法轻松进行虚拟托管,你的 SSL 会变慢,你不能做负载平衡等等。
  • 啊,对,所有非常现实的问题,好的,感谢您提供的非常丰富的答案,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-06
  • 1970-01-01
  • 2016-03-20
  • 1970-01-01
  • 2018-05-31
  • 1970-01-01
  • 2011-04-16
相关资源
最近更新 更多