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

标签 python permissions apache2 cgi exec

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

#!/home/cloudera/anaconda3/bin

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

(13)Permission denied: exec of '/var/www/cgi-bin/abc.py' failed, referer:

当我的 .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 新手,任何帮助将非常感激。提前致谢。

最佳答案

诚然,我完全忽略了这样一个事实:解释被指定为目录和实际的二进制文件,如 Jean-François Fabre 所指出的那样。 。这确实会导致同样的错误。但由于OP修复了这个问题并且仍然遇到相同的错误,我将取消删除按要求扩展的答案。

再想想,可能更像是一个Server Fault问题就如它所出现的那样。

<小时/>

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

HTTPd 服务器通常采用权限分离,一旦绑定(bind)到保留端口,就会将其 EUID 丢弃给非特权用户。通常由一个人或任何人(在我的系统上是用户 apache,组 apache)。您应该能够在 UserGroup 下的 httpd.conf 中找到这些内容。

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

<小时/>

假设您已经修复了解释(并且文件将自行执行)。找到您的 httpd.conf 文件(我认为不同的发行版可能会以不同的方式打包它,在我的版本中,它会驻留在此处:/etc/httpd/httpd.conf)。你会发现UserGroup那里的条目。您必须能够以该用户的身份访问和执行脚本(包括解释器),因为这就是 Apache 尝试调用它的方式。 IE。该用户(或组)必须能够访问该文件(沿着完整路径)并执行它。例如,如果 /home/cloudera/ 我们限制为 (0700: rwx------) 并由其他用户拥有,则您的 中列出的用户httpd.conf(很可能),操作系统会阻止您的 Apache 用户访问和执行该文件,从而导致您看到的 EACCES 错误。最简单的方法可能是成为该用户并查看您的访问权限有多远,但是您需要为此临时调整一些位,因为 Apache 帐户可能已锁定且未设置 shell(或者更确切地说 /bin/false 作为外壳)。

<小时/>

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

关于Apache 服务器中的 Python exec() 权限被拒绝 :/cgi_bin/*. py,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51410089/

相关文章:

python - 如何使用键在python数据框中查找值并将其与另一个df中的另一个值与另一个键相加

python - ModuleNotFoundError : No module named 'googletrans'

windows - 为什么只有管理员权限才能在 Python 中导入某些模块?

php - 为 php.ini 文件设置新路径

ssl - 安装SSL时网页掉线

python - 二维对象跟踪中卡尔曼滤波器没有输出

python - 从 3D numpy 数组创建 3D 图

powershell - 如何以编程方式读取 MSMQ 队列的权限?

android - 如何读取当前权限状态?

mysql - Ubuntu:无法通过套接字 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)