python - 在 Python 中删除 Root 权限

标签 python linux unix permissions root

我想让一个 Python 程序开始监听端口 80,但之后在没有 root 权限的情况下执行。有没有办法删除 root 或在没有它的情况下获取端口 80?

最佳答案

如果没有 root 权限,您将无法在端口 80 上打开服务器,这是对操作系统级别的限制。因此,唯一的解决方案是在打开端口后放弃 root 权限。

以下是在 Python 中删除 root 权限的可能解决方案:Dropping privileges in Python .这通常是一个很好的解决方案,但您还必须将 os.setgroups([]) 添加到函数中以确保不保留 root 用户的组成员身份。

我稍微复制和清理了代码,并删除了日志记录和异常处理程序,因此由您来正确处理 OSError (当不允许该进程时,它将被抛出切换其有效的 UID 或 GID):

import os, pwd, grp

def drop_privileges(uid_name='nobody', gid_name='nogroup'):
    if os.getuid() != 0:
        # We're not root so, like, whatever dude
        return

    # Get the uid/gid from the name
    running_uid = pwd.getpwnam(uid_name).pw_uid
    running_gid = grp.getgrnam(gid_name).gr_gid

    # Remove group privileges
    os.setgroups([])

    # Try setting the new uid/gid
    os.setgid(running_gid)
    os.setuid(running_uid)

    # Ensure a very conservative umask
    old_umask = os.umask(077)

关于python - 在 Python 中删除 Root 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2699907/

相关文章:

python - 使用 Python 映射 Windows 驱动器的最佳方法是什么?

linux - 使用linux命令随机选择列

python - 如何在 Centos 中删除 Python?

linux - unix - 文件的头部和尾部

linux - 在 csh 中运行 unix ksh 命令

python - 如何通过 X 点偏移 matplotlib 中的线

python - 使用 Pycharm pytest runner 时如何将插件选项传递给 pytest?

python - 网络抓取最大重试次数被拒绝

linux - ulimit Linux 连接数限制

unix - 为什么 RSA 加密文本对相同的文本给出不同的结果