好的,我正在使用Docker,我还不熟悉w/ Chroot监狱。
我有Docker映像w/安装了Debian / Node.js。但是我希望每个Debian用户都可以在Docker中运行他们自己的Node.js应用程序w/o根访问。
示例:
所以吉米现在可以运行Node.js应用程序了,因为他有/bin/bash。但他也可以修改整个系统(例如,他可以做"rm -R /etc")。我说的对吗?
然后,例如,我可以修改jimmy的shell: /usr/sbin/nologin,并给他只从WEB启动/停止Node.js实例的选项.但是在Node.js中,使用fs模块可以对整个系统进行修改。我说的对吗?
好的,如果你们中有人说,我需要的是第一个选择。那么,如果吉米将使用端口8080运行Node.js web服务器,而另一个用户将使用相同的端口,那么我如何绑定端口?有了码头,我想在集装箱开始之前我就能处理好了。
发布于 2018-04-18 17:12:03
您似乎对用户登录有一些误解。
使用/bin/bash或直接Nodejs访问,用户只能修改他们有权修改的文件。大多数/etc可能无法由jimmy写,因此它们不应该能够对整个目录进行rm。
使用/usr/sbin/nologin是正确的,用户将无法登录到系统。在此场景中,运行用于Nodejs访问的web时,仍然需要确保web不允许访问您不希望访问的文件或有访问权限的用户。
无论选择哪种解决方案,都不能在同一个IP地址和端口上运行多个服务。可以将服务绑定到不同IP地址上的同一个端口,也可以使用不同的端口。解决方案可以是让每个用户在其端口上运行,然后构建一个web服务器作为每个服务的代理。
您谈到使用Docker,所以我不知道您为什么不坚持这样做,尽管我不知道您正在使用的可能的用户限制。它最像一个色度与额外的隔离和网络管理。Docker主要用于运行单个服务,因此每个用户都拥有自己的容器,运行Nodejs实例听起来就像这样一个用例。
如果Docker不是一个选项,我建议您使用chroot,如果您有信心,您可以正确地这样做。否则,听起来您的需求可以满足一个单一的系统,提供多用户登录与适当的权限无处不在。
https://unix.stackexchange.com/questions/438551
复制相似问题