特权子进程在错误的工作目录

时间:2016-03-13 16:15:08

标签: python linux

我试图使用subprocess.Popen从另一个非特权的脚本启动一些python脚本。在大多数情况下工作得很好,但是那些需要root权限的人不能工作,我已经把问题缩小到了pkexec,那不是停留在工作目录中也不是接受它作为参数,那是因为 这样:

subprocess.Popen(['kdesudo','pwd'],cwd=sys.path[0])
#also works with sudo

有效地打印cwd,而:

subprocess.Popen(['pkexec','pwd'],cwd=sys.path[0])

始终保持在/ root。 (也尝试通过env = os.environ无济于事) 我需要用gui提示用户,以及pkexec提供的可移植性超过kdesudo / gksu。有什么想法吗?

编辑:由于无法更改pkexec的工作目录,因此可以使用以下命令在gtk和kde环境中提示用户输入root密码:

try:
    check_call('which gksu',shell=True)
    sudo = 'gksu'
except:
    print "gksu frontend not found, using kdesudo instead"
    sudo = 'kdesudo'
prompt = Popen([sudo, '<privileged command/script to run>'])

2 个答案:

答案 0 :(得分:1)

在调用它的命令时,没有办法让pkexec保留旧目录,因为它always changes to the target user's home directory

它更改为pw->pw_dir,这是目标用户的主目录,并且没有替代它。

我无法看到记录在案的原因,但可能只是尝试确保执行程序的用户可以访问其当前的工作目录。它自pkexec创建以来一直存在,我没有看到任何与此行为相关的错误。

答案 1 :(得分:0)

我使用pkexec从当前目录中以特权用户身份运行pcmanfm文件管理器,如下所示:

pkexec  env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY  pcmanfm $PWD 

用户必须属于sudo组。