Контроль доступа к серверу Git при помощи Gitolite на Ubuntu 12.04

Git – это распределенная система контроля версий, которая позволяет отслеживать изменения кода проектов. Многие разработчики используют серверы Git для размещения собственных проектов.

Gitolite управляет доступом к серверу Git, позволяя настроить пользовательский доступ к Git без необходимости создавать дополнительные учетные записи в операционной системе с отдельным шеллом. Таким образом, все пользователи, имеющие доступ к Git, могут получить соответствующие привилегии, при этом не подвергая сервер опасности.

В данном руководстве показано, как установить эти компоненты на виртуальный выделенный сервер Ubuntu 12.04. Для этого вам понадобится учетная запись пользователя с расширенными привилегиями (sudo).

Примечание: более подробную информацию о пользователях с расширенными привилегиями можно найти в руководстве «Начальная настройка сервера Ubuntu 12.04».

Установка Git

Систему Git можно быстро установить из стандартного репозитория Ubuntu:

sudo apt-get install git-core

Готово! Настройте Git согласно требованиям сервера.

Установка Gitolite

Теперь, когда Git настроен и готов к работе, установите Gitolite для управления доступом пользователей к репозиторию.

Пакет Gitolite тоже можно найти в стандартном репозитории Ubuntu. Для установки используйте команду:

sudo apt-get install gitolite

Конфигурации Gitolite можно контролировать при помощи Git! Чтобы настройки работали должным образом, нужно создать пользователя операционной системы, единственной функцией которого будет взаимодействие с gitolite.

Для простоты назовем такого пользователя git (конечно, можно выбрать любое другое удобное имя пользователя). Этому пользователю не понадобится пароль, он будет доступен только с помощью команды su.

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

Пользователь по имени git, который будет обрабатывать конфигурации gitolite. Необходимо иметь доступ к этому пользователю с обычного (не-рутового) аккаунта. Для этого нужно создать SSH-ключ, связанный с администратором Git.

Создание SSH-ключа для администратора Git

На локальной машине, которая будет использоваться для управления Git и Gitolite, нужно создать пару SSH-ключей.

Примечание: если пара SSH-ключей уже существует, пропустите нижеприведенную команду, чтобы избежать перезаписи ключей SSH.

ssh-keygen -t rsa

Согласитесь с предложенным стандартным местоположением файлов и нажмите ENTER, чтобы настроить авторизацию на основе ключей.

Скопируйте открытый ключ на сервер Git, набрав:

scp ~/.ssh/id_rsa.pub username@IP_адрес_сервера_git:/tmp/git-admin.pub

Если вы следовали руководству по начальной настройке сервера, на данном этапе нужно будет открыть пользователю git SSH-доступ. Для этого отредактируйте /etc/ssh/sshd_config и добавьте пользователя git в директиву AllowUsers, а затем перезапустите SSH-сервер:

sudo service ssh restart

Настройка Gitolite

Теперь нужно вернуться на сервер Git.

Можно войти как созданный ранее пользователь git, чтобы инициализировать gitolite с помощью только что перемещенного открытого ключа.

sudo su - git

Теперь можно настроить gitolite при помощи следующей команды:

gl-setup /tmp/git-admin.pub

Нажмите Enter, чтобы открыть конфигурации в редакторе. Просмотрите содержимое, чтобы убедиться, что стандартные конфигурации соответствуют потребностям сервера. В случае необходимости их всегда можно изменить позже.

Затем сохраните и закройте файл.

Администрирование Gitolite

Вернувшись на локальный компьютер, можно приступать к управлению Gitolite.

Если на локальной машине еще не установлена система git, запустите команду:

sudo apt-get install git-core

Для начала нужно клонировать данные gitolite с сервера git на локальную машину:

git clone git@IP_адрес_сервера_git:gitolite-admin

Это создаст в текущем каталоге новый каталог по имени gitolite-admin, при помощи которого можно вносить изменения в политику доступа, а затем переносить эти их на сервер Git.

Добавление пользователей в Gitolite

Чтобы добавить пользователя в проект, нужен открытый ключ этого пользователя. Gitolite связывает имя пользователя с одноименным публичным ключом. Для примера предположим, что есть некий пользователь alex.

