【问题标题】:How to run python script which require sudoer如何运行需要 sudo 的 python 脚本
【发布时间】:2016-02-10 07:44:30
【问题描述】:

我需要使用 python 脚本使用 sudo service stop/start 来停止/启动某些服务。该脚本将由运行 apache webserver 的服务器端的网页 php 代码调用。 我知道的一种方法是授予 www-data sudoer 运行特定 python 脚本的权限。 是否有其他方法不给予 www-data 特定许可。在这种情况下,示例将 cgi 或 mod_python 工作。如果是,那么在 LAMP 服务器中执行所有 python 脚本的最佳实现是什么。 提前致谢。

【问题讨论】:

    标签: php python apache


    【解决方案1】:

    我认为在没有任何通配符的情况下为 www-data 赋予单个重启命令的 sudo 权限没有安全问题。

    如果你想完全避免使用 sudo,你可以用 php 创建一个临时文件,并从 root 定期执行的 shell 脚本中轮询这个文件。

    但这可能更容易出错,并导致相同的结果。

    【讨论】:

    • 我将 www-data 添加到 sudoer 列表 /etc/sudoers www-data ALL = (ALL:ALL) NOPASSWD: /folder/path/myscript.py 但是 www-data 仍然要求输入密码。我通过赋予 www-data 完全权限 www-data ALL = (ALL:ALL) NOPASSWD: ALL 进行了测试,然后脚本运行良好。我检查了 www-data 作为 myscript.py 文件的所有者。
    • python 脚本应该作为 www-data 运行,并调用 sudo service stop。
    • www-data ALL=(ALL) NOPASSWD: /usr/bin/service 不管什么停止
    • 感谢visit1985。这解决了我的问题。我试图停止的服务位于 /usr/sbin/service。您的回答和更多挖掘解决了它。
    【解决方案2】:

    您可以运行一个 python 线程来侦听停止/启动请求,然后该线程将停止/启动服务。该线程应该作为 sudo 运行,但它侦听 tcp。 Web 服务器可以发送没有任何特殊权限的请求(SocketServer 是一个非常简单的开箱即用的 python tcp 服务器)。

    您可能想要添加一些安全性,例如使用秘密散列到该服务器的请求,因此只有允许的服务才能请求服务的启动/停止,并应用 iptables 规则(来自 Web 服务器所在的本地主机的请求)

    【讨论】:

      猜你喜欢
      • 2017-09-30
      • 1970-01-01
      • 2019-12-23
      • 2011-04-27
      • 1970-01-01
      • 2023-03-23
      • 2012-07-28
      • 1970-01-01
      • 2018-10-23
      相关资源
      最近更新 更多