SubversionとRedmineのアカウント共通化(プロジェクト毎にグループ化可能)
※2011-12-26 Redmine-1.3.0 に合わせて改訂。
Redmine-1.2からユーザテーブルにsaltが追加されたが、mod_auth_mysqlがRedmineのsaltの掛け方に対応していないので、パッチを当てる必要があった。変更点は以下の通り:
SubversionとRedmineのアカウントを共通化する事例はいくつかあったが、グループ認証を加えようとしたら、AuthMySQLGroup* の設定方法の詳細も設定例もほとんど無くてえらく試行錯誤したのでメモ。
用意するもの
- Apache
- mod_dav_svn
- mod_auth_mysql + Redmine salt対応パッチ
- Subversion
- Redmine (データベースはMySQLでインストールする)
- MySQL
設定
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>
参考資料
- Redmineのアカウントを使って、Subversionの認証を行う on debian lenny
http://www.dabits.net/archives/87 - Redmineのアカウントと、Redmineが参照しているSubversionのアカウントの同期を取る
http://www.masatom.in/pukiwiki/Redmine/TIPS%BD%B8/#v12fcfff - Redmine の ERD を描いてみました
http://d.hatena.ne.jp/kiwamu/20090824/1251123971 - mod_auth_mysql付属ドキュメント (以下のパスはCentOS5.xの場合)
/usr/share/doc/mod_auth_mysql-3.0.0/CONFIGURE