首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

我不应该在Dockerfile中以root身份安装软件吗?

相关·内容

Dockerfile 最佳实践

众所周知,基于云原生“工程思维”的角度,一个接近完美、精心设计的 Dockerfile 应将避免需要特权容器,暴露不必要的端口,安装未使用的软件包,泄露的凭据等,或者可以用于攻击的任何东西。...因此,我们在进行容器构建过程默认情况下阻止 root 用户身份运行的容器(即,Openshift需要额外的SecurityContextConstraints)。...root 用户身份运行可能需要在 Dockerfile 执行几个附加步骤,具体需要以下: A:确保用户说明中指定的用户存在于容器。...虽然这两种方法比 root 用户身份运行要好,但它们可能无法在像 Openshift 这样的受限环境工作。...(2)可执行文件不可写 通常,容器的每个可执行文件都归 root 用户所有,即使它是由非根用户执行的,并且不应该是所有用户可写的。

1.3K40

十大 Docker 反模式

写出这样 Dockerfile 的团队真是太懒了。已经有这么个在虚拟机安装应用的 puppet 脚本,在编写 Dockerfile 时翻新一下拿过来就要用。...现实见过很多依赖于“神奇”方法的 Dockerfile,对其可被构建的时机和位置都有特殊要求。...在本例Dockerfile 很小,有副作用的语句也容易定位 (mysql 命令) 并移动到合适的位置修正层缓存。...生产服务器不应该访问 git 仓库。如果一个企业严肃对待安全性问题,这种模式甚至不会被安全委员会批准。生产服务器安装了 git 本身就莫名其妙。...如果是一名运维人员,还得专心安装上全套 Java 本地化开发库,就为了构建这么一个文件。如果你工作在一个使用了多种编程语言的机构,不光是运维人员,对于整个构建节点,这个过程都会迅速变得脱离控制。

