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

v2g6jxz6  于 2022-11-07  发布在  Apache
关注(0)|答案(4)|浏览(235)

我今天安装了一个新的CentOS 7 x86_64 LAMP服务器。
我用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用户,这并没有解决可悲的。
下面是错误日志,您可以看到它显示了一个“Permission Denied”错误:

[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>

当然,我激活CGI使用:AddHandler cgi-script .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;
}

输出正确:Content-Type: text/html; charset=ISO-8859-1\n\nHello, World!
另外,我用gcc编译了它,然后给了它777权限来测试。cgi你知道我需要做什么来修复这个问题吗?
先谢谢你了佐格托内

wn9m85ua

wn9m85ua1#

我不确定这对您来说是否是一个可行的解决方案,但是我通过将SELinux更改为允许的来使它工作。

vi /etc/selinux/config

更改以下行:

SELINUX=enforcing

至:

SELINUX=permissive
0tdrvxhp

0tdrvxhp2#

我只是解决了重新安装服务器和做所有的一遍,禁用selinux和iptables,因为我已经有一个外部防火墙。
感谢任何帮助我的人;)

ukdjmx9f

ukdjmx9f3#

这很可能是SELinux问题(Tom Sweeney answer提供了一个解决方案,使用一个许可的SELinux和您自己的接受的answer,您指示完全禁用SELinux)。另一种方法是为您的CGI文件配置适当的SELinux类型(可能还有其他策略更改)。
要开始安装,请安装SELinux策略管理工具(如果尚未安装):

sudo yum install policycoreutils-python

假设您要允许/var/www/html目录中所有基于CGI的文件,则可以使用以下命令将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脚本以读取./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提供的所有功能可能都要应用其他策略;但是,我不知道是否需要任何其他策略。

bhmjp9jg

bhmjp9jg4#

这是SELinux权限问题,不建议禁用SELinux。请检查您的应用程序是否在SELinux的权限模式下工作,然后是SELinux问题。
找到下面的URL以检查确切的问题,我们将从/var/log/audit. log中获取阻止内容


相关问题