このページの翻訳:
ソースの表示
最近の変更サイトマップ

Mac OS X v10.6でSubversionリポジトリのパスベース認証を行う

Snow Leopardからmod_dav_svnが標準で入たようで、WebDAVを用いたSubversion環境を作りやすくなったっぽいので挑戦してみたメモ。

前提条件

  • Mac OS X v10.6.6(試した環境)
  • Subversion 1.6.5(システム標準)
  • Apache 2.2.15(システム標準)
  • プロジェクトごとにリポジトリを作り、プロジェクトごとにアクセス制御出来るようにする。
  • リポジトリ置き場:/doko/soko/svn/repos/
  • SVNサーバアドレス:mysvn.info

httpd.confの編集

/etc/apache2/httpd.confのLoadModuleの最後に以下を追加。

LoadModule dav_svn_module libexec/apache2/mod_dav_svn.so
LoadModule authz_svn_module libexec/apache2/mod_authz_svn.so

mod_dav_svnの設定

/etc/apache2/other/subversion.confでmod_dav_svnの設定をする。拡張子が.confならファイル名は何でもおk。

<IfModule dav_svn_module>

<Location /svn-repos>                  # リポジトリにアクセスする際のURL(http://mysvn.info/svn-repos)の一部になる
    DAV svn
    SVNListParentPath on
    SVNParentPath /doko/soko/svn/repos # リポジトリの実際のパス
</Location>

</IfModule>

リポジトリの所有者の変更

$ sudo chown -R _www:_www /doko/soko/svn/repos

確認

ここまでで問題なく設定出来ていれば、apacheを再起動後、チェックアウトやブラウザからリポジトリの表示が出来るようになっているはず。

現段階では、Subversionサーバにアクセス出来る人なら誰でも、無制限でリポジトリを操作出来るので要注意。

アクセス制御

subversion.confを再度開き、認証に必要なの設定を追加する。

<IfModule dav_svn_module>

<Location /svn-repos>
    DAV svn
    SVNListParentPath on
    SVNParentPath /doko/soko/svn/repos
    Satisfy Any                                # 匿名ユーザーを許可
    Require valid-user                         # 匿名ユーザーが許可されてない操作は正規ユーザーを要求
    AuthType Basic                             # ベーシック認証を使う
    AuthName "Subversion Authorization"        # 認証領域の設定。設定を忘れると500エラーで小一時間苦しむことになるので注意。
    AuthUserFile /doko/soko/svn/htpasswd       # ベーシック認証のユーザーとパスワードファイル
    AuthzSVNAccessFile /doko/soko/svn/authz    # リポジトリのアクセス制御情報ファイル
</Location>

</IfModule>

正規ユーザーの設定

AuthUserFileで指定したファイルにベーシック認証ユーザーを追加する。

$ sudo htpasswd -c /doko/soko/svn/htpasswd Decomo
New password:
Re-type new password:
Adding password for user Decomo

2人目以降、つまりhtpasswdが既にある場合は-cオプションは付けない。さもないと上書きされる。

リポジトリのアクセス制御の設定

AuthzSVNAccessFileで指定したファイルにアクセス制御情報を書く。

[groups]
admins = Decomo

[/]
* = r

[Project1:/]
@admins = rw

[Project2:/]
@admins = rw

[secret:/]
Decomo = rw
* =

SSLの設定

ここからSSLに関する設定。HTTPのままで良ければ以下は設定する必要はない。

秘密鍵の生成

sudoだと上手く行かなかったのでsuする。

$ cd /etc/apache2/other
$ su
# openssl genrsa -aes256 2048 > server.key
Generating RSA private key, 2048 bit long modulus
..................................................................................................+++
..............+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:

公開鍵の生成

