python 在 root 脚本中以普通用户身份运行命令

2023-11-26

我有一个以 root 身份启动的 python 脚本,我无法更改它。

我想知道是否可以以普通用户身份执行此脚本的某些行(或所有脚本)(我不需要 root 权限来运行此脚本)。

原因是,我使用通知,并且 python-notify 不适用于 root 中的所有计算机(看起来像这样bug)

那么,您知道是否可以通过子流程或其他方式来更改它吗?

Thanks


我想知道是否可以以普通用户身份执行该脚本的某些行(或所有脚本)

是的,这是可能的——而且是个好主意。

蟒蛇的os模块有一组函数来设置真实的、有效的、保存的用户和组ID,从setegid。就 Python 而言,它们的具体作用取决于您的平台;它只是调用同名的 C 函数。

但 POSIX 定义了这些函数的用途。看setuid and seteuid详细信息,但简短的版本是:

  • 如果您想切换到普通用户然后再切换回来,请使用seteuid or setreuid,设置刚刚有效,或者真实有效,但不保存UID。然后再次使用相同的功能将它们设置回 root。
  • 如果您想以普通用户身份运行整个脚本并确保无法恢复 root 权限,请使用setresuid相反,设置所有三个。

如果您使用的是 Python 3.1 及更早版本,则无法使用所有这些功能。您仍然可以使用seteuid来回切换有效ID,但是setuid会……好吧,这取决于你的平台,但我认为大多数现代平台都会改变保存的和真实的,这意味着你无法恢复root。如果您阅读链接的 POSIX 文档,您会发现 POSIX 文档中有很多注意事项和复杂性。如果您只关心一个平台,您可能想阅读本地联机帮助页,而不是阅读所有案例,然后尝试找出哪一个涵盖您的平台。

那么,您知道是否可以通过子流程或其他方式来更改它吗?

这不是必需的(至少在符合 POSIX 的系统上),但它可以使事情变得更容易或更安全。您可以使用subprocess, multiprocessing, os.fork,或任何其他启动子进程的机制,它立即使用setuid放弃特权——甚至setresuid放弃恢复其特权的能力。当该子进程完成其任务后,它就会退出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 在 root 脚本中以普通用户身份运行命令 的相关文章

