【问题标题】:How do I programmatically implement super user privileges in a script?如何以编程方式在脚本中实现超级用户权限?
【发布时间】:2016-09-18 15:50:59
【问题描述】:

我写了一个 python 脚本。其中一个函数打开一个端口来监听。要打开一个端口来监听,我需要以超级用户身份进行。我不想使用sudo 或root 权限等运行脚本。我在这里看到了关于使用sudo 的子进程的答案。据我所知,这不是我想要的子过程。它只是应用程序中的一个函数。

问题:如何以编程方式打开具有超级用户权限的端口?

【问题讨论】:

  • 你能分享你写的与这个问题相关的代码吗?
  • 你能不能不使用authbind这样的工具,所以你只授予python进程特定的权限......?
  • 看看功能:linux.die.net/man/7/capabilities。您可以为您的脚本设置功能,例如 CAP_NET_BIND_SERVICE,然后它应该能够绑定到任何端口而无需 root 访问权限。

标签: python permissions


【解决方案1】:

你不能那样做。如果可以的话,恶意代码将可以随时以 root 身份免费访问任何系统!

如果您想要超级用户权限,您需要从 root 帐户运行脚本或使用 sudo 并输入密码 - 这就是拥有用户帐户的全部意义。

编辑

值得注意的是,您可以在 python 脚本中运行 bash 命令 - 例如使用 subprocess 模块。

import subprocess
subprocess.run(['sudo', 'blah'])

这实际上创建了一个新的 bash 进程来运行给定的命令。

如果您这样做,您的用户将被提示以与您预期相同的方式输入他们的密码,并且权限将仅适用于正在创建的子进程 - 而不是您从中调用它的脚本 (这可能是最初的问题)。

【讨论】:

    【解决方案2】:

    您可以像这样在您的 python 脚本中使用 sudo,因此您不必使用 sudo 或以 root 身份运行脚本。

    import subprocess
    subprocess.call(["sudo", "cat", "/etc/shadow"])
    

    【讨论】:

    • 当然,但这是解决同一问题的方法,对吧?用户仍然需要输入他们的密码...
    • 原始问题没有说明不输入密码。显然,无论如何你都必须这样做。
    • 在不输入密码的情况下获得 su 权限?没有。
    • 如果我理解正确的子进程需要输入密码?这对我有用。
    • @user6035379 虽然权限将应用于其他进程而不是 Python 进程 - 所以这等同于在 Python 中运行 sudo 而不是仅仅使用 sudo...
    猜你喜欢
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 2017-04-06
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多