差分
このページの2つのバージョン間の差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 最新のリビジョン 両方とも次のリビジョン | ||
freebsd:mod_dav_svn_mod_authz_svnでsubversionサーバの構築 [2011-11-11 00:58] Decomo |
freebsd:mod_dav_svn_mod_authz_svnでsubversionサーバの構築 [2015-09-17 14:14] 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では一部変更点があるので[[# | ||
===== インストール ===== | ===== インストール ===== | ||
行 30: | 行 32: | ||
===== httpベースでSubversionリポジトリにアクセス ===== | ===== httpベースでSubversionリポジトリにアクセス ===== | ||
==== http.confの設定 ==== | ==== http.confの設定 ==== | ||
+ | 以下の記述があるか確認。無ければ追加。 | ||
<code apache|h / | <code apache|h / | ||
- | a | + | LoadModule dav_svn_module |
+ | LoadModule authz_svn_module | ||
</ | </ | ||
+ | |||
+ | ==== mod_dav_svnの設定 ==== | ||
+ | <code apache|h / | ||
+ | < | ||
+ | |||
+ | < | ||
+ | DAV svn | ||
+ | SVNListParentPath on | ||
+ | SVNParentPath / | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | === 文法チェック === | ||
+ | Apacheの設定を弄ったら起動前にチェックすると吉。 | ||
+ | <cli> | ||
+ | $ apachectl configtest | ||
+ | Syntax OK | ||
+ | </ | ||
+ | |||
+ | ==== リポジトリ所有者の変更 ==== | ||
+ | <cli> | ||
+ | $ sudo chown -R www:www / | ||
+ | </ | ||
+ | |||
+ | ==== 確認 ==== | ||
+ | Apacheを起動 | ||
+ | <cli> | ||
+ | $ sudo apacheclt start | ||
+ | </ | ||
+ | して、ブラウザからリポジトリ(http:// | ||
+ | |||
+ | 閉じたネットワークで個人リポジトリとして使うなら、これだけでも十分かも(それならsvnserverでいいじゃん!っていうツッコミは無しで)。 | ||
+ | |||
+ | |||
+ | ===== BASIC認証を加える ===== | ||
+ | ==== subversion.confの設定 ==== | ||
+ | 必要な設定を追加する。 | ||
+ | <code apache|h / | ||
+ | < | ||
+ | |||
+ | < | ||
+ | DAV svn | ||
+ | SVNListParentPath on | ||
+ | SVNParentPath / | ||
+ | Satisfy Any # 匿名ユーザーを許可 | ||
+ | Require valid-user | ||
+ | AuthType Basic # ベーシック認証を使う | ||
+ | AuthName " | ||
+ | AuthUserFile / | ||
+ | AuthzSVNAccessFile / | ||
+ | </ | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ==== 正規ユーザーの追加 ==== | ||
+ | '' | ||
+ | <cli> | ||
+ | $ sudo htpasswd -c / | ||
+ | New password: | ||
+ | Re-type new password: | ||
+ | Adding password for user Decomo | ||
+ | </ | ||
+ | 既にファイルがある場合、つまり2人目以降は-cオプションは付けない。さもないと新規作成扱いとなり、以前のユーザー情報が消えてしまう。 | ||
+ | |||
+ | ==== リポジトリへのアクセス制御設定 ==== | ||
+ | '' | ||
+ | < | ||
+ | [groups] | ||
+ | admins = Decomo | ||
+ | devels = dev1, dev2 | ||
+ | testers = tester1, tester2 | ||
+ | |||
+ | [/] | ||
+ | @admins = rw | ||
+ | * = r | ||
+ | |||
+ | [Project1:/ | ||
+ | @devels = rw | ||
+ | |||
+ | [Project2:/ | ||
+ | |||
+ | [Project2:/ | ||
+ | @tester = rw | ||
+ | |||
+ | [secret:/] | ||
+ | Decomo = rw | ||
+ | * = | ||
+ | </ | ||
+ | この例では、 | ||
+ | * adminsグループのメンバーはDecomo、develsグループのメンバーはdev1とdev2、testersグループのメンバーはtester1とtester2。 | ||
+ | * 全リポジトリのデフォルト権限は、ゲストユーザーを含む全ての人が読み込み権限を、adminsグループは加えて書き込み権限を持つ。 | ||
+ | * Project1リポジトリはdevelsグループも書き込み権限を持つ。 | ||
+ | * Project2リポジトリの権限はデフォルトだが、/ | ||
+ | * secretリポジトリはDecomoのみ読み書き可能。他人はアクセス不可。 | ||
+ | という設定になる。 | ||
+ | |||
+ | ==== 確認 ==== | ||
+ | ここまでの設定が上手くいっていれば、Apache再起動後、パスごとのアクセス制御が有効になる。 | ||
+ | |||
+ | ===== SSLを使うようにする ===== | ||
+ | 認証やリポジトリとのやりとりが平文で行われるのはセキュリティ上よろしくないので、SSLを用いて通信路を暗号化する。 | ||
+ | |||
+ | 個人用途のリポジトリなので自己証明書を使う。 | ||
+ | |||
+ | ==== 秘密鍵の生成 ==== | ||
+ | 秘密鍵は漏れてはならないので、ディレクトリのパーミッションに注意。 | ||
+ | <cli prompt="# | ||
+ | # cd / | ||
+ | # mkdir -m 0700 ssl.{key, | ||
+ | # openssl genrsa -aes256 2048 > ssl.key/ | ||
+ | Generating RSA private key, 2048 bit long modulus | ||
+ | .........................................+++ | ||
+ | ...............................................................+++ | ||
+ | e is 65537 (0x10001) | ||
+ | Enter pass phrase: | ||
+ | Verifying - Enter pass phrase: | ||
+ | </ | ||
+ | |||
+ | ==== 証明書署名要求の生成 ==== | ||
+ | <cli prompt="# | ||
+ | # openssl req -new -key ssl.key/ | ||
+ | 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 ' | ||
+ | ----- | ||
+ | Country Name (2 letter code) [AU]:JP | ||
+ | State or Province Name (full name) [Some-State]: | ||
+ | Locality Name (eg, city) []:Yokohama | ||
+ | Organization Name (eg, company) [Internet Widgits Pty Ltd]: | ||
+ | Organizational Unit Name (eg, section) []:CA | ||
+ | Common Name (eg, YOUR name) []:svnsvr | ||
+ | Email Address []: | ||
+ | |||
+ | Please enter the following ' | ||
+ | to be sent with your certificate request | ||
+ | A challenge password []: | ||
+ | An optional company name []: | ||
+ | </ | ||
+ | |||
+ | ==== 自己証明書の生成 ==== | ||
+ | <cli prompt="# | ||
+ | # openssl x509 -in ssl.key/ | ||
+ | Signature ok | ||
+ | subject=/ | ||
+ | Getting Private key | ||
+ | Enter pass phrase for server.key: | ||
+ | </ | ||
+ | |||
+ | ==== 秘密鍵のパスワードの解除 ==== | ||
+ | Apache起動時に秘密鍵のパスワード入力を解除する。 | ||
+ | <cli prompt="# | ||
+ | # openssl rsa -in ssl.key/ | ||
+ | Enter pass phrase for ssl.key/ | ||
+ | writing RSA key | ||
+ | </ | ||
+ | |||
+ | ==== mod_sslの設定 ==== | ||
+ | extraディレクトリに設定サンプルがあるのでコピー。 | ||
+ | <cli prompt="# | ||
+ | $ cd / | ||
+ | $ sudo cp ../ | ||
+ | $ sudo mv subversion.conf subversion.conf.inc | ||
+ | </ | ||
+ | ssl.confから必要な部分のみ抜粋。 | ||
+ | <code apache|h / | ||
+ | SSLRandomSeed startup file:/ | ||
+ | SSLRandomSeed connect file:/ | ||
+ | |||
+ | Listen 443 | ||
+ | |||
+ | AddType application/ | ||
+ | AddType application/ | ||
+ | |||
+ | SSLPassPhraseDialog | ||
+ | |||
+ | SSLSessionCache | ||
+ | SSLSessionCacheTimeout | ||
+ | |||
+ | SSLMutex | ||
+ | |||
+ | < | ||
+ | |||
+ | DocumentRoot "/ | ||
+ | ServerName svnsvr:443 | ||
+ | ServerAdmin メールアドレス | ||
+ | ErrorLog "/ | ||
+ | TransferLog "/ | ||
+ | |||
+ | SSLEngine on | ||
+ | |||
+ | SSLCipherSuite ALL: | ||
+ | |||
+ | SSLCertificateFile "/ | ||
+ | |||
+ | SSLCertificateKeyFile "/ | ||
+ | |||
+ | < | ||
+ | SSLOptions +StdEnvVars | ||
+ | </ | ||
+ | < | ||
+ | SSLOptions +StdEnvVars | ||
+ | </ | ||
+ | |||
+ | BrowserMatch " | ||
+ | | ||
+ | | ||
+ | |||
+ | CustomLog "/ | ||
+ | "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \" | ||
+ | |||
+ | Include / | ||
+ | |||
+ | </ | ||
+ | </ | ||
+ | |||
+ | ===== Apache 2.4 + Subversion 1.8対応 ===== | ||
+ | |||
+ | Apache 2.4 + Subversion 1.8にしたら動かなくなったので修正点を殴り書き。 | ||
+ | |||
+ | ==== mod_dav_svn ==== | ||
+ | |||
+ | / | ||
+ | |||
+ | ==== httpd.conf ==== | ||
+ | |||
+ | 以下のモジュールが有効になっているか確認。 | ||
+ | <code conf> | ||
+ | LoadModule socache_shmcb_module libexec/ | ||
+ | LoadModule ssl_module libexec/ | ||
+ | LoadModule dav_module libexec/ | ||
+ | LoadModule dav_fs_module libexec/ | ||
+ | </ | ||
+ | |||
+ | ==== 220_subversion.conf ==== | ||
+ | |||
+ | サードパーティ製モジュールの読み込みと設定は''/ | ||
+ | |||
+ | Subversion関連の設定は'' | ||
+ | |||
+ | '' | ||
+ | |||
+ | <code conf> | ||
+ | LoadModule dav_svn_module | ||
+ | LoadModule authz_svn_module | ||
+ | LoadModule dontdothat_module | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== ssl.conf ==== | ||
+ | |||
+ | **SSLMutex | ||
+ | |||
+ | ~~DISCUSSION~~ | ||
+ |