Контроль доступа к серверу Git при помощи Gitolite на Ubuntu 12.04
Cloud Server, Ubuntu | Комментировать запись
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: Cloud Server, Git, Gitolite, SSH, Ubuntu, Ubuntu 12.04