跳转到主要内容
rli 提交于 14 June 2012

原文链接:http://drupal.org/node/156547

您也许把drupal作为您的网站根目录。同时您也许在其他子目录包含有非drupal的内容和应用。如果您想通过基本的http身份认证来保护这些内容,可以通过drupal的身份认证还设置。

如果您要用基本的http身份验证来保护您的drupal站点,您将需要用类似Secure Site的模块。Secure Site模块结合了站点其余部分的基本身份验证,使得drupal和其余部分的身份认证天衣无缝。由于您的用户已经用drupal进行了认证,浏览器将记住http的认证信息,所以您的用户在drupal登录后就不会再看见登录对话框。

要保护其他的drupal外的内容,您需要设置apache来用drupal的用户数据表来进行身份验证。用basic auth和mysql db table是可行的。在这里,我们需要使basic auth检查drupal的用户数据表格来覆盖整个站点。您需要用到apache的mod_auth_mysql模块。

Ubuntu服务器

注意:ubuntu的一些版本在这个包是有错误的,所以您想也许需要自己编译或用dpkg安装最新的.deb文件:https://launchpad.net/ubuntu/+source/mod-auth-mysql

  • 首先安装mod_auth_mysql: sudo apt-get install libapache2-mod-auth-mysql
  • 激活mode_auth_mysql: cd /etc/apache2/mods-enabled sudo ln -s ../mods-available/auth_mysql.load
  • 根据下面的建立.htaccess文件: AuthName "site name" AuthType Basic Auth_MySQL On Auth_MySQL_Authoritative on Auth_MySQL_Host Auth_MySQL_Username Auth_MySQL_Password Auth_MySQL_DB 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

其他环境

  • 首先用后面的命令下载mod_auth_sql(您也可以选择别的站点源): wget http://superb-east.dl.sourceforge.net/sourceforge/modauthmysql/mod_auth_mysql-3.0.0.tar.gz
  • 编译mod_auth_sql [root@server1 mod_auth_mysql-3.0.0]# /usr/sbin/apxs -c -L/usr/lib/mysql -I/usr/include/mysql -lmysqlclient -lm -lz mod_auth_mysql.c
  • 安装mod_auth_sql /usr/sbin/apxs -i mod_auth_mysql.la
  • 添加下面代码到.htaccess文件,使apache应用mod_auth_sql LoadModule mysql_auth_module modules/mod_auth_mysql.so
  • 设置身份验证。您可以在.htaccess文件里设置,但是,在它工作以后,我们最好在httpd.conf文件的site部分来设置它 AuthName "SiteName" AuthType Basic AuthMySQLHost localhost AuthMySQLUser drupaluser AuthMySQLPassword ******* AuthMySQLDB drupal AuthMySQLUserTable users AuthMySQLNameField name AuthMySQLPasswordField pass AuthMySQLPwEncryption md5 AuthMySQLEnable On AuthMySQLUserCondition "status=1" require valid-user

    显然,我们需要用真实的数据来代替AuthMySQLUser, AuthMySQLPassword, AuthMySQLDB的部分。

    AuthMySQLUserCondition是设定好的,因为只要drupal的用户才能访问到被保护的区域。所以,如果您冻结了一个用户,他将不能够访问。这个设定在SQL语句中添加了一个where条件,所以您想提供基于角色的验证,也可以在此设置。

注意,drupal用md5来为密码编码。

这就是全部内容了。全站点的基本身份验证应该在您把设置文件添加到所有子文件夹后完全工作。注意,它将不会替换您本来已有的html登录界面,对话,以及其他的基本验证。但是它将保护您站点需要被保护的接口。进一步的整合工作需要进一步的工作。

注意这个过程并不提供对登录的加密,如果您需要加密,请设置SSL协议。