在 Python 中删除 root 权限

2024-06-23

我想让一个Python程序开始侦听端口80,但之后执行时无需root权限。有没有办法放弃 root 或在没有 root 的情况下获取端口 80?


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

以下是在 Python 中删除 root 权限的可能解决方案:在 Python 中删除权限 http://antonym.org/2005/12/dropping-privileges-in-python.html。一般来说,这是一个很好的解决方案,但您还必须添加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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 中删除 root 权限 的相关文章

随机推荐

  • 如何使用 JSTL 标签禁用 html 按钮

    我想根据 Spring bean 中存在的值禁用 HTML 按钮 我正在使用 JSTLempty财产但没有运气 这是我的代码
  • 如何使用 javascript 和 python3 上传网络摄像头视频流并在字节到达服务器后立即发送字节?

    当从网络摄像头创建字节时 如何将网络摄像头上传到服务器 这是我的起始代码 let mediaRecorder new MediaRecorder mediaStreamObj let chunks 这是解决方案 已在 Firefox 和 C
  • C++ 中的覆盖和重载

    是的 我确实理解它们之间的区别 我想知道的是 为什么要重写一个方法 这样做有什么好处呢 在重载的情况下 唯一的优点是您不必考虑函数的不同名称 超载通常意味着同一范围内有两个或多个具有相同名称的函数 调用时与参数匹配得更好的函数获胜并被调用
  • Excel 数据透视表

    我是一名 Excel 新手 想知道 Excel 是否具有内置功能来执行以下操作 转此数据 Name Activity Option Bob Monday Activities Golf Bob Tuesday Activities Kaya
  • Angularjs-ui bootstrap.tabs - 添加下一个选项卡按钮

    我正在使用模式来显示一系列选项卡 div class modal fade hide modal creator div class modal header h3 Create New Gallery h3 div div class m
  • 返回“IList”与“ICollection”与“Collection”

    我对应该从公共 API 方法和属性返回哪种集合类型感到困惑 我想到的收藏是IList ICollection and Collection 返回这些类型中的一种总是优于其他类型 还是取决于具体情况 ICollection
  • Travis-CI:docker 镜像作为构建环境

    In 特拉维斯 西尔是否可以从 docker 容器内部运行构建过程 In 亚搏体育appGitLab持续集成 http docs gitlab com ce ci docker using docker images html这是默认设置
  • 将更改存储在通过 getClass().getResourceAsStream 读取的 .properties 文件中

    我正在编写一个从 properties 文件读取属性的 java Web 应用程序 由于我不知道 properties 文件的绝对路径 因为它取决于应用程序将来运行的环境 所以我必须使用 getClass getResourceAsStre
  • Java 签名的小程序证书仅在 mac OSX10.7 (Lion) 上被吊销

    我有一个签名的小程序 可以在 Windows Mac security Loading certificates from Deployment session certificate store security Loaded certi
  • Jasmine/PhantomJs 规格运行程序

    我无法使用 phantomJs 运行测试 吞咽任务 var jasminePhantomJs require gulp jasmine2 phantomjs gulp task test function return gulp src S
  • 从流中获取文本阅读器?

    我正在尝试读取嵌入的文本文件System Reflection Assembly GetExecutingAssembly GetManifestResourceStream resource 但它给了我一个Stream 嵌入的资源是一个文
  • 如何在 Bash 脚本中回答“是”

    有一个快速的问题 想象一下我有这样的代码 mkdir p INSTALLDIR sudo apt get install y git clojure leiningen git clone git github com maltoe sto
  • 指令级并行性探索

    我只是想知道是否有任何有用的工具可以让我在某些算法中利用指令级并行性 更具体地说 我有一个子集 来自多媒体领域的算法 我想知道利用 ILP 的最佳方法是什么 在这个算法中 所有这些算法都是用 C 语言实现的 所以理想情况下 我将这些算法作为
  • Scala 将字符串转换为映射

    转换这个最快的方法是什么 a ab b cd c cd d de e ef f fg 进入 scala 中的可变映射 我从 500MB 文件中读取了这个输入字符串 这就是我关心速度的原因 如果您的 JSON 像您的示例一样简单 即一系列键
  • 将参数传递给 Scala 对象

    是否可以从外部对象初始化 Scala 对象 我尝试初始化的 Scala 对象没有任何 Companion 类 这是一个例子 object ObjectA val mongoDBConnectionURI This is the Val th
  • python 视频捕获循环

    我编写了一个简单的脚本来连续从网络摄像头捕获快照 我唯一的问题是视频捕获模块并不总是捕获图像 这反过来又导致程序崩溃 我认为我可以通过使用无限循环来解决这个问题 但我不确定如何解决 这是脚本 from VideoCapture import
  • 文件转换任务无法转换压缩包上的 XML 配置

    我正在开发发布管道 它将对应用程序服务工作线程配置执行转换 然后发布工作线程 Web 应用程序 我的输入包是由 MsBuild 发布 来自 ASP NET 构建管道 生成的 zip 包 PackageTmp app data jobs tr
  • Rails - 查找或创建 - 有查找或构建吗?

    我目前正在使用 XXX find or create by uuid XXXX 有没有办法进行查找或构建 Try XXX find or initialize by uuid XXXX
  • TypeScript 中的无渲染 Vue 组件

    我有一个 JavaScript 中的无渲染组件 我正在尝试将其转换为 TypeScript 我在声明时遇到错误render函数在一个Vue extend ed 组件 method ComponentOptions
  • 在 Python 中删除 root 权限

    我想让一个Python程序开始侦听端口80 但之后执行时无需root权限 有没有办法放弃 root 或在没有 root 的情况下获取端口 80 如果没有 root 权限 您将无法在端口 80 上打开服务器 这是对操作系统级别的限制 因此 唯