我有一个以root身份启动的python脚本,我无法更改它。
我想知道是否有可能以普通用户的身份执行此脚本(或所有脚本)的某些行(我不需要root用户即可运行)。
原因是,我使用通知,而python-notify并非在所有root机器上都有效(看起来像这个bug)
那么,您知道是否可以通过子流程或其他方法进行更改?
谢谢
我想知道是否有可能以普通用户的身份执行此脚本(或所有脚本)的某些行
是的,这是可能的,而且是个好主意。
Python的os
模块具有一组功能,以设置真实,有效和已保存的用户和组ID setegid
。就Python而言,这些功能的确切作用取决于您的平台。它只是调用相同名称的C函数。
但是POSIX定义了这些功能的作用。请参阅setuid
和,seteuid
以获取详细信息,但简短的版本是:
seteuid
或setreuid
来设置仅有效的或真实有效的但不保存的UID。然后再次使用相同的功能将它们重新设置为root。setresuid
改为使用这三个命令来进行设置。如果您使用的是Python 3.1和更早版本,则没有所有这些功能。您仍然可以使用它seteuid
来回切换有效的ID,但是setuid
……这取决于您的平台,但是我认为大多数现代平台的保存方式和实际方式都会发生变化,这意味着您无法扎根。如果您阅读链接的POSIX文档,则POSIX文档中有很多警告和复杂性。如果您只关心一个平台,则可能要阅读本地的联机帮助页,而不是阅读所有情况,然后尝试找出哪个平台覆盖了您的平台。
那么,您知道是否可以通过子流程或其他方法进行更改?
这不是必需的(至少在兼容的POSIX系统上),但这可以使事情变得更容易或更安全。您可以使用subprocess
,multiprocessing
,os.fork
,或任何其他机制来启动一个子进程,它会立即使用setuid
,以放弃特权,甚至setresuid
放弃过恢复其特权的能力。当该子进程完成其任务后,它将退出。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句