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

纪尧姆

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

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

原因是,我使用通知,而python-notify并非在所有root机器上都有效(看起来像这个bug

那么,您知道是否可以通过子流程或其他方法进行更改?

谢谢

阿巴内特

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

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

Python的os模块具有一组功能,以设置真实,有效和已保存的用户和组ID setegid就Python而言,这些功能的确切作用取决于您的平台。它只是调用相同名称的C函数。

但是POSIX定义了这些功能的作用。请参阅setuid和,seteuid以获取详细信息,但简短的版本是:

  • 如果要切换到普通用户然后再切换回,请使用seteuidsetreuid来设置仅有效的或真实有效的但不保存的UID。然后再次使用相同的功能将它们重新设置为root。
  • 如果要以普通用户身份运行整个脚本,并确保无法重新获得root用户,请setresuid改为使用这三个命令来进行设置。

如果您使用的是Python 3.1和更早版本,则没有所有这些功能。您仍然可以使用seteuid来回切换有效的ID,但是setuid……这取决于您的平台,但是我认为大多数现代平台的保存方式和实际方式都会发生变化,这意味着您无法扎根。如果您阅读链接的POSIX文档,则POSIX文档中有很多警告和复杂性。如果您只关心一个平台,则可能要阅读本地的联机帮助页,而不是阅读所有情况,然后尝试找出哪个平台覆盖了您的平台。

那么,您知道是否可以通过子流程或其他方法进行更改?

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用sudo运行bash脚本,以普通用户身份使用某些命令

在sudo中运行时找不到命令,但在以普通用户身份运行时提供输出

普通用户在/ var / run中触摸文件失败

如何允许普通用户运行超级用户命令(来自/ usr / sbin)

以root用户身份运行的脚本可以以普通用户身份运行另一个脚本吗?

以root身份运行bash安装脚本-如何处理普通用户的文件?

使用 sudoers 文件阻止普通用户访问命令

切换到普通用户的命令是什么?

如何阻止普通用户使用startx命令?

如何输入用户帐户并从以root用户身份运行的Shell脚本中运行命令?

在python脚本中运行docker run命令

如何在以root权限开头的脚本中以非root用户身份运行命令?

以root用户身份运行bash脚本,该脚本中具有sudo命令

如果我使用`sudo`运行命令,它仍然是“由普通用户调用的”吗?

用 root 运行脚本的某些部分,用普通用户运行其他部分

以普通用户而不是 root 身份运行 Incron 守护进程

声音在root用户中无法正常运行,但在普通用户中可以正常运行

我以root身份安装了Chrome;为什么不能以root用户或普通用户身份运行它?

在 Fedora 32 上以普通用户身份运行 vncserver

如何以普通用户身份运行 iex?

运行某些脚本/命令以用户身份挂起,以root用户身份可以挂起

允许用户以root用户身份运行命令

python从root用户获取普通用户名?

以root用户身份在jenkins中运行shell命令吗?

从python脚本以超级用户身份运行命令

在Linux中以普通用户身份使用rpm -i

无法以普通用户身份在Youtrack 6中登录

在python中如何从root用户获取普通用户名?

使用python中的子过程自动从普通用户切换到root用户