我试图在一台计算机上运行3个独立的域,每个域都与它的用户(通过虚拟主机)一起运行,所以我决定将suExec用于我的任务(该域也与apache一起安装):
在“ apache”用户和组上运行的全局服务器配置。
其中一位用户(我尝试与之访问的用户)的没收:
listen 9999
<VirtualHost *:9999>
ServerName *:9999
DocumentRoot "/home/efpanel/public_html"
ErrorLog "/home/efpanel/err.log"
<IfModule suexec_module>
# SuexecUserGroup efpanel efpanel
</IfModule>
# Directory settings...
...
<IfModule alias_module>
ScriptAlias /cgi-bin/ "/home/efpanel/public_html/cgi-bin/"
</IfModule>
</VirtualHost>
问题:
当对SuexecUserGroup的行进行注释时,正在运行的perl脚本将位于用户“ apache”上-不是我想要的,而是至少可以运行。
但是:如果我取消注释此行,即使是简单的perl脚本也将失败,并显示错误500(内部服务器错误)。检查日志文件,我得到的错误是:
[Sat Dec 21 01:34:56.274872 2019] [cgi:error] [pid 31211] [client 183.28.7.14:7262] End of script output before headers: test.cgi,referer: http://99.99.99.99:9999/
注释:
1)mod_suexec已安装并启用(以下是“ ls -l / usr / sbin | grep suexec”的结果):
-r-x--x--- 1 root apache 15440 Aug 8 07:42 suexec
2)我正在CentOS 7上用PERL编写的CGI运行Apache 2.4 httpd。
3)我知道suEXEC仅适用于脚本文件,但是对我来说足够了-如果我使它能够正常工作。
4)检查配置值,我无法确定suexec日志文件在哪里,并且无法通过“ find / suexec.log”命令找到它。配置值如下(似乎是标准的):
[root@vps cgi-bin]# suexec -V
-D AP_DOC_ROOT="/var/www"
-D AP_GID_MIN=100
-D AP_HTTPD_USER="apache"
-D AP_LOG_SYSLOG
-D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
-D AP_UID_MIN=500
-D AP_USERDIR_SUFFIX="public_html"
我在这里唯一关心的是“ DOC_ROOT”,它是“ / var / www”,与“ / home / efpanel”有共同点-但是:a)我不知道如何在编译后重新配置suexec,b )我认为没有必要,也许“按原样”还可以吗?
5)cgi脚本,cgi-bin目录,public_html目录和/ home / efpanel目录都属于同一用户和组(efpanel),并且具有0755的访问许可,但具有0711访问许可的“ / home / efpanel”除外。
6)我尝试在脚本的第一行中添加“ -w”,如建议的here:
#!/usr/bin/perl -w
my $u=(getpwuid $>)[0];
print "ContentType: text/html;\n\n$u";
exit 0;
如所见,这是一个非常简单的脚本,并且失败。