Docker:如何为本地用户授予root权限?

时间:2019-12-09 16:33:28

标签: docker jenkins sudo ubuntu-18.04

我正在Docker中运行这样的构建:

getProducts

我正在使用getProducts(): Observable<any> { return this.http.get(`http://localhost/api/product-search.php`, this.setHttpHeader()).pipe( tap(_ => this.log(`found fitters matching `)), catchError(this.handleError<Product[]>('getPosition', [])) );; } 设置本地用户,以避免root拥有的文件出现在我的主目录中。

现在,问题是我需要在构建脚本中使用docker run --user $(id -u):$(id -g) --rm --network=host -v `pwd`:${SRC_MOUNT_DIR} my-image:latest my-build-script.sh 来安装其他构建中的某些依赖项,但这需要root。

我该如何安排?我想不可能--user在没有密码的情况下为所有可能的用户使用。.

1 个答案:

答案 0 :(得分:1)

如果容器内的用户可以运行sudo apt install ...,那么您也可以以root用户身份运行容器中的所有内容,因为任何攻击都可以sudo ...攻击代码中的任何一个。相反:

  • 请考虑是否需要在容器内apt install,或者是否可以在图像中这样做。最好在映像中安装二进制文件并进行部署,而不是每次运行容器时都重新安装应用程序。

  • 如果您的用例在启动时需要root用户,请以root用户身份启动容器,然后在完成这些root用户步骤后将其移交给用户。像gosu这样的工具就是为此而精心设计的。对于执行此操作的入口点的示例,我有一个带有entrypoint script的docker-base映像,该映像添加了gosu并使用exec运行CMD来避免/bin/sh pid 1(有助于信号处理)。

可以在https://github.com/tianon/gosu

找到Gosu