linux - 获取内部服务器错误,权限被拒绝在centos linux上的apache下运行cgi
问题描述
服务器错误日志中可能会提供通常的内部服务器错误以及有关此错误的更多信息。
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
猫 /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 和 sealert -a /var/log/audit/audit.log 中没有任何东西表明 selinux 正在阻止任何东西......
解决方案
好吧,我正在拉扯我的头发,但是为了咧嘴笑和咯咯笑,我禁用了 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 和 sealert -a /var/log/audit/audit.log 中没有任何东西表明 selinux 正在阻止任何东西......
推荐阅读
- python - 鸢尾花数据集上的变分自动编码器
- javascript - React Native Firebase 如何让自动文档 ID 增加 1
- c# - 如何在 Blazor WebAssembly 项目中使用 C# 9?
- swift - swift如何让列表从顶部开始而没有填充
- wpf - 如何检测 WPF WebView 控件的鼠标滚轮?
- xcode - 使用 SwiftUI 在 macOS 上阻止 FirebaseApp.configure() 的应用沙盒
- python - 如何将列表附加到另一个依赖于变量的列表以创建嵌套列表?
- css - 最多 2 个居中对齐的项目
- swift - 您可以将多个子路径作为单个路径,并且只填充一次吗?
- php - 我需要在下拉列表中进行多项选择