【发布时间】:2022-08-18 15:11:18
【问题描述】:
我正在构建一个 node.js 应用程序,它允许人们在我的服务器上运行代码,并且我正在使用 Docker 将用户的代码容器化,这样它就不会窃取数据或通常做他们应该做的事情\'t。我有一个 Docker 映像模板,它被复制到用户的个人应用程序目录中,我想使用我编写的这个函数来构建映像:
const util = require(\"util\");
const exec = util.promisify(require(\"child_process\").exec);
async function buildContainer(path, dockerUser) {
return await exec(`sudo docker build -t user_app_${dockerUser} ${path}`);
}
但是,当我使用它时,它需要我输入我的 sudo 密码,就好像我在终端窗口中手动执行它一样。
无论如何我可以运行这个函数而不必包含sudo 关键字?
提前致谢。
-
实际上我只是在这里找到了我自己问题的答案:askubuntu.com/questions/477551/…。
-
请注意,这里的代码非常危险:如果用户能够控制
dockerUser或path环境变量,并且知道他们有sudo访问权限,他们可以以root 身份运行任何命令,从而接管主人。至少,将命令作为单词数组传递,或者更好的是,使用Docker SDK 而不是向docker发送。 (您仍然需要访问 Docker 套接字的权限,并且粗心的容器设置仍然可以使主机成为 root。) -
用户无权访问任何一个变量,
dockerUser和path变量是使用集合中其文档中的应用程序 MongoDB ID 在服务器端生成的,因此应该没问题。我正在使用 dockerode npm 包来管理容器
标签: node.js docker dockerfile