随机推荐

  • Chrome JavaScript 开发者控制台:是否可以在不换行的情况下调用 console.log() ?

    我想使用 console log 来记录消息without每次调用 console log 后添加一个新行 这可能吗 不 这是不可能的 如果您希望将所有内容都放在一行中 或者将输出放在其他地方 例如 另一个窗口 则必须保留一个字符串并连接起
  • Selenium 和异步 JavaScript 调用

    我对 Selenium 和 JavaScript 回调函数很陌生 我有一个无法自己解决的大问题 我需要使用 JavaScript 指定一个变量 如果我使用 GoogleChrome 打开页面并使用控制台输入我的 JavaScript 代码
  • 重大地点变更 - 我们有什么保证?

    我目前正在编写一个移动 iOS 应用程序 该应用程序使用 iOS 重要位置更改服务来管理大量地理围栏 当我们从 CoreLocation 框架收到此消息时启用和禁用地理围栏 苹果开发者网站上写道 仅当设备位置发生重大变化 例如 500 米或
  • 在 Spring Boot 中发送多部分响应

    我正在研究在 Spring Boot 中开发的 api 现在我有一个 API 我必须在其中发送包含一个二进制文件和 xml 的响应 两者将由多部分边界分隔 那么有什么办法可以做到这一点吗 在 Spring Boot 中 尝试按照多部分发送响
  • 选择计数/重复项

    我有一张包含所有美国邮政编码的表格 每行包含邮政编码的城市和州名称 我正在尝试获取出现在多个州的城市列表 如果同一城市没有 X 个邮政编码 这不会是问题 所以基本上 我只想将一个州的城市算作 1 而不是将城市 州计数 7 次 因为该城市 州
  • 使用 pymongo 在 mongodb 中按 ObjectId 搜索

    我需要使用 pymongo 使用 python 搜索 ObjectId 但总是收到此错误 有什么想法如何搜索吗 import pymongo from pymongo import MongoClient from pymongo impo
  • 如何评估来自 stdin 的 PowerShell 脚本输入

    我想在 PowerShell 中评估 StdIn 的内容 如下所示 echo echo 12 powershell noprofile noninteractive command input iex Output echo 12 很遗憾
  • 如何在 C# 应用程序启动时立即运行代码?

    我已经将一些代码放在了公共内部MainWindow 但我一这样做就不断收到一些晦涩的 XAML 解析错误 不是在我的计算机上 而是在我尝试过的其他 3 台计算机上 是否有一种在应用程序启动时立即运行代码的首选方法 理论上是我希望它打电话回家
  • 如果函数指针不需要 & 符号,为什么 boost::bind 需要一个?

    我一直相信函数指针不需要 符号 然而 我见过的每一个使用的例子boost bind显示一个 并且我的编译器 在大多数情况下 如果省略它 则会给出通常难以理解的错误消息 synchronize boost bind Device asyncU
  • 是否可以通过 Chrome 扩展中的上下文菜单项调用内容脚本方法?

    我正在尝试使用上下文菜单项来调用在内容脚本中编写的方法 那可能吗 正如我所尝试的那样 上下文菜单只能在后端执行操作 E g A generic onclick callback function function genericOnClic
  • 如何在 Linux UVC 驱动程序中启用 UVC_QUIRK_FIX_BANDWIDTH 怪癖?

    我目前正在尝试运行 2webcams在 Wandboard 板上 它们必须共享 USB 集线器 问题是 当前的驱动程序实现 仅限 YUV 使 USB 集线器饱和 最终我只能连接一台相机 然而 UVC 驱动程序的实现有一个怪癖kind情况等
  • dplyr sample_n 其中 n 是分组变量的值

    我有以下分组数据框 我想使用该功能dplyr sample n从此数据框中为每个组提取行 我想使用分组变量的值NDG每组中的行数作为从每组中提取的行数 gt dg tmp lt structure list Gene c CAMK1 GHR
  • 下载功能因文件过大而失败

    你好 我的下载功能 protected void downloadFunction string fileName string filePath D SoftwareFiles LogMessageToFile Download star
  • 具有 ASPN、应用内购买等的多个应用程序中的应用程序 ID 和捆绑种子 ID

    我将创造多个销售版本具有推送通知功能的同一应用程序 酷应用 完整版 CoolApp Free 免费 功能有限 版本 酷应用程序中的应用程序 免费版 可通过应用内升级至完整版 购买 在 Apple Program Portal 中注册 App
  • 在正则表达式中将空格转换为制表符

    在正则表达式中如何表达以下内容 foreach line look at the beginning of the string and convert every group of 3 spaces to a tab Stop once
  • 我应该如何在 JavaScript 中“屈服”?

    我对现代 JavaScript ES8 有点陌生 异步产生的首选方法是什么 即在事件循环的未来迭代中继续执行脚本 使用await 我看到了以下选项 async function yield1 await Promise resolve co
  • 将 std::unique_ptr 与分配器一起使用

    这次我尝试使用分配器 感觉有很多机会泄漏资源 所以我想如果我用怎么办std unique ptr来处理它们 我试着用我的手std vector的分配器 我的代码是这样的 allocator include
  • PHP 不带引号的数组访问

    我在现有的 php 源代码中发现了一个现象 不带撇号的字段访问 如下所示 GET test 我不确定 也不知道这是一种可能的方式 所以我写了一个简短的例子来测试 echo Array Test fields without apostrop
  • 使用 asyncio 的相互递归协程

    我有一个假设 如果我用 asyncio 编写相互递归协程 它们不会遇到最大递归深度异常 因为事件循环正在调用它们 并且像蹦床一样运行 然而 当我这样写时 情况并非如此 import asyncio asyncio coroutine def
  • python 在 root 脚本中以普通用户身份运行命令

    我有一个以 root 身份启动的 python 脚本 我无法更改它 我想知道是否可以以普通用户身份执行此脚本的某些行 或所有脚本 我不需要 root 权限来运行此脚本 原因是 我使用通知 并且 python notify 不适用于 root