请帮助我了解gitolite用户

时间:2012-05-08 12:52:36

标签: git gitolite

出于某种原因,我的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

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

gitolite的权限究竟如何?我领先了解git用户需要一个帐户ssh到服务器,然后一旦gitolite接管它使用与git请求一起传递的电子邮件来确定权限,我在这里错了吗?我错过了什么?

BTW,这是我的.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会在回购中,为什么不使用william_slepecki?这到底有什么名称可供使用?

2 个答案:

答案 0 :(得分: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将无法正常工作

答案 1 :(得分:2)

好吧,我的问题有几个了。

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

其次,我的〜/ .ssh / conf文件。由于我不明白#1是如何工作的,我认为git以某种方式将电子邮件地址作为用户名作为git命令的一部分传递。一旦我找到了#1,我就能够清理配置文件以映射git @ server用户并使用我的法线来处理其他所有内容。

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

谢谢大家。