1

ここで説明されていることを実行したいのですが、Drupal7を使用します。

バージョン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でハッシュされたパスワードと一致するかどうかを確認することが可能であることを私は知っています。

Drupal 7ユーザー/パスワードを認証システムとして使用するApacheを許可するにはどうすればよいですか?

4

2 に答える 2

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.phphttp リクエストごとに呼び出されるため、パフォーマンスが低下します。ここでmod_authz_socache説明されているように、効率を向上させることができます

于 2012-12-04T13:02:59.370 に答える