3

我最近在 Ubuntu 服务器上的专用网络中设置了一个新的 gitosis。网络中的所有其他客户端都是 Windows XP 机器,除了一个 Linux 客户端

我在 gitosis.conf 中有以下设置:

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

我还在 keydir 中放置了 user1.pub、user2.pub 和 user3.pub 密钥文件。密钥是使用 ssh-keygen 在 Ubuntu 服务器上生成并分发给各个用户的。公钥的副本放在 keydir 中。

前两个用户是 Windows XP 用户,他们使用 msysgit + TortoiseGit 使用存储库,一个用户在 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的钩子预接收可以在这里提供帮助,但我不知道如何使用它......有人可以帮忙吗?

谢谢,拉克什

更新:

感谢您的回答。

alexandrul,我没有设置全局设置,这是因为我希望每个用户的信息都应该被真实记录。

静噪,你是对的,我可以看到省略用户名的用户,但我如何强制他们这样做。我可以告诉他们配置他们的本地项目项目并设置用户名和电子邮件地址,但是如果有人使用假用户名或尝试使用其他人的用户名和电子邮件地址,基本上试图冒充其他人怎么办?

这就是为什么我认为为什么不记录私钥文件的名称,例如,我将文件名设置为 user1 的 user1.ppk,类似于 user2 的 user2.ppk。在这种情况下,即使有人试图扮演其他人,他们也不会成功,因为用于检查的关键名称会告诉我真相。

有任何想法吗???

问候, 拉克什

更新 2:

感谢帮助。Squelch,感谢您花时间解释这么多细节。我认为电视的蜘蛛网有很多信息,现在正在阅读。

到目前为止,我所做的一件事是:要求我的用户使用更新他们的配置来包含用户名和电子邮件地址。但我必须解决问题,因为我无法追逐每个用户。

我想要像 SVN+SSH 这样的东西,我们在密钥文件中使用 tunnled 用户名,它会被 SVN 记录下来。

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 admin 管理的存储库。
  • 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 的设计目的(即在没有 shell 帐户的情况下提供安全的 git 访问)的情况下,您在服务器端无能为力。

如果您将来可能有其他 Windows 用户,则可以使用检查有效用户名和电子邮件的预接收挂钩来避免这种情况。它需要做的就是拒绝推送,并发送一条消息让用户首先进行设置。

有关最后一点的帮助,请参阅上一个 SO 问题。

于 2009-09-24T01:47:02.467 回答