在开发软件时使用Docker提高安全性

 

前言

        正如你可能已经知道,利用社区制作包的软件开发引入了显˚F被恶意软件攻击的巨大风险。需要承担这种风险以保持生产力和竞争力,但进入您系统的恶意软件可能会造成严重破坏(从加密文件到窃取业务数据或帐户)。防止安全问题的最佳方法是只能与您可以信任的作者和工具合作。但是目前许多包管理服务对于如何以及通过它们共享哪些代码相当宽松,因此安全问题仍然一定会发生。就目前情况而言,如果我们不先检查它们,我们就完全相信一个简单的“纱线安装”(例如安装在我们的系统上)的软件包集合是愚蠢的。保持警惕并在代码上使用诸如“纱线审计”之类的工具是个好主意,但零日漏洞仍然可能发生。

        容器化(例如 Docker)是解决不信任问题的一种合适工具——您可以运行一个您不完全信任的进程并将其与系统的其余部分隔离(具有合理的有效性)。这在您在 PC 上开发软件时非常有用——容器化显然不能防止恶意软件进入生产服务器并窃取流经系统的数据。但是当您第一次在开发机器上安装新包时,容器化仍然可以节省您的时间。

        事不宜迟,下面是我的三个提示,它们使使用 Docker 变得更加方便。请注意,它们是用 Node 和 NPM 编写的,前两个仅直接在 POSIX 操作系统上工作。

提示 1.1

        您可以在 Docker 中运行命令,就像直接在机器上运行一样。但是,这需要一些样板:

docker run --rm -it -v "$PWD:$PWD" -w "$PWD" -u "$(id -u):$(id -g)" node:14 echo foo

        这使用“node:14”图像在容器内运行“echo foo”。需要各种标志来将终端输入/输出连接到命令,使当前工作目录可用于命令,并确保命令创建的可能文件具有正确的权限。

        请注意,您当然需要一个包含要运行的命令的 docker 映像,并且在 Linux 上,您需要能够以非 root 用户身份运行 Docker

        我的提示是将此行引入您的终端配置文件:

alias drun='docker run --rm -it -v "$PWD:$PWD" -w "$PWD" -u "$(id -u):$(id -g)"'

        这样,上面的标志样板可以简化为:

drun node:14 echo foo

        我已经养成了将这个“drun”别名添加到本来可以在我的裸机上运行的东西之前的习惯,例如:

drun -p 3000:3000 node:14 yarn start

        您仍然可以向命令中引入其他标志,如上所示。

        如果您懒惰,您还可以创建一个特定于项目的脚本文件(例如,将其称为“d”),在 docker 中运行您最常用的命令。因此,项目根目录中的 `./d start` 将产生与 `yarn start` 相同的效果,只是在 Docker 容器内。

提示 1

        一些工具,例如特定于项目的 linters(例如,安装在 node_modules 下的 eslint)通常由您的编辑器或提交钩子自动运行。您无法使用简单的终端别名将它们容器化,更改编辑器和提交挂钩会很麻烦,但您可以覆盖二进制文件以在 Docker 中运行。我最近写了一个小节点脚本来容器化 Node 项目中的一小部分二进制文件,如果你有兴趣,可以在这里查看:https : //gitlab.com/-/snippets/2201721

提示 2

        如果您发现以上两点太麻烦,还有一种替代方法 - 将整个项目环境移动到容器中!我个人不怎么使用 VScode,但他们有关于这个主题的优秀文档,所以我让它自己说话:https : //code.visualstudio.com/docs/remote/containers

七爪网7claw.com 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值