我在服务器上安装了 Bugzilla 和 Subversion。我想让它们共享帐户。所以我在 Google 上搜索并找到了这篇文章这里。我安装了 mod_auth_mysql,应用了 apache 2.2.3 补丁,但它不起作用。当我查看我的 apache 错误日志时,我发现密码不匹配 :/ 假设我在 bugzilla 中有一个这样的用户:
[电子邮件保护],密码:test1234
当我尝试进入我的 SVN 存储库时,登录表单弹出,但我无法登录。在服务器错误日志中我发现:
[Sat Dec 18 15:25:10 2010] [error] [client 83.4.164.217] user [email protected]: password mismatch: /svn
我还调试了发送到服务器的 mysql 查询,发现了这一点:
101218 15:25:10 85 Connect bugs@localhost on
85 Init DB bugs
85 Query SELECT cryptpassword, length(cryptpassword) FROM profiles WHERE login_name='[email protected]' AND disabledtext = ''
当我手动运行相同的查询时,我得到以下结果:
mysql> SELECT cryptpassword, length(cryptpassword) FROM profiles WHERE login_name='[email protected]' AND disabledtext = '';
+--------------------------------------------------------------+-----------------------+
| cryptpassword | length(cryptpassword) |
+--------------------------------------------------------------+-----------------------+
| Jnm2qVBMbifU7PEZyl+exbYEAsO8SZh1x2ratGhqfikMg1bxYFg{SHA-256} | 60 |
+--------------------------------------------------------------+-----------------------+
1 row in set (0.00 sec)
我的 apache 配置如下:
<Location /svn >
DAV svn
SVNPath /etc/subversion
AuthzSVNAccessFile /home/yuri/.svncontrol
AuthType Basic
AuthMySQLSaltField <>
AuthName "Mwuahahaha this is protected!"
AuthMySQLPwEncryption crypt
AuthMySQLUser bugs
AuthMySQLPassword <some_pass>
AuthMySQLDB bugs
AuthMySQLUserTable profiles
AuthMySQLNameField login_name
AuthMySQLPasswordField cryptpassword
AuthMySQLUserCondition "disabledtext = ''"
Require valid-user
</Location>
相同的配置,但没有AuthMySQLPwEncryption crypt
和AuthMySQLSaltField <>
行,会出现同样的问题
答案1
mod_auth_mysql 的加密算法使用与 Bugzilla 不同的哈希格式,例如加密 SHA-256 密码将如下所示:
$5$rounds=5000$usesomesillystri$KqJWpanXZHKq2BOB43TSaYhEWsQ1Lr5QNyPCDH/Tp.6
除此之外,您的 Linux 发行版不太可能提供带有 sha-256 算法的 crypt 命令。mod_auth_mysql 使用 c 库的 crypt 函数来执行此操作。
最好的办法可能是将 Bugzilla 切换到不太安全的加密算法 (md5),然后设置 mod_auth_mysql 来使用该算法:
AuthMySQLPwEncryption md5