Gitolite

提供: ArchWiki
2018年2月6日 (火) 23:43時点におけるKusakata.bot (トーク | 投稿記録)による版 (文字列「http://unix.stackexchange.com/」を「https://unix.stackexchange.com/」に置換)
ナビゲーションに移動 検索に移動

Gitolite を使うことで複数のユーザーが扱う Git リポジトリを簡単に安全にホストすることができます。

インストール

gitolite パッケージをインストールしてください。

設定

gitolite をインストールすると自動的に gitolite ユーザーがシステムに追加され、ホームディレクトリ /var/lib/gitolite が作られます。

SSH による管理者アクセス

管理者アクセスできるように、SSH 公開鍵を /var/lib/gitolite/username.pub に追加してください (username はあなたのユーザー名に置き換えて下さい):

# install -o gitolite -g gitolite ~/.ssh/id_rsa.pub /var/lib/gitolite/username.pub

そして gitolite ユーザーを使って Gitolite のセットアップスクリプトを実行します:

# su - gitolite
$ gitolite setup -pk username.pub

これで gitolite-admin の keydir に公開鍵が配置され、あなたのユーザー名で gitolite-admin リポジトリに読み書きアクセスできるようになります。

コピーした SSH 公開鍵を削除して gitolite ユーザーシェルを終了してください:

$ rm username.pub
$ exit

あなたのユーザーを使って問題が無いか確認することが可能です:

$ ssh gitolite@hostname info
hello username, this is gitolite@hostname running gitolite3 v3.6.2 on git 2.3.3

 R W    gitolite-admin
 R W    testing

リポジトリやユーザーを直接 gitolite としてサーバーに追加してはいけません。特別な gitolite-admin リポジトリを複製することでサーバーを管理します:

$ git clone gitolite@hostname:gitolite-admin

詳しくは Gitolite を参照してください。

Apache による http(s) アクセスの追加 (ベーシック認証)

suEXEC ラッパースクリプトを作成する必要があります。suEXEC のセキュリティ要件を満たすために、スクリプトとディレクトリの所有者は gitolite:gitolite である必要があり、/srv/http 以下に配置しなくてはなりません。ここでは例として、/srv/http/git/cgi-bin ディレクトリを作成します:

# install -o gitolite -g gitolite -d /srv/http/git/cgi-bin

gitolite シェルの suEXEC ラッパーを作成してください。以下の例では、/srv/http/git/cgi-bin/gitolite-suexec-wrapper として保存しています。

/srv/http/git/cgi-bin/gitolite-suexec-wrapper
#!/usr/bin/bash
#
# suEXEC wrapper for gitolite-shell
#

export GIT_PROJECT_ROOT=/var/lib/gitolite/repositories
export GITOLITE_HTTP_HOME=/var/lib/gitolite

exec /usr/lib/gitolite/gitolite-shell

ラッパーに実行可能属性を付与して所有者を gitolite:gitolite に変更:

# chown gitolite:gitolite /srv/http/git/cgi-bin/gitolite-suexec-wrapper
# chmod 0755 /srv/http/git/cgi-bin/gitolite-suexec-wrapper

空のパスワードデータベースファイルを作成、所有者は gitolite:http:

# install -o gitolite -g http -m 0640 /dev/null /srv/http/git/htpasswd

Apache の basic 認証は ssh とは別の仕組みなので、証明書が別に必要になります。htpasswd を使ってウェブユーザーを作成:

# htpasswd /srv/http/git/htpasswd username

以下を Apache の vhost 設定に追加してください:

SuexecUserGroup gitolite gitolite
ScriptAlias /git/ /srv/http/git/cgi-bin/gitolite-suexec-wrapper/

<Directory /srv/http/git/cgi-bin>
    Require all granted
</Directory>

<Location /git>
    AuthType Basic
    AuthName "Git Access"
    AuthBasicProvider file
    AuthUserFile /srv/http/git/htpasswd
    Require valid-user
</Location>

httpd.service を再起動してください。

最後に、前述の gitolite-admin リポジトリの中にある、conf/gitolite.conf を編集して http でアクセスして変更をプッシュしたい全てのリポジトリに R = daemon アクセスルールを追加してください。

ユーザーの追加

ssh ユーザー

アクセス権を与えるユーザーに、あなたに公開鍵を送るよう頼んでください。次のコマンドで ssh の鍵ペアを生成できます:

$ ssh-keygen

それぞれの公開鍵をユーザーの名前に従ってリネームし、.pub 拡張子を付けてください。例えば itaram.pub や john-smith.pub ような形です。ピリオドやアンダースコアも利用することができます。

すべての *.pub ファイルを複製した gitolite-admin リポジトリの keydir の中にコピーしてください。サブディレクトリを使って鍵を整理することもできます。

設定ファイル (複製した gitolite-admin リポジトリの中の conf/gitolite.conf) を編集してください。設定項目や文法などの詳細は gitolite.conf のドキュメント (http://sitaramc.github.com/gitolite/admin.html#conf) を見てください。必要に応じて新しいリポジトリを追加したり、新しいユーザーを追加しパーミッションを与えたりしてください。ユーザーの名前は鍵ファイル名から .pub 拡張子を除いたものと同一にしてください。

$ nano conf/gitolite.conf

変更をコミットしプッシュしてください:

$ git commit -a
$ git push

http(s) ユーザー

http(s) のユーザー管理はシングルユーザーセットアップに適しています。新しいユーザーを追加したり、存在するユーザーのパスワードを変更するには:

# htpasswd /srv/http/git/htpasswd username

Gitosis ライクな ssh ユーザー名

username@server1username@server2 のような同じログインのユーザーを区別したい場合は次を実行してください (gitolite 3.04-1 でテストしています):

  • /usr/lib/gitolite/triggers/post-compile/ssh-authkeys を開き
$user =~ s/(\@[^.]+)?\.pub$//;    # baz.pub, baz@home.pub -> baz

$user =~ s/\.pub$//;              # baz@home.pub -> baz@home

で置き換えてください。

  • authorized_keys ファイルを更新してください。(例えば gitolite-admin リポジトリにプッシュしてください)

トラブルシューティング

gitolite のアカウントでログインできない場合、あなたの ssh の設定によってアカウントがロックされているかもしれません。

SSH and locked users ArticleUnix & Linux StackExchange - How to unlock account for public key ssh authorization, but not for password authorization に述べられているような SSH のセキュリティの強化がこの動作を引き起こすことがあります。

この問題を解決するために sshd_config で PAM を許可するか、アカウントをアンロックしてください:

# usermod -p '*' gitolite
# nano /etc/passwd
...
gitolite:*:16199:0:99999:7:::
...
警告: 空のパスワードを持つアカウントを passwd -u した状態にしておかないでください。パスワード無しでログインを許可することになります。

参照