Gitリポジトリを複数の人と共有したいが、
サーバにUNIXのユーザアカウントを追加したくない、ということでgitosisを設定した。
gitosis – Git リポジトリ群の管理とアクセス制御 vol.0
gitosis – Git リポジトリ群の管理とアクセス制御 vol.1
このページが大変参考になった。
以下、既存のgitリポジトリをgisosisでアクセス制御するところまで設定できたので記録。
前提
gitサーバ……..gitserver.yamakk.com
クライアントA (MacBookPro 実作業)……..mcbk.local
クライアントB (VMWare上のCentOS5)……..cent5.local
前準備1
mcbk.localとcent5.localそれぞれ公開鍵(~/.ssh/id_dsa.pub)を作る
前準備2
sshのポートを22から変更しているサーバなので、
mcbk.localとcent5.localの.ssh/configにsshのホスト設定をする
HostName gitserver.yamakk.com |
これで
% ssh gitservとするだけで
% ssh -p 12345 gitserv.yamakk.com と同じことができる
以下の表記
mcbk.local% # mcbk.localからコマンドを実行
cent5.local% # cent5.localからコマンドを実行
とする.
実際の設定
gitosis用にユーザ ‘git’ を作成
gitserv% sudo useradd -s /bin/sh -d /home/git git |
これから設定をメインで行うmcbk.localの公開鍵をサーバに転送
mcbk.local% scp ~/.ssh/id_dsa.pub gitserv:/home/yamakk |
gitservでgitosis-initを実行. gitosis,repositoriesの2ディレクトリが出来る
gitserv% sudo -H -u git gitosis-init < /home/yamakk/id_dsa.pub |
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/ |
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/ |
post-updateフックスクリプトのパーミッションが644なので755に変更する
gitserv% chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update |
mcbk.localからgitosis-admin.gitをgit cloneできるか確認. できなければ公開鍵の設定に間違いがあるはず.
mcbk.local% mkdir workspace |
Initialized empty Git repository in /Users/yamakk/workspace/hosting-self/gitosis-admin/.git/ |
remote: Counting objects: 5, done. |
remote: Compressing objects: 100% (4/4), done. |
remote: Total 5 (delta 0), reused 5 (delta 0) |
Receiving objects: 100% (5/5), done. |
今後、このgitosis-adminのなかにあるkeydirと, gitosis.confを編集し、
git commit; git pushすることがアクセス制御の主な作業内容になる。
gitosis-admin/gitosis.confを編集 cent5.localを管理者に追加
mcbk.local% emacs gitosis-admin/gitosis.conf
members = mcbk.local cent5.local |
作業しているmcbk.localのgitosis-admin/keydirに、cent5.localの公開鍵を入れる
この際、公開鍵をgitosis.confに記載したmember名.pubという名前にすること
mcbk.local% scp cent5.local:~/.ssh/id_dsa_pub gitosis-admin/keys/cent5.local.pub |
gitosis-admin以下にある gitosis.conf と keysに加えた変更を git add; git commit; git push
mcbk.local% git add gitosis.conf |
mcbk.local% git add keys/cent5.local.pub |
mcbk.local% git commit -m "account 'cent5.local' added this account is admin" |
[master a286a5d] account 'cent5.local' added this account is admin |
2 files changed, 2 insertions(+), 1 deletions(-) |
create mode 100644 keydir/yamakk@cent5.local.pub |
cent5.localがmcbk.localと同様にgitosis-adminをgit cloneできるか確認する
mcbk.local% ssh cent5.local |
cent5.local% mkdir workspace |
cent5.local% cd workspace |
cent5.local と mcbk.localにそれぞれプライベートなリポジトリを操作する権限を作成
mcbk.local% emacs gitosis-admin/gitosis.conf
members = mcbk.local cent5.local |
mcbk.local% git add gitosis.conf |
mcbk.local% git commit -m "group cent5 and mcbk added. both are private repositories." |
プライベートなリポジトリを作成し、サーバにgit push
mcbk.local% mkdir some-private-repos |
mcbk.local% cd some-private-repos |
mcbk.local% git remote add origin git@gitserv:private/mcbk |
mcbk.local% echo 'This git repositori is private. ' > README |
mcbk.local% git add README |
mcbk.local% git commit -m "Initial commit" |
mcbk.local% git push origin master |
git cloneできるか確認
mcbk.local% git clone git@code:private/cent5.git |
Initialized empty Git repository in /home/yamakk/workspace/cent5/.git/ |
remote: Counting objects: 3, done. |
remote: Total 3 (delta 0), reused 0 (delta 0) |
Receiving objects: 100% (3/3), done. |
ここからは、実際に以前から使っているリポジトリをgitosisにアクセス制御させる。
/home/git/repositories以下に元々redmineと共につかっていたリポジトリ(project_foo.git)のシンボリックリンクを作成
chown -R git:git /var/redmine/git_repos |
gitserv% ln -s /var/redmine/git_repos/project_foo.git /home/git/repositories/ |
mcbk.local% emacs gitosis-admin/gitosis.conf
members = mcbk.local cent5.local |
project_fooに関するアクセス制限を設定したので、git commit; git push
mcbk.local% git add gitosis.conf |
mcbk.local% git commit -m "group project_foo added." |
cent5.localがgit cloneできるか確認
cent5.local% git clone git@code:project_foo.git |
Initialized empty Git repository in /home/yamakk/workspace/project_foo/.git/ |
remote: Counting objects: 280, done. |
remote: Compressing objects: 100% (262/262), done. |
remote: Total 280 (delta 154), reused 0 (delta 0) |
Receiving objects: 100% (280/280), 113.83 KiB, done. |
Resolving deltas: 100% (154/154), done. |
権限を持たないmcbk.localが正しくアクセス拒否されるか確認
mcbk.local% git clone git@code:project_foo.git |
Initialized empty Git repository in /Users/yamakk/workspace/project_foo/.git/ |
ERROR:gitosis.serve.main:Repository read access denied |
fatal: The remote end hung up unexpectedly |
OK
Posted: August 12th, 2010 | Author: yamakk | Filed under: 技術 | Tags: git, gitosis, redmine | No Comments »
Leave a Reply