1

我想做这里描述的事情,但是使用 Drupal 7。

在版本 7 之前,密码作为 md5 哈希值保存在数据库中,因此您可以使用Auth_MySQL.

在这个例子中,我试图gitweb只允许有效的 drupal 用户访问:

文件:/etc/apache2/sites-enabled/default-ssl

    <Directory /usr/share/gitweb>
            AuthName "site name"
            AuthType Basic

            Auth_MySQL On
            Auth_MySQL_Authoritative on

            Auth_MySQL_Host localhost
            Auth_MySQL_Username drupal_user
            Auth_MySQL_Password drupal_password
            Auth_MySQL_DB drupal_database
            Auth_MySQL_Password_Table users
            Auth_MySQL_Username_Field name
            Auth_MySQL_Password_Field pass
            Auth_MySQL_Encryption_Types PHP_MD5
            Auth_MySQL_Password_Clause " AND status=1"
            Auth_MySQL_Empty_Passwords Off

            AuthBasicAuthoritative Off
            AuthUserFile /dev/null

            require valid-user
    </Directory>

查看数据库,select name,pass from users;密码哈希是这样的:$S$DSmryVGZQg2AsLOFBT68xoQaEqPA1TWe4gi2gezh93tAjrbskFUi因为它们是“盐渍的”,而不是像旧版 drupal 中的经典 md5 哈希?

user_check_password($password, $account) 我知道可以使用函数=>api检查密码是否与散列密码匹配。

如何让 Apache 使用 Drupal 7 用户/密码作为身份验证系统?

4

2 回答 2

3

可以注意到,根据 mod-auth-external(或 mod-authnz-external)文档,与验证器通信的默认/首选方法是通过管道方法而不是“环境”。在接受的答案中,http.conf(或 apache2.conf,或您的虚拟主机的 < Directory >)将包含以下行:

DefineExternalAuth drupal pipe /var/www/html/drupal-authentication.php

然后 /var/www/html/drupal-authentication.php 将更改为:

$username = trim(fgets(STDIN));
$password = trim(fgets(STDIN));

最后,如果您从“bootstrap.inc”的日志中收到 REMOTE_ADDR 错误,您可以更改加载引导程序的方式以防止此错误触发。在 /var/www/html/drupal-authentication.php 中:

$_SERVER['HTTP_HOST'] = 'www.example.com';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';

define('DRUPAL_ROOT', dirname(realpath(__FILE__)));
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
于 2013-04-25T18:06:53.217 回答
2

最后,我找到了解决方案:mod-auth-external

安装模块(如果尚未安装)

sudo apt-get install libapache2-mod-authnz-external
sudo a2enmod authnz_external

将此添加到 http.conf

DefineExternalAuth drupal environment /var/www/drupal-authentication.php

将此添加到受保护目录中的 .htaccess 中:

AuthType basic
AuthName "GitWeb"
AuthBasicProvider external
AuthExternal drupal
Require valid-user

编辑 /var/www/drupal-authentication.php (或您的 drupal 安装位置)

#!/usr/bin/php5
<?php

empty($_SERVER['SHELL']) && die('shells only please');

define('DRUPAL_ROOT', '/var/www');
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$username = getenv('USER');
$password = getenv('PASS');

$auth = user_authenticate($username, $password);

if (!$auth) {
  exit(1);
}

exit(0);

此示例正在运行:当访问 /gitweb 目录或其中的任何文件时,浏览器会询问用户名和密码。只有当用户名和密码与drupal 的匹配时,登录才会成功。

安全

我不确定这有多安全。它需要测试。

表现

drupal-authentication.php为每个http请求调用,因此性能较低。mod_authz_socache您可以按照此处所述提高效率

于 2012-12-04T13:02:59.370 回答