SubversionとRedmineのアカウント共通化(プロジェクト毎にグループ化可能)


※2011-12-26 Redmine-1.3.0 に合わせて改訂。

Redmine-1.2からユーザテーブルにsaltが追加されたが、mod_auth_mysqlRedmineのsaltの掛け方に対応していないので、パッチを当てる必要があった。変更点は以下の通り:

  • mod_auth_mysqlにパッチを当てる指示を追加。
  • 「AuthMySQLSaltField salt」を追加。
  • 「AuthMySQLPwEncryption sha1」を「AuthMySQLPwEncryption sha1-rm」に変更。

SubversionRedmineのアカウントを共通化する事例はいくつかあったが、グループ認証を加えようとしたら、AuthMySQLGroup* の設定方法の詳細も設定例もほとんど無くてえらく試行錯誤したのでメモ。

用意するもの

設定

Apacheの設定に以下の設定を加える。

<VirtualHost ......>
  ......

  ### Subversionの設定
  ###
  ### Redmineのユーザテーブルを用いて認証を行う
  <Location 【Subversionリポジトリパスの基点】>
    DAV svn
    SVNParentPath 【Subversionリポジトリ群を格納するディレクトリ】

    AuthName 【Realmの指定】
    AuthType Basic
    Require valid-user

    AuthMySQLEnable On

    # my.cnfの設定に合わせて変更
    AuthMySQLSocket /var/lib/mysql/mysql.sock

    # Redmineのdatabase.ymlの設定に合わせて変更
    AuthMySQLHost 【MySQLサーバホスト名】
    AuthMySQLUser 【MySQLユーザ名】
    AuthMySQLPassword 【MySQLパスワード】
    AuthMySQLDB 【MySQLデータベース名】

    ### Redmineのテーブルとの紐付け
    # Redmineのユーザテーブル
    AuthMySQLNoPasswd Off
    AuthMySQLUserTable users
    AuthMySQLNameField login
    AuthMySQLPasswordField hashed_password
    AuthMySQLSaltField salt
    AuthMySQLPwEncryption sha1-rm
    # グループの設定。プロジェクト識別子をグループとして扱う
    AuthMySQLGroupTable "users, members, projects"
    AuthMySQLGroupCondition "users.id = members.user_id and projects.id = members.project_id"
    AuthMySQLGroupField "projects.identifier"

  ......
  </Location>

  # リポジトリ毎にアクセスできるアカウントを制限したい場合は以下を追加
  <Location 【個々のSubversionリポジトリパス】>
    # 下記のどちらかを設定
    Require user 【RedmineログインID】
    Require group 【Redimeプロジェクト識別子】
  </Location>

  ......
</VirtualHost>

参考資料