scponly を hgonly 化(Mercurial対応)してみた
Tagged:  •    •  

業務の都合上、外部の特定ユーザ向けにリポジトリを公開する必要があったりするのですが、そのときに悩ましいのがセキュリティです。大抵は ssh で接続してもらうことが多いのですが、以下の要件が求められた場合にちょっと工夫が必要です。

  1. リポジトリ操作のコマンド実行ができること
  2. ログインはできないこと

さてどうしようかということで、scponly をいじってみることにしました。

きちんと行う場合は、chroot でログイン環境自体を制限してしまう方法がありますし、もう少し簡単にやるには ssh で authorized_keys に command="実行許可するコマンド行" として、ログインさせずに特定のコマンドのみを行わせるという方法があります。

例によって私の場合、chroot の環境作るの面倒で嫌です。そうなると ssh を検討するのですが、
この ssh authorized_keys を使う場合、単一のコマンドしか指定できないため、hg コマンドと svn コマンドを併用して許可したい等、自由度が低くなってしまいます。

そこで以前 svn を通すために使ったはずの scponly が使いたくなるのですが、残念ながら弊社で利用しているMercurialのhgコマンドには対応していません(Subversionには対応)でした。

scponly はソースコードに許可するコマンドが記述されていて、設定ファイルなどでの許可リストの指定はできないので、「面倒な chroot やるか?」
と一瞬悩みましたが、他の手段を考えるのも面倒になったし、ここに書くネタになるかと思ったので、とりあえず hg コマンドを許可できるよう実装を追加しました。

もともと現行の scponly は Subversion をサポートしているため、Subversion に関する部分を流用して Mercurial 向けのコードを追加してやります。

patch は こちらにアップしました。バージョン 4.8 (scponly-4.8) での確認済みです。

hg コマンドのサポートを有効にする場合は configure 時に "--enable-hg-compat" をオプションに含めれば有効になります。

hg コマンドを有効にした場合、hg init でのリポジトリ作成コマンドも許可してしまうため、意図しない場所にリポジトリを作成されてしまう恐れがあります。ですので、 scponly とディレクトリの権限を適切に設定して運用することをお勧めします。

追記:
gcc-4 系だとコンパイルエラーになるようです。
以下のパッチ情報もありますので、参考にしてみてください。

http://bugs.gentoo.org/attachment.cgi?id=190891