freebsd:mod_dav_svn_mod_authz_svnでsubversionサーバの構築

差分

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

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

次のリビジョン
前のリビジョン
freebsd:mod_dav_svn_mod_authz_svnでsubversionサーバの構築 [2011-11-11 00:06]
Decomo 作成
freebsd:mod_dav_svn_mod_authz_svnでsubversionサーバの構築 [2015-09-17 14:15] (現在)
Decomo [秘密鍵のパスワードの解除]
行 4: 行 4:
  
   * httpベースでSubversionリポジトリにアクセス。   * httpベースでSubversionリポジトリにアクセス。
-  * httpベースでBASIC認証を用いてSubversionリポジトリにアクセス。 
   * httpベースでBASIC認証を用いてパスごとにSubversionリポジトリのアクセス制御。   * httpベースでBASIC認証を用いてパスごとにSubversionリポジトリのアクセス制御。
   * http+SSLでBASIC認証を用いてパスごとにSubversionリポジトリのアクセス制御。   * http+SSLでBASIC認証を用いてパスごとにSubversionリポジトリのアクセス制御。
行 12: 行 11:
 ^::: | Apache 2.2.21 | ^::: | Apache 2.2.21 |
 ^::: | Subversion 1.7.0 | ^::: | Subversion 1.7.0 |
