Ubuntu下Subversion集成Redmine用户认证

事实上,没有什么事比这件更让人上火。在此之前,一切如此顺利,apt-get和少有的几个小修改就可以解决,而且Google之后可以得来的资料非常丰富。这一件呢?搜索出来的结果居然会导致配置错误。

话说要完成集成认证,首先要安装这个模块libapache2-mod-auth-mysql,因为我安装的Redmine后台使用的是mysql,如果postgresql或sqlite,那就自行找相关的模块吧。

sudo apt-get install libapache2-auth-mysql

创建视图:

CREATE VIEW users_auth_external AS
SELECT u.login AS username,
       u.hashed_password AS passwd,
       GROUP_CONCAT(p.identifier) AS groups
FROM `members` m
INNER JOIN users u ON m.user_id = u.id
INNER JOIN projects p ON m.project_id = p.id
WHERE u.status = 1
GROUP BY username

配置:

下面列出了两种配置方式,新版本是我在Ubuntu 10.10下缺省使用apt-get安装后可用的版本,但是搜索一般得来的结果以第一种居多(最恶的是在这个模块sourceforge的主站上得到的居然是老版本的内容):

# 老版本 新版本
# AuthMySQLEnable On

AuthMySQLHost 192.168.xxx.xxx

AuthMySQLUser redmine

AuthMySQLPassword redmine_password

AuthMySQLDB redmine087

AuthMySQLUserTable “users, members” #注意这儿跟上不一样

AuthMySQLNameField login

AuthMySQLPasswordField hashed_password

AuthMySQLPwEncryption sha1

AuthMySQL On

AuthMySQL_Authoritative on

AuthMySQL_Host localhost

AuthMySQL_DB my_database

AuthMySQL_User my_database_user

AuthMySQL_Password my_database_password

AuthMySQL_Password_Table users_auth_external

AuthMySQL_Group_Table users_auth_external

AuthMySQL_Username_Field username

AuthMySQL_Password_Field passwd

AuthMySQL_Group_Field groups

AuthMySQL_Encryption_Types SHA1Sum

经常搞不懂这种修改有什么意义。因为看起来就是改变了名字而已。也许是开发人员的习惯或者本尊更换以致于见不得不同风格的内容,但是这种变化给人带来的不便却是显而易见的。即便是开源软件,即便是施福于人的东西,这种变更也让人心生不满。虽然渐近不惑,惑日渐多。不过也容易明白,有时候自己也会做错事。或许不惑之说无外乎警醒我们年华已逝,剩下的时间多干点正事儿吧,又或许是说你想怎么干就怎么干,爽才是真正的不惑吧。

参照:

1. 使用Apache为subversion做出认证
2. Authenticate Apache against Redmine with AuthMySQL
3. libapache2-auth-mysql主站

打赏

《Ubuntu下Subversion集成Redmine用户认证》有9个想法

  1. 密码字段的类型AuthMySQL_Encryption_Types的可取值:
    PlainText 明文
    Crypt_DES
    采用标准的基于DES的Unix crypt()调用。
    Crypt_MD5
    采用标准的基于MD5的Unix crypt()调用。
    Crypt
    Check the password via the standard Unix crypt() call, without preference for the hashing scheme employed. This is the generally preferred means of checking crypt()ed passwords, because it allows you to use other schemes which may be available on your system, such as blowfish.
    PHP_MD5
    采用PHP和MySQL中的MD5加密算法,32位字符十六进制表达方式,采用小写字符。
    SHA1Sum
    采用PHP和MySQL中的sha1sum算法产生的输出(40位小写16进制表述)
    MySQL
    采用MySQL的PASSWORD()函数

  2. 博主,新版的配置你在哪里找的呀?
    你知道AuthMySQLUserCondition对应的新版本是啥么?

    另外这种情况好像是Debian系列的命名,不是才改的,一直都那样。。。

  3. 按新规则应该是AuthMySQL_UserCondition吧。你可以试一下,如不行,再试AuthMySQL_User_Condition。

  4. 分组控制基础,可以区分
    Non member
    Developer
    Manager
    Anonymous
    Reporter等Redmine角色,下面的视图去除了非认证用户的支持

    create view users_auth_external
    as
    SELECT u.login AS username,
    u.hashed_password AS passwd,
    GROUP_CONCAT(p.identifier, ‘_’, r.name) AS groups
    FROM `members` m
    INNER JOIN users u ON m.user_id = u.id
    INNER JOIN projects p ON m.project_id = p.id
    INNER JOIN member_roles mr ON m.id = mr.member_id
    INNER JOIN roles r ON mr.role_id = mr.role_id
    WHERE u.status = 1 and not (r.name like ‘Anonymous’) and not (r.name like ‘Non Member’)
    GROUP BY username

  5. 如果仓库名和项目名能够保持一致可以用
    LocationMatch \/svn((\/([^\/]+))(/.*)?)?
    进行匹配控制,这样一个文件即可以解决。

  6. 我最近也在配一个redmine集成svn和hudson认证的配置管理系统,可以用户密码那个字段一直搞不定。以前使用AuthMySQLPwEncryption sha1就好了,这次怎么试都试不对。我到mysql里检测,那个字段的加密算法确实不是sha1,也试了我觉得有可能的加密算法,但是都没找到它到底用的是哪个。我用的是redmine1.2.2版,已经找了几天的问题了。求博主大人能指点一条迷津啊

  7. 新版本的应该是:
    AuthMySQL_Encryption_Types
    取值是:
    SHA1Sum
    你试一下吧。

    上面评论有详细的取值内容。

发表评论

电子邮件地址不会被公开。 必填项已用*标注