Python exec()权限在Apache服务器中被拒绝:/cgi_bin/*.py

时间:2018-07-18 19:57:48

标签: python permissions apache2 cgi exec

我的服务器中有2个python env。一条路径为/usr/bin,另一条路径为anaconda路径,如下所示。尝试在Apache服务器上执行基本的Python脚本时,出现“权限被拒绝”错误。我的.py文件中的python解释器路径如下

#!/home/cloudera/anaconda3/bin

使用此路径时,apache服务器显示错误,如下所示:

  

(13)权限被拒绝:“ / var / www / cgi-bin / abc.py”的执行失败,引荐来源网址:

当我将.py中的python解释器路径更改为#!/usr/bin时,效果很好。

问题是我已将所有软件包安装在/home/cloudera/anaconda3/bin

我尝试通过在/etc/httpd/conf/httpd.conf文件中添加以下代码行来设置此路径以使其可在apache服务器中执行,如下所示

  <Directory "/home/cloudera/anaconda3/bin/">
    AllowOverride None
    Options ExecCGI
    AddHandler cgi-script .py
    #None
    Order allow,deny
    Allow from all
</Directory>

我仍然收到“拒绝权限”。它仍然不起作用。我是cgi的新手,我们将不胜感激。预先感谢。

1 个答案:

答案 0 :(得分:1)

诚然,我完全错过了将解释指定为目录和Jean-François Fabre所指出的实际二进制文件这一事实。那确实会导致相同的错误。但是由于OP解决了该问题,并且仍然出现相同的错误,因此我将取消删除按要求扩展的答案。

也要考虑一下,它可能更像是一个Server Fault问题。


此错误(13: EACCES)由操作系统引起并从操作系统传播。

HTTPd服务器通常使用特权分离,并且一旦绑定到保留端口,便会将其EUID丢弃给非特权用户。通常只有一个或一个人专用(在我的系统上,它将是用户apache,组apache)。您应该可以在httpd.confUser的{​​{1}}中找到它们。

确保该用户具有访问权限,并且可以执行您正在调用的二进制文件。


鉴于您已解决了解释问题,因此文件将自行执行。去找到您的Group文件(我认为不同的发行版可能会以不同的方式打包它,而在我的文件中,它将驻留在httpd.conf中)。您将在此处找到UserGroup条目。您必须能够以该用户身份访问和执行脚本(包括解释器),因为这就是Apache尝试调用它的方式。即该用户(或组)必须能够访问该文件(以及完整路径)并执行该文件。例如,如果/etc/httpd/httpd.conf限于(/home/cloudera/)并由其他用户拥有,则该列表列在0700: rwx------中(很有可能),操作系统将阻止您的Apache用户访问并执行文件导致您看到的httpd.conf错误。最简单的方法是成为该用户并查看您的访问权限,但是您需要对此进行一些调整,因为Apache帐户可能已锁定并且没有设置shell(或者将EACCES设置为shell) )。


还有一件事,但我希望它不那么明显。相应的用户必须对脚本本身具有执行权限。