请帮助我了解吉托石用户



由于某种原因,我的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 在存储库上,为什么它不使用william_slepecki? 这究竟在哪里获得名称使用?

我只想指出您的 2 个主要错误:

第一个错误:Gitolite 仅使用键目录中键的用户部分("@"前面的那个(。
例如: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将永远不起作用

嗯,我的问题是几个方面的。

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

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

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

谢谢大家。

最新更新