Git-хостинг при помощи Gitosis






При организации совместной работы над проектами довольно существенную помощь оказывает Git. Выделяете отдельный хост для хранения репозиториев и — вуаля, никаких проблем связанных централизованным управлением версионностью файлов и отслеживанием изменений. Среди неудобств, с которым сталкиваются начинающие пользователи Git — это неудобство управления доступом к репозиториям. О том, как облегчить решение этой задачи, в сегодняшней заметке.

Gitosis предназначен для организации хостинга нескольких репозиториев под одной системной учётной записью, предоставляя возможность гибко управлять режимом доступа к каждому репозиторию. Аутентификация пользователей выполняется в Gitosis при помощи SSH-ключей пользователей.



Принцип работы

Принцип организации взаимодействия Gitosis с пользователями достаточно прост. Когда пользователь при помощи Git инициирует взаимодействие со своей стороны по протоколу SSH, на стороне сервера происходит обычная аутентификация пользователя на основе открытого ключа (не пугайтесь, механизм добавления новых ключей на стороне сервера очень прост и приятен). После того, как пользователь аутентифицирован средствами SSH-сервера, в игру вступает сервер Gitosis, который выполняет дальнейшие процедуры авторизации подключившегося и организует его работу с Git-репозиториями. Весь фокус такой схемы заключается в том, что работы Gitosis требуется один-единственный системный пользователь, который, в силу использования ключей для аутентификации, может не иметь пароля (т. е., не иметь возможности подключиться к системе терминально), а также для сессии которого можно не выделять PTY-устройство. Всё это в сумме даёт значительное повышение безопасности вашей хост-системы.

Установка

Установить Gitosis можно как из пакетов (как минимум в актуальных Ubuntu и Debian он есть) или же «вручную» с Github. И в том, и в другом случаях вам сперва понадобится системная учётная запись, от имени которой будет работать Gitosis. Я обычно выбираю что-нибудь короткое и понятное для имени учётной записи:

Обратите внимание на опцию --disabled-password, которая не даст этой учётной записи возможности аутентифицироваться в системе, используя пароль. Аутентификация будет возможно только при помощи ключа или программы su. Теперь вам необходимо скопировать отрытый ключ пользователя, который будет администрировать будущий Gitosis-сервер и скопировать его в домашний каталог (или куда-нибудь, откуда вышесозданный пользователь сможет его достать, файл с ключом понадобится лишь временно) только созданного пользователя. Я, например, обычно использую свой RSA-ключ, которым пользуюсь для аутентификации на всех серверах, чтобы не запутаться. Сначала копируем файл открытого ключа с локальной системы на сервер в какой-нибудь каталог:

после чего, уже на сервере, делаем его доступным пользователю git:

Теперь можно приступать к установке. Если необходимо установить Gitosis из пакета, всё просто:

«Ручная» установка также особых сложностей не вызывает (обратите внимание, у вас в системе должен быть установлен пакет python-setuptools):

После того, как Gitosis установлен, необходимо инициализировать окружение, в котором он будет работать. Входим в систему под пользователем git, которого создали ранее:

И, оказавшись в домашнем каталоге пользователя git, выполняем инициализацию:

Обратите внимание на путь к открытому ключу, который мы скопировали ранее. Теперь его можно удалить, чтоб не путался под ногами:

Последним шагом убедитесь, что файл  repositories/gitosis-admin.git/hooks/post-updatе является исполняемым, иначе Gitosis не сможет обновлять конфигурацию:

Вот и всё. Ваш Gitosis-хост готов принимать посетителей.

Управление Gitosis

Всё конфигурирование Gitosis базируется на работе с git-репозиторием, содержащим конфигурацию и ключи пользователей. Звучит слегка неожиданно, но давайте посмотрим, что это значит на практике. Находясь на вашем локальном хосте, под учётной записью, открытый ключ которой вы скопировали ранее, клонируйте следующий репозиторий с вашего Gitosis-сервера:

Обратите внимание на имя учётной записи, от которой мы подключаемся к серверу. Перейдите в каталог с репозиторием и откройте в текстовом редакторе файл gitosis.conf:

Файл имеет традиционную ini-структуру и используется для конфигурирования Gitosis на сервере. Не забывайте о том, что выполнять конфигурацию Gitosis вы должны только таим способом!

Итак, представим, что вам необходимо создать новый репозиторий, который будет называться myproj, и предоставить к нему доступ на чтение/запись пользователям mike и bob. Добавьте ещё одну секцию в файл gitosis.conf:

Здесь в начале секции объявляется группа с именем myteam, в которую входят пользователи перечисленные в значении параметра members и имеющие доступ на запись в репозиторий myproj. Интересующиеся могут увидеть пример возможных опций конфигурационного файла Gitosis здесь.

Далее, поместите открытые ключи новых пользователей в каталог keydir админ-репозитория. Обратите внимание на имена файлов ключей: они должны состоять из имён пользователей, которых вы перечислили в значении параметра members, плюс суффикс «.pub».

Добавьте файлы ключей, а также файл конфигурации в индекс:

И сделайте коммит:

Теперь осталось лишь обновить конфигурацию на сервере:

Создание репозитория

Теперь указанные пользователи могут работать с репозиторием. Представим, что mike оказался первым, кому выпала честь инициализировать репозиторий на сервере. Ему необходимо перейти в каталог с локальным репозиторием, добавить новый remote-сервер:

после чего выполнить push репозитория:

Если всё настроено корректно, mike получит сообщение об успешной синхронизации нового репозитория.

Клонирование репозитория

Здесь тоже всё традиционно:

Ссылки

 




Git-хостинг при помощи Gitosis: 2 комментария

  1. Лучше юзать gitolite — он более гибкий по настройке: можно определять доступ по бранчам, файлам, перезаписи истории и т.п.

Комментарии запрещены.