SSHで接続するGit専用ユーザを作成する

Gitを使うためにSSHで接続するユーザは、通常SSHで接続されると標準的なOSコマンドも実行できてしまいます。
ユーザが管理者だけなら問題ないですが、複数人で開発をおこなう場合はOSコマンドを自由に触られてしまうのは危険です。
これを制限したユーザの作成方法をご紹介します。

リモートリポジトリを作成

複数人でGitを使うために、リモートレポジトリを作成します。
リモートリポジトリを格納するディレクトリはどこでも良いですが、今回は /srv/git 配下とします。

$ cd /srv/git
$ sudo git init --bare ./reponame.git
$ sudo chown adminuser:staff -R ./reponame.git
$ sudo chmod g+s ./reponame.git # ファイルが追加編集されたときに、staffグループの権限で操作されるようにする

ユーザ作成

OSにGit専用のユーザを作成します。
たとえば、今回の場合は gituser というユーザを作成します。

$ sudo useradd -d /home/gituser -m -s /usr/bin/git-shell gituser
$ sudo passwd gituser

あとはstaffグループ権限を付与します。

$ sudo gpasswd -a gituser staff

gpasswdはDebian特有のコマンドらしい。別のOSの場合は、usermod コマンドを使ってください。

これで、Git専用のユーザが作成できました
-s コマンドで /usr/bin/git-shell を指定することが今回のキモです。
git-shellはOSコマンドの使用を制限して、Git操作のためのコマンドのみ実行可能なGit標準提供のShellです。git-shellについては、こちら にも記載があります。

SSHでのアクセス許可

Git特有の話題ではありませんが、SSH経由でGitを使うのでこちらの設定も必要です。

まず、ユーザに秘密鍵と公開鍵を作成してもらいます。
鍵の作成はこんな感じ。

$ ssh-keygen -t rsa -b 4096 -C "username@machinename"

いくつか質問されますが、基本的にはデフォルトでOK。
パスワードは入れても入れなくても良いと思う。パスワードをつけた方がセキュリティ的に正しいというのは間違いないですが、git-flow なんかを使いはじめるとパスワードダイアログがうざったく…(;´Д`)

コマンドで生成されたid_rsa.pubをサーバにアップロードし、~/.ssh/authorization_keysに追記します。
gituserのログインシェルがgit-shellになっているはずなので、作業自体は他のユーザからおこないます。

$ sudo mkdir /home/gituser/.ssh
$ sudo touch /home/gituser/.ssh/authorization_keys
$ cat id_rsa.pub >> /home/gituser/.ssh/authorization_keys
$ sudo chmod 700 /home/gituser/.ssh
$ sudo chmod 600 /home/gituser/.ssh/authorization_keys

これでSSHで接続できるようになったはずです。

リモートレポジトリをクローンする

あとはクローンするだけ。

$ git clone ssh://gituser@remotehost.jp:22/srv/git/reponame.git

接続情報は、クライアントの~.ssh/configに設定しておくともっと幸せになれるかも知れません。
クライアント側設定はこの記事を参考にしてみてください。

いじょう