21 марта 2012 г. Debian FreeBSD Git Gitosis Linux

FreeBSD и Debian. Установка и настройка Gitosis

Со временем я перешел с Mercurial на Git, почему это произошло я расскажу в другой статье. А сегодня я расскажу как организовать авторизацию и разграничение прав не репозитории при помощи Gitosis.

Установка и настройка Git

В любом случае нам понадобится создать группу и пользователя "git", а также установить Git.

FreeBSD:

pw group add git
adduser git
cd /usr/ports/devel/git
make && make install

Debian:

groupadd git
useradd -g git git
apt-get install git

Установка и настройка Gitosis

В свое время, на работе, мы выбрали Gitosis и не разочаровались. Решение достаточно простое, опирающееся на git-хуки и ssh-ключи, которое обеспечивает нас самым главным - разграничение прав на проекты.

Хранение публичных ключей всех пользователей в authorized_keys для предоставления доступа работает хорошо лишь на время. Когда у вас сотни пользователей это скорее похоже на пытку. Вы должны заходить на сервер каждый раз и нет никакого разграничения доступа — все перечисленные в файле имеют доступ на чтение и на запись к каждому проекту.

На этой стадии вы можете захотеть обратиться к широко используемому ПО под названием Gitosis. Gitosis — это просто набор сценариев (скриптов), который поможет вам управляться с файлом authorized_keys и реализовать простой контроль доступа. Действительно интересно, что интерфейсом для этого инструмента для добавления людей и определения доступа для них является не веб-интерфейс, а специальный git-репозиторий. Вы настраиваете информацию в этом проекте и, когда вы отправляете её в репозиторий, Gitosis исходя из неё перенастраивает сервер, что круто.

Pro Git - Pro Git 4.7 Git на сервере Gitosis

Вообщем авторизация будет по ключам, а gitosis будет контролировать политику прав. Поехали!

Установка Gitosis

FreeBSD:

cd /usr/ports/devel/py-gitosis/
make install clean

Debian:

apt-get install gitosis

Можно и из исходников, но так как разработка gitosis прекратилась осенью 2009 года, свежее всёравно не будет:

git clone git://eagain.net/gitosis.git gitosis
cd gitosis
sudo python setup.py install

Настройка Gitosis

Для начала нам надо создать на локальной машине ключ и скопировать его на сервер:

ssh-keygen -C “<username>” -t rsa
scp ~/.ssh/id_rsa.pub <username>@example.org:key_for_gitosis.pub
mv ~/.ssh/id_rsa ~/.ssh/gitosis

Теперь добавьте в свой локальный ".ssh/config":

Host gitosis
    User git
    Hostname <hostname>
    IdentityFile ~/.ssh/gitosis

Далее, надо войти на сервер и проинициализировать gitosis:

sudo su - git
gitosis-init < /home/<username>/key_for_gitosis.pub
Initialized empty Git repository in /home/git/repositories/gitosis-admin.git/
Reinitialized existing Git repository in /home/git/repositories/gitosis-admin.git/

Перейдем снова на локальную машину и попробуем подключится:

ssh git@gitosis -T
>> ERROR:gitosis.serve.main:Need SSH_ORIGINAL_COMMAND in environment.

Если примерно такой ответ, то все хорошо, продолжаем!

Теперь склонируем репозиторий "gitosis-admin" к себе и отредактируем конфигурационный файл:

git clone git@gitosis:gitosis-admin.git gitosis-admin

В полученном репозитории вы увидите каталог "keydir", в котором хранятся все публичные ключи пользователей имеющих доступ к репозиториям. Чтобы добавить пользователя, необходимо чтобы вы поместили сгенерированный им публичный ключ, а после добавили упоминание этого пользователя в файле "gitosis.conf" секция "members".

Чтобы создать новый репозиторий необходимо зайти на сервер и выполнить:

cd ~/repositories
mkdir someproject.git && cd someproject.git/
git init --bare
>> Initialized empty Git repository in /home/git/repositories/someproject.git/

Далее, добавим в локальный файл "gitosis.conf" что-то наподобие:

[group developers]
writable = someproject
members = adw0rd <another-username>

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

[group developers]
members = adw0rd example

[group project]
writable = project
members = @developers tester

