当前位置: 首页 > 知识库问答 >
问题:

Apache/httpd /var/www/html/。cgi脚本抛出500内部服务器错误

东方建修
2023-03-14

我今天安装了一个新的CentOS 7x86_64LAMP服务器。

我用c编译了一个简单的CGI脚本,我称之为test.cgi,我为. cgi脚本启用了addHandler。然而,每次我尝试从 /var/www/html目录加载/test.cgi页面时,任何简单的. cgi脚本都会给我抛出一个500内部服务器错误页面。

我测试了脚本是否从 /var/www/cgi-bin 目录工作正常。我的服务器正在运行selinux,apache / httpd正在使用suEXEC。

编辑:同样,在安装灯之后,我没有创建任何额外的用户,所以现在我使用root来做所有事情。然而,我试图修复将/var/www/html目录所有权授予apache用户的问题,但遗憾的是,这并没有解决。

这是错误日志,如您所见,它给了我一个“权限被拒绝”错误:

[Mon Jul 21 15:28:14.336626 2014] [core:notice] [pid 22704] SELinux policy enabled; httpd running as context system_u:system_r:httpd_t:s0
[Mon Jul 21 15:28:14.339766 2014] [suexec:notice] [pid 22704] AH01232: suEXEC mechanism enabled (wrapper: /usr/sbin/suexec)
[Mon Jul 21 15:28:14.495631 2014] [auth_digest:notice] [pid 22704] AH01757: generating secret for digest authentication ...
[Mon Jul 21 15:28:14.498690 2014] [lbmethod_heartbeat:notice] [pid 22704] AH02282: No slotmem from mod_heartmonitor
[Mon Jul 21 15:28:14.765072 2014] [mpm_prefork:notice] [pid 22704] AH00163: Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips PHP/5.4.16 configured -- resuming normal operations
[Mon Jul 21 15:28:14.765186 2014] [core:notice] [pid 22704] AH00094: Command line: '/usr/sbin/httpd -D FOREGROUND'
[Mon Jul 21 15:28:16.027553 2014] [cgi:error] [pid 22706] [client 192.168.0.68:52930] AH01215: (13)Permission denied: exec of '/var/www/html/index.cgi' failed
[Mon Jul 21 15:28:16.030595 2014] [cgi:error] [pid 22706] [client 192.168.0.68:52930] End of script output before headers: index.cgi
[Mon Jul 21 15:45:01.586229 2014] [mpm_prefork:notice] [pid 22704] AH00170: caught SIGWINCH, shutting down gracefully

这是我的/var/www/html apache配置:

<Directory "/var/www/html">
    #                                                                                                                                                                                
    # Possible values for the Options directive are "None", "All",                                                                                                                   
    # or any combination of:                                                                                                                                                         
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews                                                                                                      
    #                                                                                                                                                                                
    # Note that "MultiViews" must be named *explicitly* --- "Options All"                                                                                                            
    # doesn't give it to you.                                                                                                                                                        
    #                                                                                                                                                                                
    # The Options directive is both complicated and important.  Please see                                                                                                           
    # http://httpd.apache.org/docs/2.4/mod/core.html#options                                                                                                                         
    # for more information.                                                                                                                                                          
    #                                                                                                                                                                                
    Options ExecCGI FollowSymLinks

    #                                                                                                                                                                                
    # AllowOverride controls what directives may be placed in .htaccess files.                                                                                                       
    # It can be "All", "None", or any combination of the keywords:                                                                                                                   
    #   Options FileInfo AuthConfig Limit                                                                                                                                            
    #                                                                                                                                                                                
    AllowOverride All

    #                                                                                                                                                                                
    # Controls who can get stuff from this server.                                                                                                                                   
    #                                                                                                                                                                                
    Require all granted
</Directory>

当然,我使用< code>AddHandler cgi-script激活了CGI。cgi。pl

这是我的简单test.c文件:

#include <stdio.h>

int main(void) {
  puts("Content-Type: text/html; charset=ISO-8859-1\n");
  fputs("Hello, World!", stdout);

  return 0;
}

输出正确:<code>内容类型:text/html;charset=ISO-8859-1\n\n你好,世界

我也用 gcc 编译了它,然后给了它 777 测试的权限.cgi 你知道我需要做什么来解决这个问题吗?

先谢了,佐加通

共有3个答案

巫马泓
2023-03-14

这很可能是一个SELinux问题(Tom Sweeney的回答提供了一个使用许可SELinux和您自己接受的答案的解决方案,您表示完全禁用SELinux)。另一种方法是为CGI文件配置适当的SELinux类型(以及可能的其他策略更改)。

首先,安装 SELinux 策略管理工具(如果尚未完成):

sudo yum install policycoreutils-python

假设您希望允许< code>/var/www/html目录中所有基于CGI的文件,您可以使用以下命令将< code > httpd _ sys _ script _ exec _ t 上下文应用于当前和将来的CGI文件:

sudo semanage fcontext -a -t httpd_sys_script_exec_t '/var/www/html(/.*)?/.*\.cgi'

