3

最近、Ubuntu サーバーのプライベート ネットワークに新しい gitosis をセットアップしました。ネットワーク内の他のすべてのクライアントは、1 つの Linux クライアントを除いて Windows XP マシンです。

gitosis.conf で次のように設定しています。

[group MyProjectTeam]
writable = MyProjectRepo
members = user1 user2 user3

また、user1.pub、user2.pub、および user3.pub キー ファイルを keydir に配置しました。キーは ssh-keygen を使用して Ubuntu サーバー上で生成され、それぞれのユーザーに配布されました。公開鍵のコピーは keydir に配置されます。

最初の 2 人のユーザーは Windows XP ユーザーで、msysgit + TortoiseGit を使用してリポジトリを操作し、1 人のユーザーは Linux マシン上でデフォルトのコマンド ライン バージョンの git を使用してリポジトリにアクセスします。

これですべてが適切にセットアップされ、誰もが期待どおりのことを実行できるようになりました。プル、プッシュ、コミットが可能になりました。ログを確認するときを除いて、すべて問題ないようです!!!

Linuxマシンでuser3を使用して、「git log」コマンドを試したところ、次の出力が得られました。

commit 1b249e239d270b814aab31eed7dc6f04ceceba32
Author: User3 <Admin@ubuntu-server.(none)>
Date:   Fri Sep 11 07:26:58 2009 +0530

    modifed by user3

commit 646f8b11a715273dc26280fc1da2507c997f981c
Author: unknown <Admin@.(none)>
Date:   Fri Sep 11 07:10:56 2009 +0530

    modified by user2

commit 9f86dc7a6bfafc1c1e520d6de3dac7c613ac85cb
Author: unknown <Admin@.(none)>
Date:   Fri Sep 11 06:50:22 2009 +0530

    modified

commit b1a3b64005795f9592aae05c422c70a03dbb9b58
Author: admin <Admin@ubuntu-server.(none)>
Date:   Fri Sep 11 06:18:54 2009 +0530

    test file added by admin

これは正しくありません。このログは、Push の作成者が誰であるかを教えてくれるはずです。私が感じているのは、ユーザー名と電子メールが Linux ユーザー情報にも追加されるため、Linux のユーザーに正しい値を与えることですが、Windows クライアントの場合は正しくないため、名前が正しく表示されません。しかし、Windows マシンで名前を修正したとしても、他のユーザー名をエミュレートすることでこれが損なわれる可能性があります。これを避けるために、ユーザー名に依存したくありません。

SSHファイルで提供された名前がそこに表示されるか、プッシュ中に使用されたSSHファイルの名前が作成者として追加されるようにします。

git のフック pre-receive がここで役立つかもしれませんが、使い方がわかりません... 誰か助けてくれますか?

ありがとう、ラケシュ

アップデート:

回答ありがとうございます。

alexandrul、私はグローバル設定を設定していません。これは、すべてのユーザーの情報を正しくログに記録する必要があるためです。

スケルチ、あなたは正しいです。ユーザー名を省略しているユーザーを確認できますが、そうするように強制するにはどうすればよいですか。ローカル プロジェクト プロジェクトを構成し、ユーザー名と電子メール アドレスを設定するように指示することはできますが、誰かが偽のユーザー名を使用したり、他の誰かのユーザー名と電子メール アドレスを使用しようとしたり、基本的に他の人のなりすましを試みたりした場合はどうなりますか?

そのため、秘密鍵ファイルの名前をログに記録しない理由を考えました。たとえば、user1 のファイル名を user1.ppk に設定し、user2 の user2.ppk に設定しました。そのような場合、誰かが他人を偽装しようとしても成功しないため、チェックに使用されるキー名が真実を教えてくれます。

何か案は???

よろしく、ラケシュ

更新 2:

手伝ってくれてありがとう。Squelch さん、時間を割いて詳しく説明していただきありがとうございます。テレビのクモの巣は情報が多いと思いますので、今読んでみてください。

今のところ、私が行ったことの1つは、ユーザーに構成を更新してユーザー名と電子メールアドレスを含めるように依頼したことです。しかし、ユーザーごとに追跡できないため、問題を解決する必要があります。

キーファイルでtunnledユーザー名を使用し、SVNで記録されるSVN + SSHのようなものが必要です。

4

3 に答える 3

3

次のコマンドでユーザー名を設定しようとしましたか?

// global settings
$ git config --global user.name "FirstName LastName"
$ git config --global user.email "user@example.com"

また

// for a specific project
$ git config user.name "FirstName LastName"
$ git config user.email "user@example.com"

編集:グローバル設定は、HOME環境変数で指定されたフォルダーに保存されます。これは、Windowsユーザーごとに一意である必要があるため、ログインしたユーザーに関する実際のデータがあります。

于 2009-09-17T08:04:26.820 に答える
3

alexandrul の amswers をさらに拡張すると、ユーザーがリポジトリにアクセスするときにいくつかのプロセスが進行しています。

  • ユーザーは、認証用のキーペアを使用して、ユーザー「Git」(または gitosis ユーザーの名前) として SSH 経由で接続します。ホストにアクセスするための複数のキーを持つユーザー「Git」と考えてください。
  • ユーザー「Git」には、gitosis 管理者によって管理されているリポジトリにのみアクセスできる制限付きアカウントがあります。
  • Gitosis は /keydir 内の公開鍵の名前を使用します。これは接続されたユーザーの鍵と照合され、メンバーであるリポジトリのみへのアクセスを許可します。名前は任意であり、キーを識別するための単なるトークンです。
  • Git は、接続されているユーザーを認識したり気にしたりせず、gitosis の制御下にあるホスト上でユーザー "Git" としてコミットをローカルに適用するだけです。
  • 本物の git ユーザーは、コミット内で自分自身を識別します。これは、SSH 認証された名前とは関係ありません。

あなたが発見したように、gitosis は、ユーザーが接続する権利を持っていること、およびメンバーであるリポジトリにのみアクセスできることのみを認証できます。コミット内の有効な名前はチェックされず、アクセス権がある限り、あるユーザーがリポジトリ内で別のユーザーになりすますことは完全に可能です。

ユーザーがシステムを悪用しないことは、あなたの側の暗黙の信頼の問題であり、結局のところ、リポジトリへのアクセスを既に許可しています。不正行為が疑われる場合、特定のプッシュが行われたときにどの ssh 認証済みユーザーが接続されていたかがログから明らかになります。

gitosis が接続された SSH ユーザーの名前を公開して、コミット メッセージに対して簡単なクロス チェックを行うことができるかどうかはわかりませんが、才能のある Pythonista が何かを提案できると思います。または、gitosis の作成者である Tommi Virtanen に機能リクエストを送信してください。 テレビの蜘蛛の巣

于 2009-09-25T15:19:21.100 に答える
2

問題は Windows ユーザーにあります。からの出力を提供するように依頼した場合

$ git config --list 

プロジェクト フォルダー内で実行すると、おそらく、ユーザー名と電子メールの設定が省略されていることがわかります。

alexandrul が提案するコマンドをプロジェクト フォルダー内で実行するように依頼します。gitosis が設計されていること、つまりシェル アカウントなしで安全な git アクセスを提供することを回避せずにサーバー側でできることはあまりないためです。

将来、他の Windows ユーザーがいる可能性が高い場合は、有効なユーザー名と電子メールをチェックする pre-receive フックを使用して、これを回避できます。必要なことは、ユーザーが最初に設定を行うようにというメッセージでプッシュを拒否することだけです。

この最後の点については、前の SO の質問を参照してください。

于 2009-09-24T01:47:02.467 に答える