如何使用 Gitolite 控制 Ubuntu 12.04 VPS 上 Git 服务器的访问权限

金钱(警告)

** 状态:** 被贬值

如果您目前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议升级或迁移到支持的 Ubuntu 版本:

** 原因:** Ubuntu 12.04 已于 2017 年 4 月 28 日到期(EOL)并且不再收到安全补丁或更新。

** 相反,请参阅:** 此指南可能仍然有用作为参考,但可能不会在其他Ubuntu版本上工作. 如果可用,我们强烈建议使用为您正在使用的Ubuntu版本撰写的指南。

介绍


Git 是一个很好的分布式版本控制系统,可以用来跟踪任何类型的项目的更改和代码,有时将 git 服务器配置为您的团队的项目是有帮助的。

Gitolite为 git 服务器提供了一个访问控制层,这样您就可以配置基于用户的 git 访问,而不需要随附的操作系统用户帐户。

我们将在Ubuntu 12.04 VPS上安装这些组件,本教程假定您在这个VPS上有常规用户帐户,具有sudo特权。如果您需要帮助,请使用本教程 在Ubuntu上设置用户帐户

安装 去


使用您的常规用户帐户登录您的Ubuntu服务器。

我们将从 Ubuntu 的默认存储库中安装 git:

1sudo apt-get install git-core

我们现在已经安装了 git. 我们将想要配置一些东西以便 git 正常工作。

安装吉他


现在我们已经正确设置了 git,我们可以安装 gitolite 来管理用户访问我们的存储库。

Gitolite 也可在 Ubuntu 的默认存储库中使用。

1sudo apt-get install gitolite

Gitolite 通过 git 管理其配置! 为了正确设置,我们将创建一个操作系统用户,其唯一功能是与 gitolite 交互。

操作系统用户将被命名为git,以便我们的合作者能够轻松记住,我们不会设置密码,以便它只能通过使用su命令访问。

1sudo adduser --system --group --shell /bin/bash --disabled-password git

我们现在有一个名为git的用户,将处理gitolite配置,我们需要能够从正常帐户访问这个用户,我们将通过配置与git管理相关的SSH密钥来做到这一点。

配置 SSH 密钥用于 Git 管理


在您的本地计算机上,您将使用它来管理 git 和 gitolite,如果您还没有这样做,则需要创建一个 SSH 密钥对。

** 注意:如果您已经创建了一个密钥对,您应该跳过这个命令,以避免重写您的 SSH 密钥。

1ssh-keygen -t rsa

接受默认位置,然后按ENTER,以配置基于密码的登录,而无需密码。

将公共密钥复制到 git 服务器,键入:

scp ~/.ssh/id_rsa.pub regular_username@git_server_IP_address:/tmp/git-admin.pub

如果您遵循初始服务器设置文章,则需要允许 SSH 访问 git 用户,您可以通过编辑 /etc/ssh/sshd_config 并将 git 添加到 AllowUsers 指令中来完成此操作。

sudo service ssh restart

配置Gitolite


接下来的步骤将发生在我们的 git 服务器上. 重新登录您的正常用户。

我们可以与我们的git用户登录,以使用我们刚刚转移的公共密钥初始化gitolite。

1sudo su - git

现在,我们可以用以下命令设置 gitolite:

1gl-setup /tmp/git-admin.pub

点击ENTER,将配置拖入您的编辑器. 扫描内容,以确保默认配置满足您的需求。

完成后,保存并退出文件。

如何管理Gitolite


在本地计算机上,您可以开始管理gitolite。

如果您尚未在此计算机上安装 git,则需要安装它:

1sudo apt-get install git-core

首先,我们需要将gitolite信息从我们的git服务器克隆到我们的本地机器:

git clone git@git_server_IP_address:gitolite-admin

这将在当前的目录中创建一个名为gitolite-admin的新目录,在这里,我们可以对我们的访问策略进行更改,然后将这些更改推向 git 服务器。

向 Gitolite 添加新用户


要将用户添加到您的项目中,您将需要他们的公共密钥。Gitolite通过将登录的用户名与具有相同名称的公共密钥联系起来。

在本地机器上,我们可以切换到gitolite-admin目录,看看里面是什么:

1cd gitolite-admin
2ls

1conf keydir

内部有两个目录:conf和keydir.毫不奇怪,keydir包含用户密钥。

你会与John进行通信,并获得他计划使用的公共密钥,然后将该密钥复制到此目录中,如下:

cp /path/to/john's/public/key.pub ~/gitolite-admin/keydir/john.pub

之后,您需要将新公钥添加到 git 存储库中。

首先,我们要配置与管理 git 操作相关联的用户名和电子邮件。

git config --global user.name "your_name_here"
git config --global user.email "[email protected]"

您可能还想配置 git 以使用您选择的编辑器。 输入此命令来指定您的偏好:

git config --global core.editor your_editor_choice

现在,我们可以将新文件添加到 git:

1git add keydir/john.pub

用一个消息承诺更改:

git commit -a -m "New user John added"

将更改推到 git 服务器以保存结果:

1git push

使用 Gitolite 配置访问


当您在最后一节中添加了用户时,您可能已经注意到这样的警告:

1remote: 
2remote: 		***** WARNING *****
3remote:         the following users (pubkey files in parens) do not appear in the config file:
4remote: john(john.pub)

您将收到一个消息,即新用户不在 config 文件中,这意味着用户john已知为 gitolite,但没有为他创建访问。

我们可以通过编辑 ~/gitolite-admin/conf/gitolite.conf 文件轻松地将其添加到我们的配置中。

但是我们会更进一步,给他自己的存储库,我们会创建一个名为johnsproject的存储库,并给他访问权限:

1nano ~/gitolite-admin/conf/gitolite.conf

1repo gitolite-admin
2        RW+     =   git-admin
3
4repo testing
5        RW+     =   @all

正如你所看到的,语法相当简单。

我们指定一个 git 存储库,然后是repo的关键字,然后是其名称,在其下方,我们写入特权类型,等级符号 (=),以及应该获得该访问的用户。

可以用这样的一条线来定义组:

@group_name = user1 user2 user3

之后,我们可以通过引用组来引用一些用户:

repo some_repo
    RW+     = @group_name

一个名为@all的特殊组基于背景,引用所有用户或所有存储库。

允许可以是这些值之一:

  • R:只读访问
  • RW: 可以读取或推新更改. 无法删除在git服务器上已经存在的refs.
  • RW+: 可以在服务器上摧毁或删除refs。

我们可以通过将这些行添加到文件末尾,给john完全访问一个名为johnsproject的新存储库:

1repo johnsproject
2        RW+     =       john

保存并关闭文件。

现在,我们可以用一个新的信息来承诺这一变化:

git commit -a -m "Made John's repo"

最后,将更改推到 git 服务器:

1git push

现在,约翰应该能够用以下命令克隆他的项目存储库,从他创建的公钥和私钥的计算机:

git clone git@git_server_IP_address:johnsproject

结论


您应该能够轻松创建 git 用户,而不必担心每次配置伴随操作系统的用户和权限。

如果您正在管理多个项目与多样化的团队,可能最好设置相应的项目组,也可以将keydir密钥组织成基于项目的子目录,Gitolite 将以相同的方式使用它们,但它们将更容易找到用于管理目的。

By Justin Ellingwood
Published At
Categories with 技术
comments powered by Disqus