git push验证从windows设置作者到未知

时间:2009-09-12 00:32:42

标签: git ssh msysgit gitosis tortoisegit

我最近在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文件中提供的名称或者在推送添加为Author时使用的SSH文件的名称。

可能是git的钩子预先接收可以在这里帮助但我不知道如何使用它...有人可以帮忙吗?

谢谢, 勒凯什

更新

感谢您的回答。

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

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

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

任何想法???

此致 勒凯什

更新2:

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

截至目前,我所做的一件事是:要求我的用户使用更新其配置来包含用户名和电子邮件地址。但我必须解决这个问题,因为我不能追逐每个人和用户。

我想要一些类似SVN + SSH的东西,我们在密钥文件中使用tunnled用户名,然后用SVN录制。

3 个答案:

答案 0 :(得分: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用户应该是唯一的,因此您将获得有关登录用户的真实数据。

答案 1 :(得分:3)

在alexandrul的amswers上进一步扩展,当用户访问存储库时,有几个进程正在进行。

  • 用户使用密钥对进行身份验证,通过SSH作为用户“Git”(或任何调用gitosis的用户)连接。可以将其视为具有多个访问主机密钥的用户“Git”。
  • 用户“Git”有一个受限制的帐户,只能访问由gitosis admin管理的存储库。
  • Gitosis使用/ keydir中与已连接用户密钥匹配的公钥名称,并且只允许访问它们所属的那些存储库。这些名称是任意的,只是用于识别密钥的标记。
  • Git不知道也不关心连接用户,只是在gitosis控制下在主机上本地提交作为用户“Git”的提交。
  • 真正的git用户在提交中标识自己,这与SSH认证名称无关。

正如您所发现的,gitosis只能验证用户是否有权连接,并且他们只能访问他们所属的那些存储库。它不会在提交中检查有效名称,并且只要有访问权限,一个用户就可以在存储库中模拟另一个用户。

这是一个隐含的信任问题,即您的用户不会滥用系统,您已经允许他们访问存储库了。如果您怀疑有不当行为,日志将显示在进行特定推送时连接了哪个ssh身份验证用户。

我不确定gitosis是否暴露了连接的SSH用户的名称,因此可以对提交消息进行简单的交叉检查,但我希望有才华的Pythonista可以提出建议。或者,与Gitosis的作者Tommi Virtanen一起提出要求。 TV's cobweb

答案 2 :(得分:2)

问题在于您的Windows用户。如果您要求他们为您提供

的输出
$ git config --list 

在项目文件夹中运行时,您可能会看到他们已省略设置用户名和电子邮件。

要求他们再次在项目文件夹中运行alexandrul建议的命令,因为在服务器端没有太多可以做的事情而没有规避gitosis的设计目的,即提供没有shell帐户的安全git访问。

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

有关最后一点的帮助,请参阅Previous SO question