获取内部服务器错误,权限被拒绝在centos linux上的apache下运行cgi

Posted

技术标签:

【中文标题】获取内部服务器错误,权限被拒绝在centos linux上的apache下运行cgi【英文标题】:Getting Internal server error, Permission denied running cgi under apache on centos linux 【发布时间】:2021-11-28 16:15:42 【问题描述】:

服务器错误日志中可能会提供常见的内部服务器错误以及有关此错误的更多信息。

selinux 正在执行,但注意到日志中列出了(我确实允许,但我在历史记录中找不到它,但我认为它是 semanage fcontext -a -t httpd_sys_content_t '/data/srv/www(/.*)?'和 restorecon -RFvv /data/srv/www 已验证 httpd 守护进程作为 apache 运行,并且它的组是 apache。 (使用 ps -ef|grep httpd 和 id apache)

权限一直向上看起来不错

[root@bilbo public_html]# ls -l /data/srv/www/public_html/test.cgi;

-rwxr-xr-x. 1 user apache 208 Oct  8 02:34 /data/srv/www/public_html/test.cgi
# ls -dl /data/srv/www/public_html/ /data/srv/www/ /data/srv/ /data/srv/ /data/ 
drwxr-xr-x.  7 root root     97 Oct  8 00:26 /data/
drwxr-xr-x.  3 user apache   17 Oct  7 23:34 /data/srv/
drwxr-xr-x.  3 user apache   17 Oct  7 23:34 /data/srv/
drwxr-xr-x.  7 user apache  167 Oct  8 01:40 /data/srv/www/
drwxr-xr-x. 19 user apache 4096 Oct  8 02:34 /data/srv/www/public_html/

我的配置文件

[root@bilbo public_html] # cat /etc/httpd/conf.d/domainname.com.conf

<VirtualHost *:80>
    ServerName domainname.bilbo
    ServerAlias www.domainname.bilbo domainname.bilbo.middleearth www.domainname.bilbo.middleearth
    ServerAdmin webmaster@example.com
    DocumentRoot /data/srv/www/public_html

    <Directory /data/srv/www/public_html>
        Options -Indexes +FollowSymLinks +ExecCGI
        AllowOverride All
        AddHandler cgi-script .cgi
    DirectoryIndex index.html index.cgi index.php
    Require all granted
    </Directory>
    ErrorLog /var/log/httpd/domainname.com-error.log
    CustomLog /var/log/httpd/domainname.com-access.log combined
</VirtualHost>

[root@bilbo public_html]# tail /var/log/httpd/domainname.com-error.log

[Fri Oct 08 09:39:06.491759 2021] [cgid:error] [pid 1204081:tid 139698072696576] [client 10.0.0.10:57760] AH01241: error spawning CGI child: exec of '/data/srv/www/public_html/test.cgi' failed (Permission denied): /data/srv/www/public_html/test.cgi
[Fri Oct 08 09:39:06.492344 2021] [cgid:error] [pid 1204081:tid 139698072696576] [client 10.0.0.10:57760] End of script output before headers: test.cgi

cat /data/srv/www/public_html/test.cgi

#!/usr/bin/perl
use strict;
use warnings;
print "Content-type: text/html\n\n";
print "hello w\n";

sudo -u apache /data/srv/www/public_html/test.cgi

Content-type: text/html

hello w

检查模块

[root@bilbo public_html]# grep -v "^#" /etc/httpd/conf.modules.d/01-cgi.conf

<IfModule mpm_worker_module>
   LoadModule cgid_module modules/mod_cgid.so
</IfModule>
<IfModule mpm_event_module>
   LoadModule cgid_module modules/mod_cgid.so
</IfModule>
<IfModule mpm_prefork_module>
   LoadModule cgi_module modules/mod_cgi.so
</IfModule>

[root@bilbo public_html] # egrep -v '^#|^$' /etc/httpd/conf.modules.d/00-mpm.conf

LoadModule mpm_event_module modules/mod_mpm_event.so

好吧,我正在拉扯我的头发,但是为了咧嘴笑和咯咯笑,我禁用了 selinux (setenforce 0) 并尝试了,它奏效了..... 所以在去wtf之后,我启用了selinux(setenforce 1)

这就是我放入 (IIRC) 以使其工作的内容

# semanage fcontext -m -t httpd_sys_script_exec_t '/data/srv/www(/.*)?'
# restorecon -RFvv /data/srv/www

所以,是的,/var/log/messages 中没有 longs,而 sealert -a /var/log/audit/audit.log 中没有任何内容表明 selinux 正在阻止任何东西....

【问题讨论】:

【参考方案1】:

好吧,我在扯我的头发,但是为了咧嘴笑和咯咯笑,我禁用了 selinux (setenforce 0) 并尝试了,它起作用了.....所以在 wtf 之后,我启用了 selinux (setenforce 1)

这就是我放入 (IIRC) 以使其工作的内容

# semanage fcontext -m -t httpd_sys_script_exec_t '/data/srv/www(/.*)?'
# restorecon -RFvv /data/srv/www

所以,是的,/var/log/messages 中没有 longs,而 sealert -a /var/log/audit/audit.log 中没有任何内容表明 selinux 正在阻止任何东西......

【讨论】:

以上是关于获取内部服务器错误,权限被拒绝在centos linux上的apache下运行cgi的主要内容,如果未能解决你的问题,请参考以下文章

apache配置中的权限被拒绝:[Errno 13]权限被拒绝

markdown 获取错误时为AWS服务器配置:权限被拒绝(公钥)

markdown 获取错误时为AWS服务器配置:权限被拒绝(公钥)

Laravel 权限被拒绝 Centos 7

Php 错误:无法打开流:CentOS 7.1.1503(核心)中的权限被拒绝

Amazon Elastic Beanstalk:错误:[Errno 13] 权限被拒绝