mac:mac_os_x_v10.6でsubversionリポジトリのパスベース認証を行う

差分

このページの2つのバージョン間の差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
mac:mac_os_x_v10.6でsubversionリポジトリのパスベース認証を行う [2011-02-19 15:46]
Decomo mac:mac_os_x_v10.6でsubversion_apache_mod_dav_svn_mod_authz_svn環境 renamed to mac_os_x_v10.6でsubversionリポジトリのパスベース認証を行う
mac:mac_os_x_v10.6でsubversionリポジトリのパスベース認証を行う [2015-01-06 11:51] (現在)
行 1: 行 1:
-====== Mac OS X v10.6でSubversion+Apache+mod_dav_svn+mod_authz_svn環境 ======+====== Mac OS X v10.6でSubversionリポジトリのパスベース認証を行う ======
  
-Snow Leopardからmod_dav_svnが標準で入っているようで、WebDAVを用いたSubversion環境を作りやすくなったっぽいので挑戦してみたメモ。+Snow Leopardからmod_dav_svnが標準で入ようで、WebDAVを用いたSubversion環境を作りやすくなったっぽいので挑戦してみたメモ。
  
 ===== 前提条件 ===== ===== 前提条件 =====
行 8: 行 8:
   * Apache 2.2.15(システム標準)   * Apache 2.2.15(システム標準)
   * プロジェクトごとにリポジトリを作り、プロジェクトごとにアクセス制御出来るようにする。   * プロジェクトごとにリポジトリを作り、プロジェクトごとにアクセス制御出来るようにする。
-  * リポジトリ置き場:/Volumes/Home/svn-repos/+  * リポジトリ置き場:/doko/soko/svn/repos/ 
 +  * SVNサーバアドレス:mysvn.info
  
 ===== httpd.confの編集 ===== ===== httpd.confの編集 =====
-/etc/apache2/httpd.conf のLoadModuleの最後に以下を追加。  +''/etc/apache2/httpd.conf''のLoadModuleの最後に以下を追加。  
-<code> +<file>
-$ sudo emacs /etc/apache2/httpd.conf+
 LoadModule dav_svn_module libexec/apache2/mod_dav_svn.so LoadModule dav_svn_module libexec/apache2/mod_dav_svn.so
 LoadModule authz_svn_module libexec/apache2/mod_authz_svn.so LoadModule authz_svn_module libexec/apache2/mod_authz_svn.so
-</code> +</file>
-viを使えないヘタレ野郎です。すいません。+
  
 ===== mod_dav_svnの設定 ===== ===== mod_dav_svnの設定 =====
-/etc/apache2/other/subversion.conf でmod_dav_svnの設定をする。拡張子が.confならファイル名は何でもおk。+''/etc/apache2/other/subversion.conf''でmod_dav_svnの設定をする。拡張子が.confならファイル名は何でもおk。 
 +<file> 
 +<IfModule dav_svn_module> 
 + 
 +<Location /svn-repos>                  # リポジトリにアクセスする際のURL(http://mysvn.info/svn-repos)の一部になる 
 +    DAV svn 
 +    SVNListParentPath on 
 +    SVNParentPath /doko/soko/svn/repos # リポジトリの実際のパス 
 +</Location> 
 + 
 +</IfModule> 
 +</file> 
 + 
 +===== リポジトリの所有者の変更 =====
 <code> <code>
 +$ sudo chown -R _www:_www /doko/soko/svn/repos
 +</code>
 +
 +==== 確認 ====
 +ここまでで問題なく設定出来ていれば、apacheを再起動後、チェックアウトやブラウザからリポジトリの表示が出来るようになっているはず。
 +
 +現段階では、Subversionサーバにアクセス出来る人なら誰でも、無制限でリポジトリを操作出来るので要注意。
 +
 +===== アクセス制御 =====
 +''subversion.conf''を再度開き、認証に必要なの設定を追加する。
 +
 +<file>
 <IfModule dav_svn_module> <IfModule dav_svn_module>
  
行 27: 行 51:
     DAV svn     DAV svn
     SVNListParentPath on     SVNListParentPath on
-    SVNParentPath /Volumes/Home/svn-repos+    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> </Location>
  
 </IfModule> </IfModule>
 +</file>
 +
 +==== 正規ユーザーの設定 ====
 +''AuthUserFile''で指定したファイルにベーシック認証ユーザーを追加する。
 +<code>
 +$ sudo htpasswd -c /doko/soko/svn/htpasswd Decomo
 +New password: 
 +Re-type new password: 
 +Adding password for user Decomo
 </code> </code>
  