-^リポジトリパス | /usr/home/svn/repos | +^サーバ名|svnsvr| 
-^認証系のファイル置き場 | /usr/home/svn |+^リポジトリパス | /doko/soko/svn/repos | 
 +^認証系のファイル置き場 | /doko/soko/svn |
  
 +※Apache 2.4では一部変更点があるので[[#Apache 2.4 + Subversion 1.8対応]]を参照のこと。
 +
 +===== インストール =====
 +==== Apache ====
 +<cli prompt="$ ">
 +$ sudo portinstall www/apache22
 +$ sudo echo 'apache22_enable="YES"' >> /etc/rc.conf
 +</cli>
 +
 +==== Subversion ====
 +<cli prompt="$ ">
 +$ sudo portinstall devel/subversion
 +</cli>
 +オプションでMOD_DAV_SVNにチェックが入ってなければチェックする。
 +
 +===== httpベースでSubversionリポジトリにアクセス =====
 +==== http.confの設定 ====
 +以下の記述があるか確認。無ければ追加。
 +<code apache|h /usr/local/etc/apache22/httpd.conf>
 +LoadModule dav_svn_module     libexec/apache22/mod_dav_svn.so
 +LoadModule authz_svn_module   libexec/apache22/mod_authz_svn.so
 +</code>
 +
 +==== mod_dav_svnの設定 ====
 +<code apache|h /usr/local/etc/apache22/Includes/subversion.conf>
 +<IfModule dav_svn_module>
 +
 +<Location /svn-repos>                  # リポジトリにアクセスする時のURL(http://svnsvr/svn-reposという風になる)
 +    DAV svn
 +    SVNListParentPath on
 +    SVNParentPath /doko/soko/svn/repos  # 実際のリポジトリのパス
 +</Location>
 +
 +</IfModule>
 +</code>
 +
 +=== 文法チェック ===
 +Apacheの設定を弄ったら起動前にチェックすると吉。
 +<cli>
 +$ apachectl configtest
 +Syntax OK
 +</cli>
 +
 +==== リポジトリ所有者の変更 ====
 +<cli>
 +$ sudo chown -R www:www /doko/soko/svn/repos
 +</cli>
 +
 +==== 確認 ====
 +Apacheを起動
 +<cli>
 +$ sudo apacheclt start
 +</cli>
 +して、ブラウザからリポジトリ(http://svnsvr/svn-repos/)にアクセスしてみる。設定に間違いがなければ、リポジトリのブラウズが出来るハズ。
 +
 +閉じたネットワークで個人リポジトリとして使うなら、これだけでも十分かも(それならsvnserverでいいじゃん!っていうツッコミは無しで)。
 +
 +
 +===== BASIC認証を加える =====
 +==== subversion.confの設定 ====
 +必要な設定を追加する。
 +<code apache|h /usr/local/etc/apache22/Includes/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>
 +</code>
 +
 +==== 正規ユーザーの追加 ====
 +''AuthUserFile''で指定したファイルにベーシック認証ユーザーを追加する。
 +<cli>
 +$ sudo htpasswd -c /doko/soko/svn/htpasswd Decomo
 +New password: 
 +Re-type new password: 
 +Adding password for user Decomo
 +</cli>
 +既にファイルがある場合、つまり2人目以降は-cオプションは付けない。さもないと新規作成扱いとなり、以前のユーザー情報が消えてしまう。
 +
 +==== リポジトリへのアクセス制御設定 ====
 +''AuthzSVNAccessFile''で指定したファイルに、リポジトリへのアクセス制御設定を記述する。
 +<code>
 +[groups]
 +admins = Decomo
 +devels = dev1, dev2
 +testers = tester1, tester2
 +
 +[/]
 +@admins = rw
 +* = r
 +
 +[Project1:/]
 +@devels = rw
 +
 +[Project2:/]
 +
 +[Project2:/for_tester]
 +@tester = rw
 +
 +[secret:/]
 +Decomo = rw
 +* =
 +</code>
 +この例では、
 +  * adminsグループのメンバーはDecomo、develsグループのメンバーはdev1とdev2、testersグループのメンバーはtester1とtester2。
 +  * 全リポジトリのデフォルト権限は、ゲストユーザーを含む全ての人が読み込み権限を、adminsグループは加えて書き込み権限を持つ。
 +  * Project1リポジトリはdevelsグループも書き込み権限を持つ。
 +  * Project2リポジトリの権限はデフォルトだが、/for_testerディレクトリ以下はtestersグループも書き込み可能。
 +  * secretリポジトリはDecomoのみ読み書き可能。他人はアクセス不可。
 +という設定になる。
 +
 +==== 確認 ====
 +ここまでの設定が上手くいっていれば、Apache再起動後、パスごとのアクセス制御が有効になる。
 +
 +===== SSLを使うようにする =====
 +認証やリポジトリとのやりとりが平文で行われるのはセキュリティ上よろしくないので、SSLを用いて通信路を暗号化する。
 +
 +個人用途のリポジトリなので自己証明書を使う。
 +
 +==== 秘密鍵の生成 ====
 +秘密鍵は漏れてはならないので、ディレクトリのパーミッションに注意。
 +<cli prompt="# ">
 +# cd /usr/local/etc/apache22/
 +# mkdir -m 0700 ssl.{key,crt}
 +# openssl genrsa -aes256 2048 > ssl.key/secret.key
 +Generating RSA private key, 2048 bit long modulus
 +.........................................+++
 +...............................................................+++
 +e is 65537 (0x10001)
 +Enter pass phrase:(パスワード)
 +Verifying - Enter pass phrase:(パスワード)
 +</cli>
 +
 +==== 証明書署名要求の生成 ====
 +<cli prompt="# ">
 +# openssl req -new -key ssl.key/secret.key > ssl.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
 +Organization Name (eg, company) [Internet Widgits Pty Ltd]:PRODUCTION KusoGA
 +Organizational Unit Name (eg, section) []:CA
 +Common Name (eg, YOUR name) []:svnsvr
 +Email Address []:(メールアドレス)
 +
 +Please enter the following 'extra' attributes
 +to be sent with your certificate request
 +A challenge password []:(入力しない)
 +An optional company name []:(入力しない)
 +</cli>
 +
 +==== 自己証明書の生成 ====
 +<cli prompt="# ">
 +# openssl x509 -in ssl.key/server.csr -days 3650 -req -signkey ssl.key/secret.key > ssl.crt/server.crt
 +Signature ok
 +subject=/C=JP/ST=Kanagawa/L=Yokohama/O=PRODUCTION KusoGA/OU=CA/CN=svnsvr/emailAddress=メールアドレス
 +Getting Private key
 +Enter pass phrase for server.key:(秘密鍵で入力したパスワード)
 +</cli>
 +
 +==== 秘密鍵のパスワードの解除 ====
 +Apache起動時に秘密鍵のパスワード入力を解除する。
 +<cli prompt="# ">
 +# openssl rsa -in ssl.key/secret.key -out ssl.key/server.nopasswd.key
 +Enter pass phrase for ssl.key/secret.key:(秘密鍵のパスワード)
 +writing RSA key
 +</cli>
 +
 +==== mod_sslの設定 ====
 +extraディレクトリに設定サンプルがあるのでコピー。
 +<cli prompt="# ">
 +$ cd /usr/local/etc/apache22/Includes
 +$ sudo cp ../extra/httpd-ssl.conf ssl.conf
 +$ sudo mv subversion.conf subversion.conf.inc
 +</cli>
 +ssl.confから必要な部分のみ抜粋。
 +<code apache|h /usr/local/etc/apache22/Includes/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:/var/run/ssl_scache(512000)"
 +SSLSessionCacheTimeout  300
 +
 +SSLMutex  "file:/var/run/ssl_mutex"
 +
 +<VirtualHost _default_:443>
 +
 +DocumentRoot "/usr/local/www/apache22/data"
 +ServerName svnsvr:443
 +ServerAdmin メールアドレス
 +ErrorLog "/var/log/httpd-error.log"
 +TransferLog "/var/log/httpd-access.log"
 +
 +SSLEngine on
 +
 +SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
 +
 +SSLCertificateFile "/usr/local/etc/apache22/ssl.crt/server.crt"
 +
 +SSLCertificateKeyFile "/usr/local/etc/apache22/ssl.key/server.key"
 +
 +<FilesMatch "\.(cgi|shtml|phtml|php)$">
 +    SSLOptions +StdEnvVars
 +</FilesMatch>
 +<Directory "/usr/local/www/apache22/cgi-bin">
 +    SSLOptions +StdEnvVars
 +</Directory>
 +
 +BrowserMatch ".*MSIE.*" \
 +         nokeepalive ssl-unclean-shutdown \
 +         downgrade-1.0 force-response-1.0
 +
 +CustomLog "/var/log/httpd-ssl_request.log" \
 +          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
 +
 +Include /usr/local/etc/apache22/Includes/subversion.conf.inc
 +
 +</VirtualHost>
 +</code>
 +
 +===== Apache 2.4 + Subversion 1.8対応 =====
 +
 +Apache 2.4 + Subversion 1.8にしたら動かなくなったので修正点を殴り書き。
 +
 +==== mod_dav_svn ====
 +
 +/usr/ports/www/mod_dav_svn に分離されたので別途インストール。
 +
 +==== httpd.conf ====
 +
 +以下のモジュールが有効になっているか確認。
 +<code conf>
 +LoadModule socache_shmcb_module libexec/apache24/mod_socache_shmcb.so
 +LoadModule ssl_module libexec/apache24/mod_ssl.so
 +LoadModule dav_module libexec/apache24/mod_dav.so
 +LoadModule dav_fs_module libexec/apache24/mod_dav_fs.so
 +</code>
 +
 +==== 220_subversion.conf ====
 +
 +サードパーティ製モジュールの読み込みと設定は''/usr/local/etc/apache24/modules.d/''の中のコンフィグファイルで行うようになったっぽい。
 +
 +Subversion関連の設定は''220_subversion.conf''をいじる。ファイルがなければ同じ階層にあるサンプルファイルをコピーする。
 +
 +''dav_svn_module''の設定は''/usr/local/etc/apache24/Includes''の方で設定したものがそのまま使えるので、とりあえず''LoadModule''のコメントアウトを解除するだけでおk。
 +
 +<code conf>
 +LoadModule dav_svn_module     libexec/apache24/mod_dav_svn.so
 +LoadModule authz_svn_module   libexec/apache24/mod_authz_svn.so
 +LoadModule dontdothat_module  libexec/apache24/mod_dontdothat.so
 +</code>
 +
 +
 +==== ssl.conf ====
 +
 +**SSLMutex  "file:/var/run/ssl_mutex"**を**Mutex sysvsem default**に書き換え。
 +
 +~~DISCUSSION~~
  
  • freebsd/mod_dav_svn_mod_authz_svnでsubversionサーバの構築.1320937570.txt.gz
  • 最終更新: 2011-11-11 00:06
  • by Decomo