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
, поскольку он недоступен в сборке Apache 2.4 в RHEL 8. В настоящее время мы используем только сценарий, который работает так, как задумано, когда вызывается из оболочки. Если вы знаете, как установить и запустить этот модуль, пожалуйста, дайте мне знать.
Конфигурация системы для справки:
Сервер Amazon AWS под управлением RHEL 8
Apache 2.4.37
Perl 5.26.3
Заранее спасибо за любые мысли.