5

現在、SVN から GIT に切り替えることができるように、GIT リポジトリ サーバーの設定を試しています。ほぼすべてカバーしましたが、問題が残っています。

現在のセットアップは次のとおりです。

  • サーバーはNISクライアントであるため、すべての開発者(および非開発者)はユーザーアカウントと正しいグループを持っています
  • すべてのリポジトリは /var/git/ で作成されます
  • すべてのプル/プッシュは ssh 経由で行われます

これは今のところ完全に機能し、gitosis や gitolite の必要がなくなります。

リポジトリの概要を閲覧できるようにしたいので、pathinfo を含む gitweb をセットアップしました。リポジトリは非公開であるため、Perl AuthenNIS を介して認証を設定しましたが、これは機能しますが、ここで問題が発生します。

すべての開発者がすべてのリポジトリにアクセスできることは望ましくありませんが、gitweb は (apache ユーザーが) 読み取ることができるすべてのリポジトリを表示するだけです。

だから私の質問は:現在ログインしているユーザーがアクセスできるGITリポジトリのみをgitwebに表示させることは可能ですか?

考えられる解決策:

  1. .htaccess によるさらなるアクセス制御。pathinfo はこれを有効にしますが、pathinfo 以外の URL を介してリポジトリにアクセスすることを妨げません (たとえば、/repo.git/ は機能しませんが、/gitweb.cgi?p=repo.git は機能します)。
  2. 完全な gitosis/gitolite 環境をセットアップし、それを gitweb に統合します (本質的には this )。オーバーヘッドが望ましくないため、これを防ぎたい
  3. 認証された HTTP ユーザーとして gitweb を実行します。これにより、すべてのアクセス制御の問題が修正されますが、これを行う方法がわかりません
  4. gitweb との$export_auth_hook組み合わせ$cgi->remote_userは有望に思えますが、perl についての私の理解はそれを使用するにはあまりにも限られています (フックは、表示/エクスポートする前に、ユーザーがリポジトリ ディレクトリにアクセスする権限を持っていることを確認する必要があります)。

3つまたは4つを機能させる方法を知っている人、または別の解決策を持っている人はいますか?

4

1 に答える 1

2

開発者が ssh を使用して自分のユーザー名で (おそらく) リポジトリ サーバーからプッシュ/プルしている場合、おそらくこれを達成する最も簡単な方法は、そのユーザーの ID で実行gitwebする方法を見つけることです。git

たとえば、gitweb実行前に認証フックを追加する方法を見つけます。次に、認証されたユーザー名をgitweb実行するラッパーを追加します。sudo -u $user gitweb.real$user

gitまたは、単にコマンドをラップすることもできます。つまりgitwebsudo -u $user {real-git-path}.

Apache で NIS/PAM に対する認証を実装するには、mod_auth_externalを参照してください。

于 2011-09-04T05:01:29.177 に答える