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 に入れておかないと毎回起動時にやるのが面倒かな。