Назад | Перейти на главную страницу

Apache 2.4 не вызывает скрипт Perl FastCGI Authenticator

Моя компания в настоящее время пытается реализовать новый сценарий входа на основе Perl FastCGI для работы с Apache 2.4. mod_fcgid модуль. Наш старый полагался на mod_perl чтобы сделать мост между базовой аутентификацией Apache и Perl, но mod_perl больше не доступен в RHEL 8.

После тонны исследований за последние 2 недели я не смог заставить его работать. Признаюсь, мои знания Apache довольно ограничены, я программист и в основном научился тому, что знаю, так что заранее извиняюсь, если это что-то тривиальное.

Ниже представлена ​​конфигурация моего виртуального сервера, основанная на документация mod_fcgid:

<VirtualHost *:80>

        ServerAdmin suporte@ourserver.com
        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>

Выполнение вышеуказанного без AuthType и AuthName похоже, работает, как показывает журнал ошибок:

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

Вот сценарий Perl autenticador.pl мы пытаемся бежать - пример взят из документация 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. В настоящее время мы используем только сценарий, который работает должным образом при вызове из оболочки. Если вы знаете, как установить и запустить этот модуль, сообщите мне.

Конфигурация системы для справки:
Сервер Amazon AWS под управлением RHEL 8
Apache 2.4.37
Perl 5.26.3

Заранее благодарим за любые мысли.