Apache 2.4 不调用 Perl FastCGI Authenticator 脚本

Apache 2.4 不调用 Perl FastCGI Authenticator 脚本

我的公司目前正在尝试实施一个新的基于 Perl FastCGI 的登录脚本,以便与 Apache 2.4 的mod_fcgid模块配合使用。我们以前的脚本依赖mod_perl于 Apache 的基本身份验证和 Perl 之间的桥梁,但mod_perl在 RHEL 8 中不再可用。

在过去两周里,我做了大量的研究,但还是没能让它工作。我承认我对 Apache 的了解非常有限,我是一名程序员,我所知道的东西基本上都是自学的,所以如果这是件微不足道的事情,我提前道歉。

以下是我的虚拟服务器配置,基于mod_fcgid 文档

<VirtualHost *:80>

        ServerAdmin [email protected]
        DocumentRoot "/var/www/"
        ScriptAlias /cgi-bin/ "/var/www/cgi-bin/teste_fcgi_autenticador/"

        ServerName teste_autenticacao.ourserver.com

        <Directory /var/www/cgi-bin/teste_fcgi_autenticador>
                Options +ExecCGI +FollowSymLinks
                AllowOverride AuthConfig
                AddHandler fcgid-script .cgi .pl
                AuthType Basic
                AuthName "Simple_login"

                #AuthUserFile /var/www/cgi-bin/teste_fcgi_autenticador/.htpasswd
                FcgidAuthenticator /usr/lib64/perl5/Autenticador/autenticador.pl

                Require valid-user
        </Directory>

        ErrorLog /var/log/httpd/error_log
        CustomLog /var/log/httpd/access_log combined

</VirtualHost>

运行上述命令而不使用AuthTypeandAuthName似乎确实有效,如错误日志所示:

mod_fcgid: authenticator requires basic HTTP auth credentials
No authentication done but request not allowed without authentication for /cgi-bin/teste.pl. Authentication not configured?

当我添加这些标签时,日志会抱怨AuthUserFile缺少内容,这意味着它需要的是.htpasswrd文件而不是我的脚本。

当我尝试使用 运行此服务器配置时,它就像一个魅力一样工作,但是从文件而不是我的脚本AuthUserFile验证用户/密码。.htpasswrd

我还尝试将此配置添加到fcgid.conf,如下所示,使用旧的和新的指定,但没有成功:

# This is the Apache server configuration file for providing FastCGI support
# through mod_fcgid
#
# Documentation is available at
# http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html

# Use FastCGI to process .fcg .fcgi & .fpl scripts
AddHandler fcgid-script fcg fcgi fpl

# Sane place to put sockets and shared memory file
FcgidIPCDir /run/mod_fcgid
FcgidProcessTableFile /run/mod_fcgid/fcgid_shm

# Function that handles authentication
#FastCgiAuthenticator /usr/lib64/perl5/Autenticador/autenticador.pl
FcgidAuthenticator /usr/lib64/perl5/Autenticador/autenticador.pl

autenticador.pl以下是我们尝试运行的Perl 脚本- 示例取自mod_authnz_fcgi 文档(该文件及其所在的文件夹均具有完全权限):

#!/usr/bin/perl
use FCGI;
my $request = FCGI::Request();
while ($request->Accept() >= 0) {
    die if $ENV{'FCGI_APACHE_ROLE'} ne "AUTHENTICATOR";
    die if $ENV{'FCGI_ROLE'}        ne "AUTHORIZER";
    die if !$ENV{'REMOTE_PASSWD'};
    die if !$ENV{'REMOTE_USER'};

    print STDERR "This text is written to the web server error log.\n";

    if ( ($ENV{'REMOTE_USER' } eq "foo" || $ENV{'REMOTE_USER'} eq "foo1") &&
        $ENV{'REMOTE_PASSWD'} eq "bar" ) {
        print "Status: 200\n";
        print "Variable-AUTHN_1: authn_01\n";
        print "Variable-AUTHN_2: authn_02\n";
        print "\n";
    }
    else {
        print "Status: 401\n\n";
    }
}

注意:我们不使用mod_authnz_fcgi,因为它在 RHEL 8 的 Apache 2.4 版本中不可用。我们目前只使用脚本 - 从 shell 调用时,该脚本确实按预期工作。如果您知道如何安装和运行此模块,请告诉我。

供参考的系统配置: 运行 RHEL 8 Apache 2.4.37 Perl 5.26.3 的
Amazon AWS 服务器

提前感谢您的任何想法。

相关内容