Apache 2.4 REMOTE_USER 小写

Apache 2.4 REMOTE_USER 小写

我正在处理一个旧系统,该系统使用带有 mod_auth_basic 和 mod_authnz_ldap 的 Apache 在给定目录以及带有 .htaccess 文件的目录中进行身份验证和授权。然后将经过身份验证的用户提供给各种 CGI 脚本。

如果可能的话,我想在 Apache httpd.conf 配置文件中强制所有用户名都为小写。这样,我只需更新一个配置文件并重新启动服务器,就可以跳过更新数十个旧 CGI 文件以强制用户名为小写(最终会用到)。

我想要为其提供小写用户名的 CGI 脚本目录已受保护,AuthType Basic后跟AuthBasicProvider ldap特定AuthLDAPURL于我的情况的 。此身份验证有效。

我最初尝试使用 mod_rewrite,但后来才意识到 mod_rewrite 主要用于重写 URL。

这可能吗?我是否缺少一些可以让我通过 mod_auth_basic 或 mod_authnz_ldap 强制将用户名转换为小写的东西?

答案1

基于https://stackoverflow.com/a/31242711/773806我能够解决这个问题。

  1. 我首先确保所有相关环境中都安装了 mod_perl 2。
  2. 然后我将以下内容添加到我的 httpd.conf 文件中:
PerlRequire /etc/httpd/scripts/startup.pl
PerlHeaderParserHandler MyApache2::ConvertUserToLowercase
  1. 我创建了目录/etc/httpd/scripts/etc/httpd/scripts/MyApache2
  2. 我创建了包含以下内容的/etc/httpd/scripts文件:startup.pl
use lib qw(/etc/httpd/scripts/);
1;
  1. 在其中/etc/httpd/scripts/MyApache2我创建了该文件ConvertUserToLowercase.pm并添加了以下内容:
package MyApache2::ConvertUserToLowercase;

use strict;
use warnings FATAL => 'all';

use APR::Base64;
use Apache2::Access;
use Apache2::Const -compile => qw(OK DECLINED HTTP_UNAUTHORIZED);
use Apache2::RequestRec;
use APR::Table ();

sub handler {
    my $request = shift;
    my ($code, $password) = $request->get_basic_auth_pw();
    if ($code == Apache2::Const::OK) {    
        my $user = lc $request->user;
        my $auth_header = APR::Base64::encode("$user:$password");
        $request->headers_in->{'Authorization'} = "Basic $auth_header";
    }
    return Apache2::Const::OK;
}

1;
  1. 确保所有文件都可以被 Apache 读取。
  2. 然后使用 测试服务器配置httpd -t并重新启动sudo systemctl restart httpd

相关内容