■目的
自分で立てたgitサーバーに対してhttps プロトコルでクライアント認証アクセスする
■インストール
Apache2はインストール済みとする
・Gitolite3インストール
apt-get install gitolite3
インストール中に管理者の公開鍵パスを要求されるので適当にSSHログインできる公開鍵を指定する
→これは後で変更も可能なので適当でOK
インストールが完了するとGitolite3のファイル群は /usr/share/gitolite3
環境は /var/lib/gitolite3 に作成される。
■Apache2準備
まずはApache2の準備
・ apache-suexec-custom のインストール
apt-get install apache-suexec-custom
a2enmod suexec
・mod_cgid 有効化
a2enmod cgid
・gitolite ラッパースクリプト用意
DocumentRoot が /var/www だとしたら /var/www/git というフォルダを作成する。
ここにスクリプトを追加する。 gitolite-suexec-wrapper.sh とする。
→スクリプトを置くフォルダは/var/www/git でなくても良いが、DocumentRootで指定したフォルダのサブフォルダでないとsuexecがスクリプトを実行できないので注意
(gitolite-suexec-wrapper.sh)
===============================================================================
#!/bin/bash
export GIT_PROJECT_ROOT="/var/lib/gitolite3/repositories"
export GITOLITE_HTTP_HOME="var/lib/gitolite3"
exec /usr/share/gitolite3/gitolite-shell
===============================================================================
chown gitolite3:gitolite3 gitolite-suexec-wrapper.sh
chmod +x /var/gitolite/gitolite-suexec-wrapper.sh
として所有者、実行権限を変更する。
・SSLクライアント認証設定
VirtualHost の設定に以下を追加
===============================================================================
SSLEngine on
SSLCertificateFile <サーバー証明書のパス>
SSLCertificateKeyFile <サーバ秘密鍵のパス>
SSLCACertficateFile <CA証明書のパス>
SSLVerifyClient require
SSLUserName SSL_CLIENT_S_DN_CN
SuexecUserGroup gitolite3:gitolite3
ScriptAlias /git /var/www/git/gitolite-suexec-wrapper.sh
<Location /git>
Order allow,deny
Allow from all
</Location>
===============================================================================
CAはオレオレCAで良い。SSLUserName設定はクライアント証明書のCNをユーザー名として扱うことの宣言。
環境変数REMOTE_USERもこれによって証明書CNに置き換わる。
■Gitolite3準備
次にGitolite3側の準備
・リポジトリアクセス権設定
Gitolite3のインストールによってgitolite-admin リポジトリが自動で生成されているはず。
まずはこれをローカルでclone する。そして conf/gitolite.conf を編集する。
例えばtesting リポジトリの設定が以下のようになっていたら
repo testing
RW+ = @all
↓
repo testing
RW+ = @all
R = daemon
というようにdaemonユーザーに対してRead権限を付与する。こうしないとApacheからGitolite3管理のリポジトリが読み出せない。Apacheからアクセスしたい全てのリポジトリにR = daemonを付与する。
変更したらcommit, push して反映
また当然であるが、クライアント証明書のCNと同じ名前のアクセス権限がリポジトリに設定されている必要がある。例えば、developというメンバーがクライアント認証でアクセスする場合にはtesting リポジトリの例で言うと
repo testing
RW = develop
R = daemon
とする。このときtestingリポジトリにApacheからはクライアント証明書のCNがdevelopでないとリポジトリにアクセスできない。
■クライアント側設定
・git設定ファイルの変更
(Linux)
~/.gitconfig
(Windows)
C:/Users/<ユーザー名>/.gitconfig
以下の設定を追記する
===============================================================================
[http]
sslCert = <クライアント証明書ファイルパス>
sslKey = <クライアント秘密鍵ファイルパス>
sslCaInfo = <CA証明書ファイルパス>
sslVerify = false
===============================================================================
最後のsslVefiry = false はオレオレCAの場合に必要。ちゃんと認証機関からCA証明書を取得しているなら不要。
■実行
以上の設定が完了していれば以下のコマンドでリポジトリの取得が可能なはず。
git clone https://<ドメイン名>/git/<リポジトリ名>
0 件のコメント:
コメントを投稿