我的服务器中有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的新手,我们将不胜感激。预先感谢。
答案 0 :(得分:1)
诚然,我完全错过了将解释指定为目录和Jean-François Fabre所指出的实际二进制文件这一事实。那确实会导致相同的错误。但是由于OP解决了该问题,并且仍然出现相同的错误,因此我将取消删除按要求扩展的答案。
也要考虑一下,它可能更像是一个Server Fault问题。
此错误(13: EACCES
)由操作系统引起并从操作系统传播。
HTTPd服务器通常使用特权分离,并且一旦绑定到保留端口,便会将其EUID丢弃给非特权用户。通常只有一个或一个人专用(在我的系统上,它将是用户apache
,组apache
)。您应该可以在httpd.conf
和User
的{{1}}中找到它们。
确保该用户具有访问权限,并且可以执行您正在调用的二进制文件。
鉴于您已解决了解释问题,因此文件将自行执行。去找到您的Group
文件(我认为不同的发行版可能会以不同的方式打包它,而在我的文件中,它将驻留在httpd.conf
中)。您将在此处找到User
和Group
条目。您必须能够以该用户身份访问和执行脚本(包括解释器),因为这就是Apache尝试调用它的方式。即该用户(或组)必须能够访问该文件(以及完整路径)并执行该文件。例如,如果/etc/httpd/httpd.conf
限于(/home/cloudera/
)并由其他用户拥有,则该列表列在0700: rwx------
中(很有可能),操作系统将阻止您的Apache用户访问并执行文件导致您看到的httpd.conf
错误。最简单的方法是成为该用户并查看您的访问权限,但是您需要对此进行一些调整,因为Apache帐户可能已锁定并且没有设置shell(或者将EACCES
设置为shell) )。
还有一件事,但我希望它不那么明显。相应的用户必须对脚本本身具有执行权限。