65350
  • 12 个优化 Docker 镜像安全性的技巧

    可以被滥用来接管你的系统的攻击向量有很多,例如: 启动的应用程序(在你 Dockerfile 的 ENTRYPOINT 中指定) root 用户身份运行。...3root 用户身份运行 默认情况下,当有人通过“docker runyourImage:yourTag“运行你的镜像时,这个容器(以及你在 ENTRYPOINT/CMD 的程序)会 root...如果这些文件是在 Dockerfile 的开头根用户身份创建的(存储在 /root/ 下面,而不是 /home/appuser/ 下面),那么你的程序期望在用户的主目录的某个地方(例如~/.cache...小于等于 1024 的端口只能以 root 用户身份使用,或者一些高级 Linux 能力来使用,但你不应该仅仅为了这个目的而给你的容器这些能力。...请参考之前文章的 Docker slim 部分了解更多细节。 11使用最小的基础镜像 一个镜像存储的软件(如 CLI 工具等)越多,攻击面就越大。

    62020

    12 个优化 Docker 镜像安全性的技巧,建议收藏!

    可以被滥用来接管你的系统的攻击向量有很多,例如: 启动的应用程序(在你 Dockerfile 的 ENTRYPOINT 中指定) root 用户身份运行。...,这个容器(以及你在 ENTRYPOINT/CMD 的程序)会 root 用户身份运行(在容器和主机上)。...如果这些文件是在 Dockerfile 的开头根用户身份创建的(存储在 /root/ 下面,而不是 /home/appuser/ 下面),那么你的程序期望在用户的主目录的某个地方(例如~/.cache...小于等于 1024 的端口只能以 root 用户身份使用,或者一些高级 Linux 能力来使用,但你不应该仅仅为了这个目的而给你的容器这些能力。...请参考之前文章的 Docker slim 部分了解更多细节。 11 使用最小的基础镜像 一个镜像存储的软件(如 CLI 工具等)越多,攻击面就越大。

    1K10

    你一定要了解这 17 条 Docker 最佳实践!

    你想避免在添加新的 Python 包时不得不不断地更新 Dockerfile 安装必要的系统级依赖。...使用无特权的容器 默认情况下,Docker 在容器内 root 身份运行容器进程。...然而,这是一个糟糕的做法,因为在容器内 root 身份运行的进程在 Docker 主机也是以 root 身份运行。...然而,请记住,Docker 守护进程和容器本身仍然是以 root 权限运行的。 请务必查看非根用户身份运行 Docker 守护进程,获得以非根用户身份运行守护进程和容器的帮助。 6....这些信息不应该在没有加密的情况下被放入你的镜像,因为未经授权的用户如果获得了镜像的访问权,只需要检查这些层就可以提取密钥。

    2.7K20

    云原生系列三:K8s应用安全加固技术

    runAsUser, runAsGroup默认情况下,Docker容器root用户的身份运行,从安全角度看这并不理想。...虽然对容器内部的访问权限仍有限制,但在过去一年,出现了多个容器漏洞,只有在容器root用户身份运行时才能利用这些漏洞,确保所有容器root用户身份运行是一个很好的加固步骤。...编辑然而,在执行此操作时,重要的是要确保容器在root用户身份运行时能够正常工作。如果原始容器镜像被设计为root身份运行,并且有限制性的文件权限,可能会导致应用程序的运行出现问题。...如果你的应用程序设计为root用户身份运行,那么它根本不需要任何能力。一般来说,对能力的处理方法应该是首先删除所有的能力,如果你的应用需要这些能力,再把特定的能力加回来。...通常,运行的容器不应该在容器文件系统存储有关应用程序的任何状态。这是因为它们可能随时被降速并在集群的其他地方创建新版本。

    4.8K21

    6.Docker镜像与容器安全最佳实践

    2.设定最小权限的 USER 运行容器 描述: 如果 Dockerfile 没有指定 USER ,Docker 默认将会超级用户 root身份运行容器,容器所属的命名空间(namespace)因此映射为...不应该在生产环境中使用任何不安全的镜像仓库。不安全的镜像仓库的镜像可能会被篡改,从而导致生产系统可能受到损害。...默认值: 默认情况下,容器root权限运行,并以容器的用户root身份运行。...因此,除了容器的真正需要的软件之外,不要安装其他多余的软件。 检测方法: 进入容器执行命令检查安装软件包 判断方法: 查看软件包列表并确保它是合法的。...默认值: Docker默认为读写卷,也可以只读方式挂载一个目录。默认情况下,不会在容器上挂载敏感的主机目录。 5.5 SSH 不在容器运行 描述: SSH服务不应该在容器内运行。

    2.8K20

    10大K8s应用安全加固技术

    runAsUser, runAsGroup 默认情况下,Docker容器root用户的身份运行,从安全角度看这并不理想。...虽然对容器内部的访问权限仍有限制,但在过去一年,出现了多个容器漏洞,只有在容器root用户身份运行时才能利用这些漏洞,确保所有容器root用户身份运行是一个很好的加固步骤。...然而,在执行此操作时,重要的是要确保容器在root用户身份运行时能够正常工作。如果原始容器镜像被设计为root身份运行,并且有限制性的文件权限,可能会导致应用程序的运行出现问题。...这不应该在应用工作负载中使用,而应该只在完全必要的情况下使用。...通常,运行的容器不应该在容器文件系统存储有关应用程序的任何状态。这是因为它们可能随时被降速并在集群的其他地方创建新版本。

    64450

    你的容器安全

    在这一步各种不小心都会引入问题,比如Dockerfile内没有通过USER指令指定container应以何种账号运行,那么大概率Docker runtime会默认root身份运行你的容器。...我们都知道Dockerfile需要以FROM开始(ARG不算在build流程之中)。FROM意味着我们会在目标镜像里引入rootfs。rootfs包含了我们的应用正常运行所必须的库和基本的工具集。...现在的最佳实践都劝大家把镜像做成immutable的,也就是镜像运行时,rootfs应该都是只读的,不应该发生安装应用到/bin目录之类的写操作,当然写数据到临时目录除外。 这样做的后果很容易想到。...如2019年发现的漏洞CVE-2019-5736,它导致18.09.2版本之前的Docker允许恶意容器覆盖宿主机上的runC二进制文件,由此使攻击者能够root身份在宿主机上执行任意命令。...攻击者还部署了恶意软件,即如今臭名昭著的“SunSpot”,它以高权限运行,扫描 Orion 构建。 图 2:编译镜像时涉及到的攻击风险 其它。此处省略1万字。容调皮一下。 2.

    42730

    24条 Docker 建议

    2.2 没有软件包列表 默认的镜像(如Ubuntu)是不包含软件包列表的,目的是让镜像体积更小。因此需要在任何的基础的Dockerfile需要使用apt-get update。...2.3 留意软件包的版本 注意软件包的安装,因为这些命令也是会缓存起来的。意味着如果你清空了缓存,你可能会得到不同的版本;或者如果缓存长期不更新,你可能不会得到最新的安全更新。...我们可以在Dockerfile覆盖ENTRYPOINT让我们的容器像在接受命令行参数(默认的参数在Dockerfile的CMD指定)。...安全 5.1 root身份运行Docker Docker API能给root的访问权限,因为你可以将/映射成一个卷,然后读或者写。或者你可以通过--net host接管宿主机的网络。...5.2 Dockerfile的USER 默认下Docker可以root身份运行任何命令,但是你可以使用USER。Docker没有用户的命名空间,因此容器将用户看作是宿主机上的用户。

    1K40

    构建 Java 镜像的 10 个最佳实践

    在 Java 镜像安装需要的内容 3. 使用多阶段构建 Java 镜像 4. 防止敏感信息泄漏 5.不要以 root 用户运行容器 6. Java 应用程序不要使用 PID 为 1 的进程 7....在 Java 镜像安装需要的内容 以下命令会在容器构建 Java 程序,包括其所有依赖项。这意味着源代码和构建系统都将会是 Java 容器的一部分。...因此,必须确保你不以 root 用户身份运行应用程序。 但默认情况下,创建 Docker 容器时,你将以 root 身份运行它。尽管这对于开发很方便,但是你不希望在生产镜像中使用它。...这意味着你应该在 Docker 镜像更新到 Java 的最新版本,或者确保至少使用 Java 8 update 191 或更高版本。 10....从安全性的角度来看,的观点是,完全控制和正确的方式创建 Dockerfile,是创建镜像更好,更安全的方式。 ---- ---- 欢迎加入的知识星球,一起探讨架构,交流源码。

    88921

    构建 Java 镜像的 10 个最佳实践

    来源:toutiao.com/article/6959742944421200387/ 你想构建一个 Java 应用程序并在 Docker 运行它?...在 Java 镜像安装需要的内容 以下命令会在容器构建 Java 程序,包括其所有依赖项。这意味着源代码和构建系统都将会是 Java 容器的一部分。...因此,必须确保你不以 root 用户身份运行应用程序。 但默认情况下,创建 Docker 容器时,你将以 root 身份运行它。尽管这对于开发很方便,但是你不希望在生产镜像中使用它。...这意味着你应该在 Docker 镜像更新到 Java 的最新版本,或者确保至少使用 Java 8 update 191 或更高版本。 10....从安全性的角度来看,的观点是,完全控制和正确的方式创建 Dockerfile,是创建镜像更好,更安全的方式。

    75620

    用深度学习硬件的闲置时间,来挖比特币

    在基于Debian的distribution,比如ubuntu或debian,是由psmisc软件包提供的。如果没有弄错的话,它将被包含在基本系统安装,所以不需要安装任何东西。...所以,你不应该在开始和停止矿工的过程花费太多精力,只需要想想,运行TF或者PyTorch时要为你的深度学习优化分配多少GPU。...如果还没有安装,可以将配置文件放入/etc/supervisor/conf.d/gpu_mon.conf。以下是使用的配置: ?...2、多用户访问GPU 如果gpu_mon一个用户身份运行,但是深度学习软件可以作为另一个用户或由多用户运行,则gpu_mon可能无法抢占矿工。...如果你遇到这种情况,但是仍然想要使用gpu_mon,你有两种选择: *root身份运行gpu_mon。不推荐这种方法,因为root身份启动某些东西总是一个坏主意。

    1.3K60

    安卓应用安全指南 5.3.2 将内部账户添加到账户管理器 规则书

    自己的登录界面不应该在用户应用一端准备。...敏感信息(如密码或认证令牌)不应输出到日志。 日志信息可以从其他应用读取,因此可能成为信息泄露的原因。 此外,如果帐户名称的泄漏可能导致损失,则不应将帐户名称输出到日志。...在 Android 操作系统存在漏洞的情况下,攻击者可以获得 root 权限或系统权限,保存在accounts.db的认证信息将处在风险边缘。...5.3.2.8 应该在验证认证器是否正常之后,执行帐户流程(必需) 如果有多个认证器在设备定义了相同的帐户类型,则先前安装的认证器将生效。 所以,安装自己的认证器之后,它不会被使用。...如果之前安装的认证器是恶意软件的伪装,则用户输入的帐户信息可能被恶意软件接管。 在执行帐户操作之前,用户应用应验证执行帐户操作的帐户类型,不管是否分配了常规认证器。

    1K20

    你的镜像安全

    一般来说,就像我们不会在标准Linux服务器上root身份运行进程一样,我们大部分容器应用部署时,也不会在容器root身份运行。...如何防止容器root权限运行 如果不确定基础镜像使用什么权限,应该强制使用自定义用户的非root用户或用户组。...然后,Dockerfile添加User,并以此用户或组构建镜像和启动容器运行时进程命令 FROM centos:7      RUN groupadd -g 1000 basicuser &...比如在ubuntu仓库,有些镜像的大小是部分版本的2倍以上。 所以在您获取镜像时,不要单纯的只获取最新版本的镜像,最理想的是获取占用空间最小的镜像,然后自主添加应用所需的软件包和依赖。...要排除这些,应该在要从中构建映像的根目录设置一个.dockerignore文件。

    1.9K20

    使用Ubuntu 16.04进行初始服务器设置

    您还需要密码,或者如果您安装了SSH密钥进行身份验证,则需要“root”用户帐户的私钥。...第二步 - 创建一个新用户 一旦您root用户的身份登陆,我们就准备添加我们将用于从现在开始登录的新用户帐户。...在服务器上,root用户身份输入以下命令临时切换到新用户(替换您自己的用户名): su - sammy 现在,您将进入新用户的主目录。...我们将用nano来编辑文件: nano ~/.ssh/authorized_keys 现在通过将公钥粘贴到编辑器来插入公钥(应该在剪贴板)。...您现在可以在服务器上安装所需的任何软件。 更多Ubuntu教程请前往腾讯云+社区学习更多知识。 ---- 参考文献:《Initial Server Setup with Ubuntu 16.04》

    1.6K01

    Linux下解决.configure ,make,make install的报错

    它足够高?是不是比要低,这样你要常 识升级这些包。如果还不行的话,你可以尝试编译你要编译软件的以前的版本。老版本通常使用老版本的库/程序 如果....然而,寻找其他方法来安装软件或者找一个替代品是最好的方法。如果您系统的特定软件版本比要求的版本低,您可 或者编译一个bleeding-edge包,或者您的发行版太旧了,或者都有包括。。。...可以这样来打补丁 patch -Npl -i 注意当你打补丁时你应该在源代码路径 三: Make install 错误 这些错误理解起来很容易,但是还是列一下吧~通常有两大失败原因...对于sudo来讲的话,它只用root权限来运行一次命令,并不会 root身份登录的。 2. 您编译的包没有安装目标。这样,您就需要将编译好的二进制文件放到bin文件夹。...将上述命令添加到您的/etc/profile文件,这样可永久保存。 同意这样做不太好,不够简洁和方便。但是有时候开发者没有时间开创建一个安装目标。我们不应该对此感到气氛。。。

    28.5K21

    使用Docker时应该避免这10 件事…

    这个特性迫使用户改变处理和管理容器的心态;将会向你说明在容器不应该做的那些事,确保容器可以发挥出最佳效果: 1) 不要将数据存储在容器 - 容器可以被停止,销毁或者替换。...不要安装不必要的包或运行“更新” (yum更新) ,下载许多文件到一个新的图像层。...始终使用Dockerfile或任何其他完全可重复的S2I(源图像)的方法,如果将它存储在源代码控制存储库(git),您可以跟踪对Dockerfile的更改。...9)不要以root用户身份运行进程 - “默认情况下,docker容器会root身份运行。随着Docker的成熟,更安全的默认选项可能会变得可用。...现在,要求root对其他人来说是危险的,并且可能在所有环境中都不可用。

    75470
    领券