如何在脚本中以编程方式实现超级用户权限?

3
我已经编写了一个Python脚本。其中一个函数打开一个端口进行监听。为了打开一个端口进行监听,我需要以超级用户的身份来执行。但我不想使用sudo或以root权限运行脚本等方式。我在这里看到了一个关于使用sudo的子进程的答案。据我所知,我不需要子进程,只是应用程序内部的一个函数。
问题:如何以编程的方式使用超级用户权限打开一个端口?

你能分享一下与这个问题相关的代码吗? - nbryans
你可以不使用类似 authbind 这样的工具,来直接对 Python 进程授予特定权限吗? - Jon Clements
请查看功能:https://linux.die.net/man/7/capabilities。您可以设置功能,例如CAP_NET_BIND_SERVICE,以便您的脚本能够绑定到任何端口而无需root访问权限。 - kfx
2个回答

0

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

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

编辑

值得注意的是,您可以从 Python 脚本内部运行 bash 命令 - 例如使用 subprocess 模块。

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

这基本上是创建一个新的bash进程来运行给定的命令。

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


0

您可以在Python脚本中像这样使用sudo,这样您就不必以sudo或root身份运行脚本。

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

1
当然,但这只是同样问题的一种解决方法,对吧?用户仍然需要输入他们的密码... - Sam Redway
1
原始问题并没有说明不输入密码的情况。显然,无论如何你都必须这样做。 - vesche
获取 su 权限而无需输入密码?不行。 - Jeon
如果我理解正确,subprocess需要输入密码?那对我来说没问题。 - user6035379
1
@user6035379 这些权限将应用于其他进程,而不是 Python 进程 - 因此,这只相当于在 Python 中运行 sudo 而不是仅使用 sudo... - Jon Clements

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接