На локальной машине перейдите в каталог gitolite-admin и просмотрите его содержимое:

cd gitolite-admin
ls
conf    keydir

Как видите, внутри есть два каталога: conf и keydir. Конечно, очевидно, что каталог keydir содержит ключи пользователей. На данном этапе пользователь alex должен предоставить свой публичный ключ, после чего его нужно скопировать в этот каталог:

cp /путь/к/публичному/ключу/alex.pub ~/gitolite-admin/keydir/john.pub

После этого нужно добавить новый открытый ключ в репозиторий Git.

Для начала нужно указать имя пользователя и адрес электронной почты, которые будут связаны с административными действиями Git. Для этого введите следующие команды:

git config --global user.name "ваше_имя"
git config --global user.email "ваш_email@address.com"

Кроме того, Git можно задать любой удобный текстовый редактор, это делается при помощи команды:

git config --global core.editor текстовый_редактор

Теперь можно добавить в Git новый файл.

git add keydir/john.pub

Зафиксируйте изменения, отправив сообщение о коммите:

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

Выполните git push, чтобы передать изменения на сервер git и сохранить результат:

git push

Настройка доступа при помощи Gitolite

При добавлении пользователя в предыдущем разделе могло появиться следующее предупреждение:

remote:
remote:         ***** WARNING *****
remote:         the following users (pubkey files in parens) do not appear in the config file:
remote: alex (alex .pub)

В сообщении говорится о том, что новый пользователь не внесен в конфигурационный файл; это значит, что gitolite известно о существовании пользователя alex, но этот пользователь не сможет получить доступ к серверу.

Чтобы исправить это, нужно просто внести пользователя alex в конфигурационный файл ~/gitolite-admin/conf/gitolite.conf.

Теперь попробуйте создать для пользователя alex его собственный проект под названием alexproject, а затем откройте доступ пользователю alex, как сказано выше:

nano ~/gitolite-admin/conf/gitolite.conf
repo    gitolite-admin
RW+     =   git-admin
repo    testing
RW+     =   @all

Как видите, синтаксис достаточно прост.

В данном фрагменте кода указывается репозиторий git с ключевым словом repo, после которого идет имя репозитория. Ниже нужно указать тип привилегий, символ = и имена пользователей, которые имеют доступ к репозиторию. Группы можно определить так:

@имя_группы = user1 user2 user3

Можно просто сослаться на группу, тем самым открыв доступ всем пользователям, состоящим в этой группе:

repo    some_repo
RW+     = @имя_группы

Особая группа @all описывает всех пользователей или все репозитории (в зависимости от контекста).

Привилегии можно задать при помощи одного из этих значений:

  • R: доступ только для чтения
  • RW: доступ на чтение и внесение изменений. При этом пользователи не смогут удалять уже существующие на сервере рефы.
  • RW+: право на чтение, внесение изменений и удаление рефов.
  • : нет никакого доступа к контенту.

Давайте откроем пользователю alex полный доступ к новому репозиторию alexproject, внеся в нижнюю часть файла следующие строки:

repo    johnsproject
RW+     =       john

Сохраните и закройте файл.

Зафиксируйте изменения, отправив новое сообщение о коммите:

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

Передайте изменения на сервер при помощи команды:

git push

Теперь alex может клонировать репозиторий проекта с компьютера, на котором были созданы публичный и закрытый ключи, при помощи следующей команды:

git clone git@IP_адрес_сервера_git:johnsproject

Заключение

Программа Gitolite корректно настроена и готова к использованию. Теперь можно без проблем создавать пользователей Git, не тратя время на создание дополнительных пользователей операционной системы и установку привилегий.

Если вы работаете над несколькими проектами в разных командах, вероятно, оптимальным решением будет создать группы, соответствующие проектам. Возможно, также будет полезно структурировать каталог keydir, разместив ключи в специально отведенных для каждого проекта подкаталогах. При этом Gitolite будет работать таким же образом, а разработчикам не придется тратить время на поиски нужного ключа.

Tags: , , , , ,

Добавить комментарий