Вообщем в "members" надо перечислить пользователей, у которых есть доступ к репозиторию "writable". И добавить в "keydir" публичные ключи полученные от пользователей. Это всё что надо!

Для отладки самого gitsis вам может понадобится эта опция:

[gitosis]
loglevel=DEBUG

Gitosis читает файла настроек из этого файла "/home/git/.gitosis.conf", он симлинк на "/home/git/repositories/gitosis-admin.git/gitosis.conf". Так что вы всегда можете повлиять на конфигурационный файл gitosis'а даже если потеряли доступ к нему из вне отредактировав вручную "/home/git/repositories/.gitosis.conf".

Рекомендую также почитать Gitosis - ArchWiki.

Комментарии

Чем через отдельного git-пользователя лучше делать, чем просто по SSH для своего акка?
Чем gitosis круче простого ssh, разделением прав?
У него есть какой-нибудь web-интерфейс красивый, как у hgserve?

Я пробовал gitosis, но есть другая альтернатива.
Я попробовал Gitolite и остался на нём. Он намного гибче в настройках

vasa_c, можно прикрутить gitlabhq: https://github.com/gitlabhq/gitlabhq

Рустам, про Gittolite сегодня расскажу, не успел вчера дописать статью о нём...
И еще про GitWeb и GitLab :)

Чем через отдельного git-пользователя лучше делать, чем просто по SSH для своего акка?

Потомучто создавать 100500 аков не надо.
Тем более, тех у которых будет доступ к gitosis может не быть прав на сервере вообще.

Чем gitosis круче простого ssh, разделением прав?

О каком разделении прав при использовании ssh говорится? Ты вообще читал статью?

У него есть какой-нибудь web-интерфейс красивый, как у hgserve?

Нету, есть gitweb/gitlab и пр. Об этом позже расскажу

О каком разделении прав при использовании ssh говорится? Ты вообще читал статью?

Какую статью? Ты вообще читал вопрос? )

В статье написано:

Хранение публичных ключей всех пользователей в authorized_keys для предоставления доступа работает хорошо лишь на время. Когда у вас сотни пользователей это скорее похоже на пытку. Вы должны заходить на сервер каждый раз и нет никакого разграничения доступа — все перечисленные в файле имеют доступ на чтение и на запись к каждому проекту.

Что тебе непонятно?

Gitosis читает файла настроек из этого файла «/home/git/repositories/.gitosis.conf»

нет, из этого - /home/git/.gitosis.conf

Зачем ты пишешь пользователя?

git clone git@gitosis:gitosis-admin.git gitosis-admin

он же в .ssh/config прописан уже

нет, из этого — /home/git/.gitosis.conf

сенк, пофикшу

он же в .ssh/config прописан уже

да, можно не указывать, видимо привычка, иногда указываю автоматом, иногда нет

apt-get install gitosis
пишет, что нет такого

попытался из репозитория

sudo python setup.py install
пишет, ImportError: No module named setuptools

пишет, что нет такого

Наверное его удалили из репозитория твоей OS, какая она у тебя? В моем Debian он есть:

$ apt-cache search gitosis
gitolite - SSH-based gatekeeper for git repositories
gitosis - git repository hosting application

$ cat /etc/issue
Debian GNU/Linux 6.0 \n \l

Используй http://adw0rd.com/2012/3/22/freebsd-debian-gitolite/ , он удобнее и функциональнее.

У меня убунту.
Спасибо, буду разбираться с gitolite.

Есть гитозис на сервере и есть веб-интерфейс к нему, закрытый base-авторизацией. Там видны, соответственно, все репы, что на сервере есть.
Можно как-нить некому челу дать веб-интерфейс, чтобы там только определённое количество реп было видно?

есть веб-интерфейс к нему

GitWeb? GitLab?

А, ну да - GitWeb.
Мне что-то казалось у gitosis'а свой интерфейс.

Придумал два варианта:
1. Отдельная папка с символическими ссылками на нужные репы, отдельный gitweb-процесс и отдельный хост nginx.
2. В nginx разные пароли на разные папки.

Хотелось бы меньше извращений.

Ага, как вариант так сделать. Либо смотри сорцы gitweb.cgi, он вроде на перле

Оставьте свой комментарий

Markdown