2

出于某种原因,我的 gitolite 没有附带示例配置文件,而且我似乎在任何地方都找不到,如果有人能找到我的副本,我确定这个问题在该文件中得到了回答,拜托!!

无论如何,gitolite 配置文件的格式很简单,这是我的一个片段

gitolite conf
# please see doc/gitolite.conf.mkd for details on syntax and features

@nmscDevs = dev1@compaid.com dev2@compaid.com dev3@compaid.com
@buildMgr = william_slepecki@compaid.com dev4@compaid.com

repo    gitolite-admin
    RW+     =   gitadmin william_slepecki@compaid.com

repo    grindstone
    RW+ = gitadmin
    RW+ prod$ = @buildMgr
    - prod$ = @nmscDevs
    RW = @nmscDevs

我的 keydir 文件夹中有几个公钥:

keydir/
gitadmin.pub
william_slepecki@compaid.com.pub

我的问题是 gitolite 似乎忽略了为个人用户设置的权限。除非我让 gitadmin 用户完全控制,否则在存储库上没有任何作用(读取、写入等)。然后好像大家都使用了 gitadmin 用户的权限。我像这样克隆存储库

git clone git@server:grindstone.git

但是当我尝试用这样的东西克隆时

git clone 'dev1@compaid.com'@server:grindstone.git

我提示输入密码。每个用户都需要在服务器上拥有一个帐户,以便他们可以通过 ssh 登录吗?

权限在 gitolite 中究竟是如何工作的?我被引导理解 git 用户需要一个帐户才能 ssh 进入服务器,然后一旦 gitolite 接管它使用与 git 请求一起传递的电子邮件来确定权限,我在这里错了吗?我错过了什么?

顺便说一句,这是我的 .ssh/config

host server
     user git
     hostname server
     identityfile ~/.ssh/gitadmin

host server
     user william_slepecki@compaid.com
     hostname server
     identityfile ~/.ssh/id_rsa

更新:我已经升级到最新版本的 gitolite,当我尝试克隆时,我得到了这个

$ git clone git@server:testing.git
Cloning into 'testing'...
FATAL: R any testing gitadmin DENIED by fallthru
(or you mis-spelled the reponame)
fatal: The remote end hung up unexpectedly

我的配置文件现在看起来像这样:

repo testing
    RW+ = william_slepecki 

我的 .ssh 配置没有改变。另外,我的日志中有这个

2012-05-08.13:01:13     19027   ssh     ARGV=gitadmin   SOC=git-upload-pack 'testing.git'       FROM=10.99.5.146
2012-05-08.13:01:13     19027           access(testing, gitadmin, R, 'any'),-> R any testing gitadmin DENIED by fallthru
2012-05-08.13:01:13     19027           trigger,Writable,access_1,ACCESS_1,testing,gitadmin,R,any,R any testing gitadmin DENIED by fallthru

这是我的全局 git 配置的顶部片段

[user]
    name = Willie Slepecki
    email = william_slepecki@compaid.com

为什么这仍然坚持将 gitadmin 放在 repo 上,为什么不使用 william_slepecki?这究竟是从哪里得到要使用的名称的?

4

2 回答 2

2

好吧,我的问题是好几倍。

首先,我误解了 gitadmin 密钥的作用。我认为,因为这是唯一在服务器上拥有实际帐户的用户,因此它需要在所有开发人员工作站上。事实证明这是错误的。gitolite 获取 keydir 目录中的密钥,并在推送时将它们添加到 git/.ssh/authenticated_keys 文件中。这允许 keydir 中的所有密钥作为机器上的用户 git 登录。由于 git 用户没有与之关联的控制台,因此不存在安全漏洞。

其次,我的 ~/.ssh/conf 文件。由于我不明白#1 是如何工作的,我认为 git 以某种方式将电子邮件地址作为用户名作为 git 命令的一部分传递。一旦我弄清楚#1,我就能够清理配置文件以映射 git@server 用户并将我的正常用于其他一切。

一旦理解并解决了这两个问题,所有权限就开始正常工作。我现在已经替换了服务器上的 gitadmin 用户密钥,以使开发人员站上的用户密钥无效,并更新了我所有的开发人员配置。管理层又高兴了。

感谢大家。

于 2012-05-08T18:45:09.240 回答
2

我将指出您的两个主要错误:

第一个错误:Gitolite 仅使用在 keydir 中找到的密钥的用户部分(“@”之前的部分)。
例如: gitolite 只识别一个用户,william_slepecki, 用于密钥william_slepecki@compaid.com.pubwilliam_slepecki@anothercompaid.org.pub,这里唯一的一点是该用户可以使用 2 个不同的密钥进行身份验证,您不能授予密钥权限,只能授予用户权限。

第二个错误:您的 gitolite 服务可能仅由一个普通系统用户提供git,因此应该建立连接git@server.com:repo.git,gitolite 用户不需要或没有系统帐户,只需一个 ssh 密钥,因此连接william_slepecki@server.com:repo.git将永远无法工作

于 2012-05-08T13:14:50.690 回答