使用 mod_authn_dbd 和 MySQL 的 Apache2 身份验证
Apache2 authentication with mod_authn_dbd and MySQL
在 this howto 之后,我尝试使用 Apache 2.4.10 和 MySQL 5.5.50 设置我的 Debian 8 服务器,以使用 MySQL 作为我的 SVN 的身份验证后端。我收到内部服务器错误,无法弄清楚原因。
首先我添加了文件/etc/apache2/conf-available/dbd_mysql.conf,包含
<IfModule mod_dbd.c>
DBDriver mysql
DBDParams "host=localhost user=THEUSER pass=THEPASS"
DBDMin 2
DBDKeep 4
DBDMax 10
DBDExptime 300
</IfModule>
当然接着
a2enconfig dbd_mysql
我已经建立了一个 MySQL 数据库 "authdb",其中包含 table "mysql_auth",基本上有两个重要的列,"username" 和 "password".特定数据库可供用户访问,我将其称为 "THEUSER" 并具有 SELECT 权限。
然后我在 /etc/apache2/site-available/svn.conf:
中添加了站点特定的配置
DBDParams "dbname=authdb"
<Location /svn/private/>
DAV svn
SVNParentPath /svn/private/
AuthzSVNAccessFile /svn/auth/accesslist_private
SSLRequireSSL
AuthUserFile /dev/null
AuthName "SVN"
AuthType Basic
<IfModule mod_authn_dbd.c>
AuthBasicProvider dbd
AuthDBDUserPWQuery "SELECT password FROM mysql_auth WHERE username = %s"
Require valid-user
</IfModule>
</Location>
此站点配置已经启用,所以我重新启动了 Apache,并在日志文件中发现了一些我完全无法理解的内容:
[dbd:error] [pid 15225] (20014)Internal error: AH00629: Can't connect to mysql: Access denied for user 'A LOCAL SYSTEM USER'@'localhost' (using password: NO)
[dbd:error] [pid 15225] (20014)Internal error: AH00633: failed to initialise
[authn_dbd:error] [pid 15225] [client XX.XX.XX.XX:XYZ] AH01653: Failed to acquire database connection to look up user 'some_user'
每当我尝试访问我的 SVN 存储库时,都会重复出现此错误。
真正奇怪的是日志文件中有一个我绝对不希望在这里找到的用户。它是一个系统用户,与 MySQL 和 Apache 都无关。该用户仅用于使用 SSH 登录。我错过了哪一点?如有任何帮助,我们将不胜感激!
终于找到问题了。显然我的配置文件的内容是在我的站点定义的内容之后加载的。
解决方案如下:我将 dbd_mysql.conf 中的内容移到 /etc/apache2/site-available/svn.conf 的 -Definition 前面,禁用 conf,重新加载 Apache,一切正常。
我还没有弄清楚的是,如果我的配置有问题,因为我预计配置会在依赖于先前配置的站点定义之前加载。
在 this howto 之后,我尝试使用 Apache 2.4.10 和 MySQL 5.5.50 设置我的 Debian 8 服务器,以使用 MySQL 作为我的 SVN 的身份验证后端。我收到内部服务器错误,无法弄清楚原因。
首先我添加了文件/etc/apache2/conf-available/dbd_mysql.conf,包含
<IfModule mod_dbd.c>
DBDriver mysql
DBDParams "host=localhost user=THEUSER pass=THEPASS"
DBDMin 2
DBDKeep 4
DBDMax 10
DBDExptime 300
</IfModule>
当然接着
a2enconfig dbd_mysql
我已经建立了一个 MySQL 数据库 "authdb",其中包含 table "mysql_auth",基本上有两个重要的列,"username" 和 "password".特定数据库可供用户访问,我将其称为 "THEUSER" 并具有 SELECT 权限。
然后我在 /etc/apache2/site-available/svn.conf:
中添加了站点特定的配置DBDParams "dbname=authdb"
<Location /svn/private/>
DAV svn
SVNParentPath /svn/private/
AuthzSVNAccessFile /svn/auth/accesslist_private
SSLRequireSSL
AuthUserFile /dev/null
AuthName "SVN"
AuthType Basic
<IfModule mod_authn_dbd.c>
AuthBasicProvider dbd
AuthDBDUserPWQuery "SELECT password FROM mysql_auth WHERE username = %s"
Require valid-user
</IfModule>
</Location>
此站点配置已经启用,所以我重新启动了 Apache,并在日志文件中发现了一些我完全无法理解的内容:
[dbd:error] [pid 15225] (20014)Internal error: AH00629: Can't connect to mysql: Access denied for user 'A LOCAL SYSTEM USER'@'localhost' (using password: NO)
[dbd:error] [pid 15225] (20014)Internal error: AH00633: failed to initialise
[authn_dbd:error] [pid 15225] [client XX.XX.XX.XX:XYZ] AH01653: Failed to acquire database connection to look up user 'some_user'
每当我尝试访问我的 SVN 存储库时,都会重复出现此错误。
真正奇怪的是日志文件中有一个我绝对不希望在这里找到的用户。它是一个系统用户,与 MySQL 和 Apache 都无关。该用户仅用于使用 SSH 登录。我错过了哪一点?如有任何帮助,我们将不胜感激!
终于找到问题了。显然我的配置文件的内容是在我的站点定义的内容之后加载的。
解决方案如下:我将 dbd_mysql.conf 中的内容移到 /etc/apache2/site-available/svn.conf 的 -Definition 前面,禁用 conf,重新加载 Apache,一切正常。
我还没有弄清楚的是,如果我的配置有问题,因为我预计配置会在依赖于先前配置的站点定义之前加载。