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
に設定しておくともっと幸せになれるかも知れません。
クライアント側設定はこの記事を参考にしてみてください。
いじょう