Perl 脚本无法通过别名运行

Perl 脚本无法通过别名运行

我在 httpd.conf 中创建了以下别名:

alias /aliasedfolder /some/location/on/the/server/folder
<Location /aliasedfolder>
  AddHandler cgi-script .pl
  Options +FollowSymLinks +ExecCGI
  Order allow,deny
  Allow from all
  AllowOverride None
</Location>

问题是我可以在“aliasedfolder”中查看图像,但是当我在那里运行 perl 脚本(例如 /aliasedfolder/script.pl)时出现“文件不存在”错误。

物理 perl 脚本存在于“/some/location/on/the/server/folder”中。

我确保该脚本具有 755 权限。

以下是 perl 脚本的内容:

#!/usr/bin/perl
use CGI qw/:standard/;
print "Content-type:text/html;\n\n";
print "Hello world";
1;

看起来是什么问题?

答案1

检查了 /some/location/on/the/server/folder 的所有权后,我发现所有者是“root”用户名,而我试图通过 Apache 上具有不同用户名的帐户(域名)访问该文件夹,例如 domain.com/aliasedfolder/script.pl

suexec 机制作为一项安全功能阻止了此操作。因此,我将 /some/location/on/the/server/folder 及其内部 script.pl 文件的所有权从“root”更改为我的帐户的用户名和组,现在一切正常。

这将阻止指向我的服务器的其他域访问此文件(script.pl),因为 suexec 阻止多个域(具有不同的用户名)共享单个文件。

我可以完全禁用 suexec 机制,但出于安全考虑,有人建议我不要这样做。

感谢所有提供帮助的人。

答案2

您是否尝试过使用

<Directory "/some/location/on/the/server/folder" >
    AddHandler cgi-script .pl
    ....
    AllowOverride None
</Directory>

您是否采取了任何安全措施,例如执行或者SELinux,如果您的脚本需要额外的所有权和扩展属性调整。

相关内容