在 Docker 中分发 python 源代码是不是安全?

Posted

技术标签:

【中文标题】在 Docker 中分发 python 源代码是不是安全?【英文标题】:Is distributing python source code in Docker secure?在 Docker 中分发 python 源代码是否安全? 【发布时间】:2019-01-04 06:26:48 【问题描述】:

我即将决定该项目的编程语言。 要求是一些客户希望在没有外部 Internet 访问的隔离服务器上运行应用程序。

为此,我需要向他们分发应用程序,并且不能使用在例如我的云上运行的 SaaS 方法(我更愿意这样做......)。

问题是,如果我决定使用 Python 来开发它,我需要为客户提供易于阅读的代码,而这并不是我真正想做的(当然,我知道所有这些“你知道吗?确实需要保护您的源代码”之类的问题,但目前超出了范围)。

我的一位同事向我介绍了 Docker。我可以找到十几个关于 Docker 容器安全的答案。问题在于保护(隔离)主机免受容器中运行的代码的影响。

我需要知道 Docker Image 中的 Python 源代码和在 Docker Container 中运行的 Python 源代码是否受到保护 - 用户可以以某种方式(不需要简单)访问该 Python 代码吗?

我知道我无法保护所有内容,我知道可以反编译/破解所有内容。我只是想知道答案,只是为了决定在 Docker 中访问我的代码的方式是否足够困难,我可以冒险。

【问题讨论】:

“用户能否以某种方式(不需要很容易)访问该 Python 代码?” 是的,而且也很容易。 你愿意至少分享一下你从哪里得到这些信息吗? 如果您为用户提供运行代码,他们可以很容易地检查其逻辑和行为无论语言如何。假设您分发的任何源代码或编译后的二进制文件都受到了破坏。 当然,但有时“反编译”或以其他方式访问逻辑是不值得的,这就是我想估计的。另一件事-我想知道为什么问题被否决了,它不遵循一些SO规则吗?我检查了帮助中心,但找不到原因。 【参考方案1】:

Docker 镜像是open and documented“应用程序打包”格式。有无数种方法可以检查图像内容,包括其中包含的所有 python 源代码。

在容器内运行应用程序提供了与逃离容器以访问主机的应用程序的隔离。它们不能保护您免受主机上的用户检查容器内部发生的情况。

【讨论】:

【参考方案2】:

Python 程序作为源代码分发。如果它可以在客户端机器上运行,那么代码在该机器上是可读的。 docker 容器仅包含应用程序及其库、外部二进制文件和文件,不是完整的操作系统。由于只能在操作系统级别(或通过加密)管理安全性,并且由于操作系统受客户端控制,因此客户端可以读取 docker 容器上的任何文件,包括您的 Python 源代码。

如果您真的想这样做,您应该考虑为您的客户提供一个完整的虚拟机。在这种情况下,VM 包含一个完整的操作系统,具有基于帐户的安全性(VM 上的管理帐户密码可能与主机的不同)。这远非一帆风顺,因为这意味着客户端将能够在 VM 上设置或调整网络以及其他问题......

而且您应该知道,在他们的网络上运行不受控制的虚拟机时,客户端安全官可能会发出强烈的“否”。 绝不会接受。

无论如何,由于客户端具有对 VM 的完全访问权限,因此如果可能的话,真正保护它会很困难(甚至可能无法禁用从其他设备启动)。在安全方面承认,如果攻击者有物理访问权限,你就输了。

TL/DR:这不是预期的答案,但不是。如果您出售您的解决方案,您将与您的客户签订法律合同,这种问题应该在法律层面而不是技术层面处理。你可以试试,我什至给了你提示,但是恕我直言,风险大于收益。

【讨论】:

VM 听起来并不比 Docker 更难获取源代码。 @Ry- :你说得对,我忘了警告物理访问的风险。【参考方案3】:

我认为这可能是一种解决方案,因为使用“容器”来保护我们的代码免受我们不允许他们访问的人的侵害。问题是 docker 不是一个安全的容器。由于宿主机的 root 对 Docker 容器有最强大的控制权,所以我们没有任何方法可以保护 root 不访问容器内部。

我只是对安全容器有一些想法:

    像docker文件一样用init文件构建容器,创建容器时必须设置密码; 一旦容器构建完成,我们必须使用密码才能访问里面,包括 读取\复制\修改文件 主机上存储的所有文件都应该是加密的。 不提供“检索密码”或“--skip-grant-”模式。这意味着没有人可以 如果您丢失了密码,请访问容器内的数据。

如果我们有一个可以运行 tomcat 或Django 服务器的可信任容器,则无需进行代码混淆。

【讨论】:

【参考方案4】:

我知道这已经超过 3 年了,但是...寻找相同类型的解决方案访问您宝贵的源代码。

如果您运行pyinstaller --onefile yourscript.py,您将获得一个可作为可执行文件运行的已编译单个文件。我只在 Raspberry 中对其进行了测试,但据我所知,它在 Windows 上是一样的。

当然,任何事情都可以进行逆向工程,但希望普通最终用户不值得为此付出努力。

【讨论】:

以上是关于在 Docker 中分发 python 源代码是不是安全?的主要内容,如果未能解决你的问题,请参考以下文章

在 docker 中分离运行时,Python 应用程序不打印任何内容

让淘宝链接在微信中分享,GO

在jQuery中分离和追加后CSS是不是会断开连接

在 Pentaho Kettle ETL 步骤中分发标签有啥作用?

在 iPad 中分发 ipa

无法在 psql GreenPlum 中分发