git をセットアップ

VPSを借りている。

VPSを借りたときセットアップする順番で git は後回しでいいと思っていたのだけど、

どうも考え方が変わってきた。git のセットアップは sshd のセットアップ後すぐにやった方がいいかもしれない。

Let's encrypt 絡みで自前のスクリプト使いたいし、外出先でそういったコードも見たい。鯖管日誌も、気になったところはブログに書くにしても、git に置いておいた方がいいし、鯖内でしか使わないソフトウェアやドキュメントのために github を使うのも変だと思う。

っていっても、sudo apt-get install git ってほど単純なハナシじゃないし、gitlabインストールとかいう高尚なハナシでもない(1GBのメモリじゃそもそも無理)

構成としては以下のようにしたい。

  • git のバックエンドはssh
    ->git clone ssh://git@hostname:port/repo.git な使い方したい。root:root にしかchrootできない関係で ssh://git@hostname:port/repo/repo.git みたいにせざるを得ない。
  • git ユーザを切る
  • でもgitusers groupを切るほどでもない。
  • git のリポジトリ作成は git ユーザで行う。git init --bare --shared /home/git/git/repo.git というスタイル。
  • ssh 経由で git にログインした際は、/home/git/git/chroot する。
    ->chroot するディレクトリのオーナーはroot:rootでないといけないらしいので、場所変更。/var/git/
  • vpn ネットワーク経由では password auth あり。
  • 外部ネットワークからのアクセスでは Public Key authのみ。

まずは git ユーザの追加から

$ sudo adduser git

次に vpn ネットワーク経由でpassword auth 許可。

$ sudo vi /etc/ssh/sshd_config

Match LocalAddress 10.0.0.1
    PasswordAuthentication yes

sshd をリスタートして wireguard 時パスワード認証が通るかどうかを確認

wireguard で起動していないときパスワード認証が通らないことを確認

$ sudo wg-quick up wg0

$ sudo /etc/init.d/ssh restart

グローバルから パスワード認証失敗→期待通り。

wireguardからの認証 ubuntu ユーザなら成功するがgit だとダメ。

git ユーザの設定が足りてない気がする。

$ sudo /etc/ssh/ssh_config

->AllowUsers に git を追加

wireguard から パスワード認証→成功→期待通り

git ユーザでログイン

$ mkdir git

$ cd git

鯖管共有用 git を切ってみる。(ドキュメント管理とかね)

$ git init --bare --shared admin.git

$ sudo mkdir -p /var/git

$ sudo chown root:root /var/git

$ sudo chmod 755 /var/git

chroot するディレクトリはroot:root 755 でないといけない縛りがあるようなので…

$ sudo mkdir /var/git/repo

$ sudo chown git:git /var/git/repo

$ su git

$ cd /var/git

$ chmod 755 repo

$ cd repo

$ git init --bare --shared admin.git

$ exit

$ sudo vi /etc/ssh/sshd_config

-> Match User git

       ChrootDirectory /var/git

      追記

$ sudo /etc/init.d/ssh restart

-> git ユーザssh 接続できるも

/bin/bash が見つからないといわれ即死

こっからchrootの壮大な旅が始まる。

$ cd /var/git

マウントポイントの作成

$ sudo mkdir bin lib lib64 usr

$ sudo mkdir usr/bin

$ sudo mount -o bind /bin /var/git/bin

$ sudo mount -o rbind /lib /var/git/lib

$ sudo mount -o rbind /lib64 /var/git/lib64

$ sudo mount -o bind /usr/bin /var/git/usr/bin

で再度git ユーザssh接続確認->まだだめ /dev/nullが無い言われる

$ sudo mkdir /dev

$ sudo mount -o rbind /dev /var/git/dev

-> ssh 接続できるし、クローンできるしpush もpull も通っている感じ。

ただgitでログインしてgit init --bare --share すると、

warning: templates not found /usr/share/git-core/templates

が出る。

$sudo cd /var/git/usr/

$ sudo mkdir -p share/git-core/templates

$ sudo cp /usr/share/git-core/templates/* /var/git/share/git-core/templates/

 なんとなくイケてそうな感じ。

あとはmount -o [r]bind 系の処理をfstab に入れておかないと毎回起動時にやるのが面倒かな。