在 Docker 中分发 python 源代码安全吗?
Is distributing python source code in Docker secure?
我即将决定项目的编程语言。
要求是一些客户希望 运行 在没有外部互联网访问的孤立服务器上应用程序。
为此,我需要向他们分发应用程序,并且不能使用 SaaS 方法 运行例如,我的云(我更喜欢做的...)。
问题是如果我决定使用 Python 来开发这个,我需要为客户提供易于阅读的代码,这不是我真正想做的(当然,我知道关于所有 "do you really need to protect your source code" 类问题,但现在不在讨论范围内)。
我的一位同事告诉我 Docker。我可以找到许多关于 Docker 容器安全的答案。问题在于保护(隔离)主机免受容器中代码 运行ning 的影响。
我需要知道 Docker 图像中的 Python 源代码和 Docker 容器中的 运行ning 是否受到保护以防止访问 - 用户可以在以某种方式(不需要简单)访问该 Python 代码?
我知道我不能保护一切,我知道 decompile/crack 有可能保护一切。我只是想知道答案只是为了决定在 Docker 中访问我的代码的方式是否足够困难以至于我可以冒险。
Python 程序作为源代码分发。如果它可以 运行 在客户端机器上,那么代码在该机器上是可读的。 docker 容器仅包含应用程序及其库、外部二进制文件和文件,不是完整的 OS。由于只能在 OS 级别(或通过加密)管理安全性,并且由于 OS 受客户端控制,客户端可以读取 docker 容器上的任何文件,包括您的 Python来源。
如果您真的想这样做,您应该考虑为您的客户提供一个完整的虚拟机。在这种情况下,VM 包含一个完整的 OS 及其基于帐户的安全性(VM 上的管理帐户密码可能与主机上的不同)。远非静止的水域,因为这意味着客户端将能够在 VM 上设置或调整网络以及其他问题...
而且您应该知道,当涉及到 运行在他们的网络上安装不受控制的 VM 时,客户安全官可能会发出强烈的拒绝。 我绝对不会接受的
无论如何,由于客户端对 VM 具有完全访问权限,因此如果可能的话,真正保护它是很困难的(禁用从其他设备启动甚至可能是不可能的)。在安全方面承认,如果攻击者有物理访问权限,你就输了。
TL/DR:这不是预期的答案,但就是没有。如果你出售你的解决方案,你将与你的客户签订一份法律合同,这种问题应该在法律层面而不是技术层面处理。你可以试试,我什至给了你提示,但恕我直言,风险大于收益。
Docker 图片是 open and documented "application packaging" 格式。有无数种检查图像内容的方法,包括其中包含的所有 python 源代码。
运行 容器内的应用程序与逃离容器以访问主机的应用程序隔离。它们不会保护您免受主机上的用户检查容器内部发生的事情。
我认为这可能是一个解决方案,因为使用 "container" 来保护我们的代码免受我们不允许他们访问的人的攻击。问题是 docker 不是安全容器。由于宿主机的根目录对Docker容器拥有最强大的控制权,我们没有任何方法可以防止根目录访问容器内部。
我只是对安全容器有一些想法:
- 使用init文件构建容器,如docker文件,创建容器时必须设置密码;
- 一旦容器构建完成,我们必须使用密码才能访问内部,包括
reading\copy\modify 个文件
- 主机上存储的所有文件都要加密。
- 不提供"retrieve password"或“--skip-grant-”模式。这意味着没有人可以
如果您丢失了密码,请访问容器内的数据。
如果我们有一个可以 运行 tomcat 或 Django
服务器的可信任容器,就不需要代码混淆了。
我知道这已经超过 3 年了,但是...寻找相同类型的解决方案我认为将编译的 python 代码——而不是你的源代码——包含在容器中将是一个对试图访问您宝贵的源代码的人进行具有挑战性的试验。
如果您 运行 pyinstaller --onefile yourscript.py
您将得到一个编译后的单个文件,可以 运行 作为可执行文件。我只在 Raspberry 中测试过它,但据我所知,它对于 Windows.
是一样的
当然任何东西都可以进行逆向工程,但希望普通最终用户不值得为此付出努力。
我即将决定项目的编程语言。 要求是一些客户希望 运行 在没有外部互联网访问的孤立服务器上应用程序。
为此,我需要向他们分发应用程序,并且不能使用 SaaS 方法 运行例如,我的云(我更喜欢做的...)。
问题是如果我决定使用 Python 来开发这个,我需要为客户提供易于阅读的代码,这不是我真正想做的(当然,我知道关于所有 "do you really need to protect your source code" 类问题,但现在不在讨论范围内)。
我的一位同事告诉我 Docker。我可以找到许多关于 Docker 容器安全的答案。问题在于保护(隔离)主机免受容器中代码 运行ning 的影响。
我需要知道 Docker 图像中的 Python 源代码和 Docker 容器中的 运行ning 是否受到保护以防止访问 - 用户可以在以某种方式(不需要简单)访问该 Python 代码?
我知道我不能保护一切,我知道 decompile/crack 有可能保护一切。我只是想知道答案只是为了决定在 Docker 中访问我的代码的方式是否足够困难以至于我可以冒险。
Python 程序作为源代码分发。如果它可以 运行 在客户端机器上,那么代码在该机器上是可读的。 docker 容器仅包含应用程序及其库、外部二进制文件和文件,不是完整的 OS。由于只能在 OS 级别(或通过加密)管理安全性,并且由于 OS 受客户端控制,客户端可以读取 docker 容器上的任何文件,包括您的 Python来源。
如果您真的想这样做,您应该考虑为您的客户提供一个完整的虚拟机。在这种情况下,VM 包含一个完整的 OS 及其基于帐户的安全性(VM 上的管理帐户密码可能与主机上的不同)。远非静止的水域,因为这意味着客户端将能够在 VM 上设置或调整网络以及其他问题...
而且您应该知道,当涉及到 运行在他们的网络上安装不受控制的 VM 时,客户安全官可能会发出强烈的拒绝。 我绝对不会接受的
无论如何,由于客户端对 VM 具有完全访问权限,因此如果可能的话,真正保护它是很困难的(禁用从其他设备启动甚至可能是不可能的)。在安全方面承认,如果攻击者有物理访问权限,你就输了。
TL/DR:这不是预期的答案,但就是没有。如果你出售你的解决方案,你将与你的客户签订一份法律合同,这种问题应该在法律层面而不是技术层面处理。你可以试试,我什至给了你提示,但恕我直言,风险大于收益。
Docker 图片是 open and documented "application packaging" 格式。有无数种检查图像内容的方法,包括其中包含的所有 python 源代码。
运行 容器内的应用程序与逃离容器以访问主机的应用程序隔离。它们不会保护您免受主机上的用户检查容器内部发生的事情。
我认为这可能是一个解决方案,因为使用 "container" 来保护我们的代码免受我们不允许他们访问的人的攻击。问题是 docker 不是安全容器。由于宿主机的根目录对Docker容器拥有最强大的控制权,我们没有任何方法可以防止根目录访问容器内部。
我只是对安全容器有一些想法:
- 使用init文件构建容器,如docker文件,创建容器时必须设置密码;
- 一旦容器构建完成,我们必须使用密码才能访问内部,包括 reading\copy\modify 个文件
- 主机上存储的所有文件都要加密。
- 不提供"retrieve password"或“--skip-grant-”模式。这意味着没有人可以 如果您丢失了密码,请访问容器内的数据。
如果我们有一个可以 运行 tomcat 或 Django
服务器的可信任容器,就不需要代码混淆了。
我知道这已经超过 3 年了,但是...寻找相同类型的解决方案我认为将编译的 python 代码——而不是你的源代码——包含在容器中将是一个对试图访问您宝贵的源代码的人进行具有挑战性的试验。
如果您 运行 pyinstaller --onefile yourscript.py
您将得到一个编译后的单个文件,可以 运行 作为可执行文件。我只在 Raspberry 中测试过它,但据我所知,它对于 Windows.
当然任何东西都可以进行逆向工程,但希望普通最终用户不值得为此付出努力。