接下来,恢复任何现有CGI文件的内容:

sudo restorecon -Rv /var/www/html/

您还需要允许 Apache 允许使用以下方法执行 CGI 脚本:

sudo setsebool -P httpd_enable_cgi 1

你应该完成。请注意,如果您的CGI脚本需要从系统中的其他文件读取/写入内容,您还必须将httpd_sys_rw_content_t上下文应用于这些文件(请参见下面的示例)。

刚刚在CentOS 7(x86_64)系统上安装Bugzilla(使用CGI)时遇到此问题。在监视我的httpd错误日志(sudo-tail-f/var/log/httpd/error_log)时观察到以下错误:

[cgi:error] [pid 1825] [client ...:56481] AH01215: (13)Permission denied: exec of '/var/www/html/bugzilla/index.cgi' failed
[cgi:error] [pid 1825] [client ...:56481] End of script output before headers: index.cgi

检查应用于我的Bugzilla安装的上下文,我看到以下内容:

$ ls -Z /var/www/html/bugzilla/
...
-rwxr-x---. apache apache unconfined_u:object_r:httpd_sys_content_t:s0 index.cgi
...

然后,我使用以下命令允许执行Bugzilla的CGI脚本,并允许所述CGI脚本访问<code>中的内容/data目录:

sudo yum install policycoreutils-python
sudo semanage fcontext -a -t httpd_sys_script_exec_t '/var/www/html/bugzilla(/.*)?/.*\.cgi'
sudo semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/bugzilla/data(/.*)?'
sudo restorecon -Rv /var/www/html/bugzilla/
sudo setsebool -P httpd_enable_cgi 1

检查应用的上下文会显示预期的结果:

$ ls -Z /var/www/html/bugzilla/
...
-rwxr-x---. apache apache unconfined_u:object_r:httpd_sys_script_exec_t:s0 index.cgi
...

Bugzilla现在应该可以用了。可能有额外的政策适用于Bugzilla提供的所有功能;然而,我不知道是否需要任何额外的政策。

公羊宇定
2023-03-14

我刚刚解决了重新安装服务器并重新执行的问题,禁用了 selinux 和 iptables,因为我已经有一个外部防火墙。

感谢任何帮助我的人;)

卢俊发
2023-03-14

我不确定这对您来说是否是一个可行的解决方案,但是我通过将SELinux改为permissive使它工作了。如果你感兴趣的话,这里有一些步骤。

vi /etc/selinux/config

更改以下行:

SELINUX=enforcing

收件人:

SELINUX=permissive
 类似资料:
  • 我有一个使用mod_wsgi安装了apache和django的生产服务器。 django应用程序有一个REST API,它在发送GET请求时提供一些信息。 如果我们使用manage运行django,这在开发服务器上总是很好。屏幕中的py。现在,我们用运行django的apache创建了一个生产服务器,但当从本地主机或同一网络中的其他机器(使用192.168.X.X IP)运行wget时,该API返

  • 我正在为一个web使用flask构建一个api,我已经有了一个数据库,GET请求可以工作,但当我尝试发布时,它会给我这个错误 500内部服务器错误 这是我写的代码 这是我在邮递员上添加的请求 我还使用了一个本地服务器,我查看了其他链接,每个人都在询问日志,如果我没有错,我想我可以从 看法 这是日志的截图:(我想) 到底是什么问题我不明白 编辑:这是完整的代码: 第二次编辑:控制台日志 添加def错

  • 问题内容: 我正在尝试为这个工作中的项目学习AJAX。我有一个网站加载病人正在服用的药物。 我递归调用此AJAX函数,以便它将附加一个包含单种药物和7天历史记录的新表。我在使代码在FF和IE中执行时遇到问题。在chrome中效果很好。我有显示xmlhttp.status的警报,这是我得到的: xmlhttp.status == 500(内部服务器错误)。 我注释掉了所有递归,因此将其范围缩小到了这

  • 我收到以下错误 内部服务器错误 服务器遇到内部错误或配置错误,无法完成您的请求。 请联系服务器管理员,webmaster@strivemedicare.in并告知他们错误发生的时间,以及可能导致错误的任何行为。 有关此错误的详细信息,请参阅服务器错误日志。 此外,尝试使用错误文档处理请求时遇到 500 内部服务器错误错误。

  • 我正在学习Perl。目前我正在学习Perl CGI脚本,在这个脚本中我编写了一个示例hello world程序 我将上述脚本保存在为此,我在机器中安装了apache web服务器,我使用它工作正常。然后我打招呼。使用apache服务器在我的浏览器中编写pl程序 但上面的url显示错误。 为什么它显示这个。在脚本或apache中有黄的东西吗?有人面临这个问题吗?请让我知道,试着解决这个问题 更新:

  • 我一直试图在nginx上安装CakePHP,但我遇到了一个死胡同。尝试访问web根目录时,我收到一个500内部服务器错误。我在我的错误中得到了这个错误。日志: PHP消息:PHP致命错误:require():无法打开required'/var/www/html/test/vendor/autoload。php'(include_path='。:/usr/share/php:/usr/share/p