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 :)
Потомучто создавать 100500 аков не надо.
Тем более, тех у которых будет доступ к gitosis может не быть прав на сервере вообще.
О каком разделении прав при использовании ssh говорится? Ты вообще читал статью?
Нету, есть gitweb/gitlab и пр. Об этом позже расскажу
Какую статью? Ты вообще читал вопрос? )
В статье написано:
Что тебе непонятно?
нет, из этого - /home/git/.gitosis.conf
Зачем ты пишешь пользователя?
он же в .ssh/config прописан уже
сенк, пофикшу
да, можно не указывать, видимо привычка, иногда указываю автоматом, иногда нет
попытался из репозитория
Наверное его удалили из репозитория твоей OS, какая она у тебя? В моем Debian он есть:
Используй http://adw0rd.com/2012/3/22/freebsd-debian-gitolite/ , он удобнее и функциональнее.
У меня убунту.
Спасибо, буду разбираться с gitolite.
Есть гитозис на сервере и есть веб-интерфейс к нему, закрытый base-авторизацией. Там видны, соответственно, все репы, что на сервере есть.
Можно как-нить некому челу дать веб-интерфейс, чтобы там только определённое количество реп было видно?
GitWeb? GitLab?
А, ну да - GitWeb.
Мне что-то казалось у gitosis'а свой интерфейс.
Придумал два варианта:
1. Отдельная папка с символическими ссылками на нужные репы, отдельный gitweb-процесс и отдельный хост nginx.
2. В nginx разные пароли на разные папки.
Хотелось бы меньше извращений.
Ага, как вариант так сделать. Либо смотри сорцы gitweb.cgi, он вроде на перле
Оставьте свой комментарий