# openssl req -new -key server.key >server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Kanagawa
Locality Name (eg, city) []:Yokohama-shi
Organization Name (eg, company) [Internet Widgits Pty Ltd]:PRODUCTION KusoGA
Organizational Unit Name (eg, section) []:CA
Common Name (eg, YOUR name) []:ホスト名
Email Address []:メールアドレス

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: 空白
An optional company name []: 空白

自己証明書の生成

# # openssl x509 -in server.csr -days 3650 -req -signkey server.key > server.crt
Signature ok
subject=/C=JP/ST=Kanagawa/L=Yokohama-shi/O=PRODUCTION KusoGA/OU=CA/CN=ホスト名/emailAddress=メールアドレス
Getting Private key
Enter pass phrase for server.key:

秘密鍵のパスワードの解除

上記方法で生成したキーだとApacheの起動時にパスワードの入力を求められるらしいが、Mac OS Xだと何それ美味しいの状態なのでパスワードを解除しておく。

# mv server.key server.key.bak
# openssl rsa -in server.key.bak -out server.key
Enter pass phrase for server.key.bak:
writing RSA key

subversion.confの編集

subversion.conf.incにリネームし、SSLRequireSSLを追加する。

# mv subversion.conf subversion.conf.inc
# emacs subversion.conf.inc
<file>
<IfModule dav_svn_module>

<Location /svn-repos>
    DAV svn
    SVNListParentPath on
    SVNParentPath /doko/soko/svn/repos
    SSLRequireSSL                              # SSLを必須にする
    Satisfy Any                                # 匿名ユーザーを許可
    Require valid-user                         # 匿名ユーザーが許可されてない操作は正規ユーザーを要求
    AuthType Basic                             # ベーシック認証を使う
    AuthName "Subversion Authorization"        # 認証領域の設定。設定を忘れると500エラーで小一時間苦しむことになるので注意。
    AuthUserFile /doko/soko/svn/htpasswd       # ベーシック認証のユーザーとパスワードファイル
    AuthzSVNAccessFile /doko/soko/svn/authz    # リポジトリのアクセス制御情報ファイル
</Location>

</IfModule>
</file>

mod_sslの設定

/etc/apache2/extra/にmod_ssl用の設定サンプルがあるのでコピーしておく。

$ cd /etc/apache2/other
$ sudo cp ../extra/httpd-ssl.conf ./ssl.conf
$ sudo mv subversion.conf subversion.conf.inc

ssl.confで必要な箇所だけ抜粋。

SSLRandomSeed startup file:/dev/urandom 512
SSLRandomSeed connect file:/dev/urandom 512

Listen 443

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
SSLPassPhraseDialog  builtin
SSLSessionCache        "shmcb:/private/var/run/ssl_scache(512000)"
SSLSessionCacheTimeout  300
SSLMutex  "file:/private/var/run/ssl_mutex"

<VirtualHost *:443>
DocumentRoot "/Library/WebServer/Documents"
ServerName mysvn.info:443
ServerAdmin メールアドレス
ErrorLog "/private/var/log/apache2/error_log"
TransferLog "/private/var/log/apache2/access_log"

SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "/private/etc/apache2/other/server.crt"
SSLCertificateKeyFile "/private/etc/apache2/other/server.key"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/Library/WebServer/CGI-Executables">
    SSLOptions +StdEnvVars
</Directory>

BrowserMatch ".*MSIE.*" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog "/private/var/log/apache2/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

Include /private/etc/apache2/other/subversion.conf.inc
</VirtualHost>

&lt;VirtualHost&gt;の最後でsubversion.conf.incを取り込んでSSL接続時にBasic認証を有効にするとともに、非SSL時はリポジトリにアクセス出来ないようにする。

参考サイト

コメント

コメントを入力. Wiki文法が有効です:
 
mac/mac_os_x_v10.6でsubversionリポジトリのパスベース認証を行う.txt · 最終更新: 2015-01-06 02:51 (外部編集)
CC Attribution-Noncommercial-Share Alike 4.0 International
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0