gpt4 book ai didi

python - 如何临时将代码运行为 'root' ?

转载 作者:行者123 更新时间:2023-12-01 04:16:19 25 4
gpt4 key购买 nike

相关:Python multiprocessing: Permission denied

我想使用Python的multiprocessing.Pool

import multiprocessing as mp
pool = mp.Pool(3)
for i in range(num_to_run):
pool.apply_async(popen_wrapper, args=(i,), callback=log_result)

我收到操作系统错误

  File "/usr/local/lib/python2.6/multiprocessing/__init__.py", line 178, in RLock
return RLock()
File "/usr/local/lib/python2.6/multiprocessing/synchronize.py", line 142, in __init__
SemLock.__init__(self, RECURSIVE_MUTEX, 1, 1)
File "/usr/local/lib/python2.6/multiprocessing/synchronize.py", line 49, in __init__
sl = self._semlock = _multiprocessing.SemLock(kind, value, maxvalue)
OSError: [Errno 13] Permission denied

我在相关问题中读到这是由于没有对/dev/shm 的读/写

除了更改/dev/shm中的权限之外,还有办法在代码中以root身份运行吗?

我最初认为你可以做类似 os.umask() 的事情,但它不起作用

编辑(重新表述问题):

  • 假设用户名 A 对目录 A 具有读写访问权限
  • 您是用户 B,您的程序需要访问目录 A。您如何以用户 A 身份运行程序?

最佳答案

按照从最不危险到最危险的顺序。

  1. 您可以尝试按照 John Zwinck 的建议删除权限。基本上你会以根级别权限启动程序,立即做你需要做的事情,然后切换到非root用户。

    来自this StackOverflow .

    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)
  2. 您还可以要求 root 用户的凭据输入到脚本中,然后仅在需要时使用它们必填。

    subprocess.call("sudo python RunStuffWithElevatedPrivelages.py")
    #From here, the main script will continue to run without root permissions

    或者,如果您不希望脚本提示用户输入密码,您可以这样做

    subprocess.call("echo getRootCredentials() | sudo -S python RunStuffWithElevatedPrivelages.py")
  3. 或者您可以以 root 用户身份运行整个程序 - sudo python myScript.py

至于仅在用户运行脚本时临时授予用户对/dev/shm 的 root 权限,我唯一能想到的是在 root 用户下在后台运行一些脚本,可以临时授予使用该权限的任何人您的脚本 root 权限为/dev/shm。这可以通过使用 setuid 授予此类权限来完成,然后在一段时间后或者如果脚本结束,权限就会被取消。我唯一担心的是,是否有办法让临时获得此类权限的用户能够获得更永久的权限。

关于python - 如何临时将代码运行为 'root' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34281235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com