从浏览器中的Python子进程调用Shell脚本时,权限被拒绝

时间:2015-07-24 01:29:10

标签: python ajax bash shell cgi

我通过ajax调用调用python脚本

$.ajax({
        url: "http://localhost/username/test.py",
        type: "post",
        data: JSON.stringify({'param':{"hello":"world"}}),
        dataType: "json",
        success: function(response) {
        console.log(response);
        },
        error: function(error) {
        console.log(error);
        }
    });

python脚本启动(设置了conf文件并运行了apache服务器)但是python脚本应该循环调用各种shell文件的一堆子进程调用。像这样:

for line in reader:
    var=line["A"]
    var2=var[:-4]
    var3=line["B"]
    print(var2)
    subprocess.call(["sh","dummy.sh",var,var2,var3])

相同的python脚本在终端中工作正常。但是当我浏览网页浏览器时,我在浏览器中获得了500错误的许可。进入apache日志,告诉我它遇到了权限错误

  

[Thu Jul 23 18:13:55.958161 2015] [cgi:error] [pid 19878] [client :: 1:54132] AH01215:dummy.sh:第37行:inputFile.xml:Permission denied,referer:{ {3}}

如何传递权限?或者我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

当你在终端上运行python脚本时,它会作为一个带有你的用户ID的进程运行,我想? 如果您可以通过执行此操作打开输入文件,则很可能是权限问题。

apache进程没有足够的特权来打开文件。

我建议:

  • 检查文件的所有者和权限 - 确保Apache进程用户ID可以读取它。这要求文件至少具有读取权限,即。 -rw-r - r--(chmod 644)。

  • 另请不要忘记目录路径权限和/或所有权。 例如。如果文件位于/home/foo/bar/inputFile.xml中,则需要检查Apache用户是否可以访问整个路径/ home / foo / bar。这至少需要目录上的drwx-x-x(chmod 711)。

答案 1 :(得分:0)

感谢Maelstrom,Revolt和rici。 inputFile.xml实际上是在dummy.sh中创建的,然后dummy.sh中的其他步骤在inputFile.xml上运行。我还预计,因为我已经在文件夹755访问中给出了其他文件,所以这些新形成的xml文件受到限制。如何确保dummy.sh创建的所有文件都具有足够的权限才能执行?非常感谢。