【问题标题】:Execution permissions in PythonPython中的执行权限
【发布时间】:2012-09-21 13:33:42
【问题描述】:

我需要将代码发送到远程客户端以在其中执行,但安全性是我现在关心的问题。我不想在那里执行不安全的代码,所以我想控制程序在做什么。我的意思是,例如,知道是否正在建立连接、连接到哪里、是否正在读取本地文件等。这可以用 Python 实现吗?

编辑:我正在考虑类似于 Android 权限系统的东西。我想知道代码会做什么,如果它做了不同的事情,请停止它。

【问题讨论】:

  • “将代码发送到远程客户端以在其中执行”和“不希望任何代码在那里执行”似乎相互矛盾。
  • 对不起。我想说“不安全”。

标签: python security permissions execute


【解决方案1】:

在 Python 中曾经有一个名为 bastian 的模块,但由于它不安全而被弃用。还有我相信一个叫RPython的东西,但我不太了解。

在这种情况下,我会使用Pyro 并在目标服务器上编写代码。这样您就知道客户端只能执行编写和测试过的代码。

编辑 - 值得注意的是,Pyro 也支持http://en.wikipedia.org/wiki/Privilege_separation - 尽管我不必为此使用它。

【讨论】:

    【解决方案2】:

    我认为您正在寻找沙盒 python。曾经有人努力实现这一点,但在几年前已被废除。

    python wiki 中的Sandboxed python 很好地概述了您的用例的可能选项。

    【讨论】:

    • 不,我在考虑 Android 权限之类的东西。我想知道代码会做什么,如果它做了不同的事情,请停止它。
    • 您可以通过仅向沙箱公开允许的 API 来实现使用沙箱化 python。
    【解决方案3】:

    最严格(但可能是最慢)的方法是在模拟器中的裸操作系统上运行 Python。

    根据您使用的操作系统,有几种方法可以运行有限制的程序,但没有模拟器的开销:

    • FreeBSD 以jails 的形式提供了一个很好的集成解决方案。 这些源自chroot 系统调用。
    • Linux-VServer 旨在在 Linux 上或多或少地做同样的事情。

    【讨论】:

    • 将为每个代码设置权限,并且客户端将是可移植的,因此它不是解决方案。正如我在其他评论中所说,我正在寻找类似于 Android 权限系统的东西。现在,如果代码做了不同的事情,代码将做什么并停止它。
    【解决方案4】:

    您可以使用不同的 Python 运行时:

    • 如果您使用Jython 运行脚本;你可以利用 Java 的权限系统
    • 使用Pypy's sandboxed version,您可以选择允许在控制器脚本中运行的内容

    【讨论】:

    • 不错的横向思维 +1 - 甚至可能是具有 .NET 权限系统的 IronPython
    • @JonClements 是一个不错的方法。我希望客户端是可移植的,因此使用 Java 开发这些客户端并使用 Jython 运行脚本是一个很好的可能性。你能指点我一篇关于Java权限系统的文章吗?我以前从未听说过。您确定可以将其与 Python 集成吗?谢谢。
    • @DavidMorenoGarcía 我不能相信 - 这是 J.F. Sebestian 的回答。 Jython 是在 JVM 上运行的 Python 实现。所以是的,但我不敢说现在由你来谷歌查找相关文章!
    • 是的,我知道 Jython 是什么,尽管我从未使用过它。我只是问是否可以将 Jython 与 Java 权限系统集成。当然我在谷歌上搜索这个系统。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    • 2011-05-05
    • 2022-06-24
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多