0

相关:Python multiprocessing: Permission denied你如何以'root'的身份临时运行你的代码?

我想用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) 

我得到OSERROR

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 

我在相关问题阅读,它是由于没有R/W到/ dev/shm

除了更改/dev/shm的权限,是否有一种方法可以在代码中以root身份运行?

我最初以为你可以不喜欢os.umask()但它没有工作

编辑(改写的问题):

  • 假设用户名的有目录中的
  • R/W访问您是用户B,您的程序需要访问目录A.您如何以用户A的身份运行程序?
+3

你不应该试图让你的代码以root身份运行。解决方案是使用root访问权限根据您链接的问题永久修复您的系统。 –

+0

@JohnZwinck你能回答这个问题的编辑部分吗?我只是在想一个案例不涉及根 – ealeon

+1

相关(?):[在Python中删除根权限](http://stackoverflow.com/questions/2699907/dropping-root-permissions-in-python) –

回答

2

从最危险到最危险的顺序。

  1. 您可以尝试按照John Zwinck的建议丢弃权限。 基本上你会用root权限启动程序, 立即做你需要做的事情,然后切换到非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用户是 inputed到脚本,然后只使用他们时,他们都需要 。

    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. 或者你可以只运行整个程序作为根用户 - sudo python myScript.py

至于暂时给用户root权限到/ dev/shm的,只有当它们运行脚本,我能想到的唯一的事情就是有,在root用户下在后台运行一些脚本,可以暂时将任何使用脚本root权限的人授予/ dev/shm。这可以通过使用setuid来授予这样的权限,然后在一段时间之后完成,或者如果脚本结束,权限被取走。我唯一担心的是,如果暂时获得这种权限的用户有办法获得更多永久权限。

相关问题