Linux 如何在nodejs中创建没有sudo限制访问的文件

Linux 如何在nodejs中创建没有sudo限制访问的文件,linux,node.js,file-permissions,sudo,Linux,Node.js,File Permissions,Sudo,所以我正在运行一个我已经工作了一段时间的项目。 我使用sudo节点运行它,我首先想知道这是否是一个好主意?我这样做的原因是,除非我使用sudo启动我的程序,否则它偶尔不会让我在端口80上侦听 无论如何,当我使用fs.appendFileSync或任何文件创建时,它将限制对sudo的文件访问(我只能使用sudo rm…删除操作系统中的文件,我希望能够从任何其他系统用户删除和修改这些文件) 那么,我应该使用sudo启动节点吗?我如何在sudo中创建文件,然后允许其他用户删除它们(例如我自己使用ui)

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

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


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

有几种比sudo更好的方法

  • 在端口80上使用反向代理侦听将流量转发到您的节点进程,该进程以非根用户身份运行,侦听端口>1024。这是绝大多数部署或真实部署的运行方式,有充分的理由。有关支持参数,请参阅和
  • 以root用户身份启动节点进程,将端口80绑定为root用户,然后使用
    process.setuid
    删除非root用户的权限
  • 请注意,
    sudo
    的用途主要是让登录并运行交互式shell的用户运行特定命令。它实际上在操作网络服务方面没有任何作用

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

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


    并非“偶尔”,始终如此。Unix进程必须是root才能绑定到<1024个网络端口。

    有几种比sudo更好的方法

  • 在端口80上使用反向代理侦听将流量转发到您的节点进程,该进程以非根用户身份运行,侦听端口>1024。这是绝大多数部署或真实部署的运行方式,有充分的理由。有关支持参数,请参阅和
  • 以root用户身份启动节点进程,将端口80绑定为root用户,然后使用
    process.setuid
    删除非root用户的权限
  • 请注意,
    sudo
    的用途主要是让登录并运行交互式shell的用户运行特定命令。它实际上在操作网络服务方面没有任何作用

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

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


    不是“偶尔”,总是这样。Unix进程必须是根进程才能绑定到<1024的网络端口。

    您使用的是什么风格的linux?品牌还是自制的?还有,或者可能会有帮助。您也可以使用iptables并将端口80转发到8000或任何其他端口>1024-好吧,我刚才看到jonathan的链接,基本上就是这样;)我正在使用ubuntu,我会调查这些链接,干杯。你用的是什么味道的linux?品牌还是自制的?你也可以使用iptables,将端口80转发到8000或任何其他大于1024的端口-好吧,我刚刚看到jonathan的链接,基本上就是这样;)我正在使用ubuntu,我将调查这些链接,cheers.hmmm那么作为非root用户在端口8080上订阅,然后在更高的路由器/防火墙级别将端口80上的流量直接传输到我的进程是更好的方法,然后直接在端口80上操作并需要root访问?这有什么缺点吗?您需要的是一个反向代理,如nginx/apache/varnish/ha proxy/etc(不是路由器,不是防火墙),作为您的web服务器和反向代理。我在上面链接的答案中完整地列出了这个列表的许多优点。那么,使用路由器/防火墙以这种方式进行端口转发的缺点是什么呢?感谢所有有用的信息。缺点是缺少上面我链接到的答案中所述的优点:当你的应用程序服务器关闭时,你不能提供错误页面,你不能轻松地进行虚拟主机托管,你的SSL会变慢,你不能进行负载平衡,等等。啊,对了,所有这些都是非常真实的问题,好的,非常感谢您提供了非常详细的答案,非常感谢。hmmm那么,在端口8080上以非根用户身份订阅,然后在更高的路由器/防火墙级别将端口80上的流量直接传输到我的进程是一种更好的方法,然后直接在端口80上操作并要求根用户访问?这有什么缺点吗?您需要的是一个反向代理,如nginx/apache/varnish/ha proxy/etc(不是路由器,不是防火墙),作为您的web服务器和反向代理。我在上面链接的答案中完整地列出了这个列表的许多优点。那么,使用路由器/防火墙以这种方式进行端口转发的缺点是什么呢?感谢所有有用的信息。缺点是缺少上面我链接到的答案中所述的优点:当你的应用程序服务器关闭时,你不能提供错误页面,你不能轻松地进行虚拟主机托管,你的SSL会变慢,你不能进行负载平衡,等等。啊,对了,所有这些都是非常真实的问题,好的,非常感谢您提供的信息丰富的答案,非常感谢。