我有一个以 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(使用前将#替换为@)