【问题标题】:Protect python script on Windows server保护 Windows 服务器上的 python 脚本
【发布时间】:2017-08-29 05:55:24
【问题描述】:

我有一堆 Python 脚本,由几个不同的用户运行。脚本放置在 Windows 服务器环境中。

我希望实现的是以允许标准用户运行它们但无权读取/修改/移动它们的方式保护这些脚本。

这是否可能?如果可以,最佳策略是什么?

提前致谢。

【问题讨论】:

    标签: python windows security server


    【解决方案1】:

    您可以使用 Cython 将 Python 模块编译为本机库,并且仅提供编译后的文件;尽管它涉及很多麻烦并且在某些情况下不起作用。它们仍然可以被反编译为 C 代码,但它几乎不可读。

    优点:1. 编译后的库可以作为普通 Python 模块导入。

    缺点:1. 需要额外设置; 2. 在某些情况下不起作用,例如celery 任务不能驻留在已编译的模块中,因为: 3. 你失去了自省能力; 4. tracebacks 基本上是不可读的。

    【讨论】:

      【解决方案2】:

      您可以考虑分发它 - 将其转换为可执行的二进制文件。使用PyInstaller 很容易生成可执行文件。它可以通过 PyPi 安装。

      pip install pyinstaller

      PyInstaller 的一个好处是您可以编写一个 Windows 批处理脚本来制作您的可执行分发。

      例子:

      @echo off
      mkdir dist
      mkdir dist/build
      
      pyinstaller ^
      --onefile ^
      --windowed ^
      --workpath=dist\build ^
      --distpath=dist ^
      --icon="gui\icon.ico" ^
      --name="The_Greatest_Prog" ^
      the_greatest_script.py
      
      rmdir /S /Q dist\build
      
      cd dist
      The_Greatest_Prog
      PAUSE
      

      这里发生的是 PyInstaller 将您的 Python 脚本转换为一个可执行文件,该文件将显示一个 GUI 并具有指定的图标。如果参数--onefile--windowed 被忽略,将会有一小堆文件,如DLL 和可执行文件,它们将显示一个控制台。阅读documentation,尤其是section about usage

      此批处理脚本必须位于您的 Python 脚本文件夹中,您只需在其中运行它,结果就是子文件夹“dist”中的文件“The_Greatest_Prog.exe”。您现在可以将此可执行文件提供给您的朋友,而不会让他们破坏您的代码。

      [编辑]

      您也可以使用标准包py_compile。输出将是一个扩展名为“.pyc”的文件。验证工作目录是否设置为您的 scipt 的路径,并从您首选的 Python 控制台调用此编译器。

      >>> import py_compile
      >>> py_compile.compile("the_greatest_script.py")
      

      然后你会在你的文件夹中看到文件“the_greatest_script.pyc”,它可以被其他Python Scripts分发和导入。

      【讨论】:

      • 这听起来很有希望,但在阅读了一些关于这种方法的文章后,似乎 pyinstaller 生成的 .exe 文件相对容易恢复为 Python 代码。这不正确吗?
      • 不确定exe但是pyc文件可以很容易地反编译成py
      • 您从哪里读到有关从可执行文件恢复为 Python 的信息? PyInstaller 的文档甚至说您可以使用PyCrypto 加密您的可执行文件,例如使用 SHA。
      【解决方案3】:

      没有办法让它们不可读但同时可执行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-11
        • 2020-06-21
        • 2012-03-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多