-===== リポジトリの所有者変更 =====+2人目以降、つまりhtpasswdが既にある場合は-cオプションは付けない。さもないと上書きされる。 
 + 
 +==== リポジトリのアクセス制御設定 ==== 
 +''AuthzSVNAccessFile''で指定したファイルにアクセス制御情報を書く。 
 + 
 +<file> 
 +[groups] 
 +admins Decomo 
 + 
 +[/] 
 +* = r 
 + 
 +[Project1:/
 +@admins = rw 
 + 
 +[Project2:/
 +@admins = rw 
 + 
 +[secret:/
 +Decomo = rw 
 +* = 
 +</file> 
 + 
 +===== SSLの設定 ===== 
 +ここからSSLに関する設定。HTTPのままで良ければ以下は設定する必要はない。 
 + 
 +==== 秘密鍵の生成 ==== 
 +sudoだと上手く行かなかったのでsuする。
 <code> <code>
-sudo chown -R _www:_www /Volumes/Home/svn-repos+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:
 </code> </code>
-敢えて変な設定をしてなければ、パーミッションは特に弄る必要なし。設定するなら755とかその辺で。 
  
-==== 確認 ==== +==== 公開鍵の生成 ====
-ここまでで問題なく設定出来ていれば、apacheを再起動後、ブラウザからリポジトリにひとまずアクセス出来るようになっているハズ。+
 <code> <code>
-$ sudo httpd -k restart +# openssl req -new -key server.key >server.csr  
-ブラウザで「http://(svnサバのアドレス)/svn-respos/」にアクセスしてみる。+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 []: 空白
 </code> </code>
 +
 +==== 自己証明書の生成 ====
 +<code>
 +# # 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:
 +</code>
 +
 +==== 秘密鍵のパスワードの解除 ====
 +上記方法で生成したキーだとApacheの起動時にパスワードの入力を求められるらしいが、Mac OS Xだと何それ美味しいの状態なのでパスワードを解除しておく。
 +<code>
 +# 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
 +</code>
 +
 +==== subversion.confの編集====
 +subversion.conf.incにリネームし、''SSLRequireSSL''を追加する。
 +<code>
 +# 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>
 +</code>
 +
 +==== mod_sslの設定 ====
 +/etc/apache2/extra/にmod_ssl用の設定サンプルがあるのでコピーしておく。
 +
 +<code>
 +$ cd /etc/apache2/other
 +$ sudo cp ../extra/httpd-ssl.conf ./ssl.conf
 +$ sudo mv subversion.conf subversion.conf.inc
 +</code>
 +
 +ssl.confで必要な箇所だけ抜粋。
 +
 +<file>
 +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>
 +</file>
 +
 +''&lt;VirtualHost&gt;''の最後でsubversion.conf.incを取り込んでSSL接続時にBasic認証を有効にするとともに、非SSL時はリポジトリにアクセス出来ないようにする。
 +
 +===== 参考サイト =====
 +  * [[http://www.maruko2.com/mw/Apache/SSL%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%A8mod_ssl%E3%81%AE%E8%A8%AD%E5%AE%9A|Apache/SSL自己証明書の作成とmod sslの設定 - maruko2 Note.]]
 +  * [[http://www.makies.com/2008/03/44/|家XenでTracを使えるようにしたよ « わすれないように.]]
 +  * [[http://blog.livedoor.jp/knaka01/archives/51410971.html|酔いどれ日誌:Subversion + AuthzSVNAccessFile = Forbidden 403 Error]]
 +  * [[http://www.caldron.jp/~nabetaro/svn/svnbook-1.5-final/html-chunk/svn.serverconfig.httpd.html#svn.serverconfig.httpd.authz.perdir.ex-1|第6章 サーバの設定httpd (Apache HTTP サーバ)]]
 +  * [[http://memo.kappa-lab.com/2007/06/svnwebdavssl.html|SVN+WebDAV+SSLをポートを分けて設定 (memo.kappa-lab.com)]]
 +  * [[http://kay.air-nifty.com/art/2008/09/sslbasic-77ec.html|SSL+Basic認証の設定で意外に苦労しました(技術的な話題): ITスペシャリストが語る芸術]]
 +
 +~~DISCUSSION~~
 +
  • mac/mac_os_x_v10.6でsubversionリポジトリのパスベース認証を行う.1298097978.txt.gz
  • 最終更新: 2011-02-19 15:46
  • by Decomo