Перейти к основному содержанию
Рецепты Linux

Main navigation

  • Основы
  • Система
  • Команды
  • Программы
  • Дистро
  • Интерфейсы
  • Устройства
  • Доки
User account menu
  • Войти

Строка навигации

  1. Главная
  2. Pro Git
  3. Git на сервере

Gitosis

Хранение публичных ключей всех пользователей в authorized_keys для предоставления доступа работает хорошо лишь на время. Когда у вас сотни пользователей это скорее похоже на пытку. Вы должны заходить на сервер каждый раз и нет никакого разграничения доступа — все перечисленные в файле имеют доступ на чтение и на запись к каждому проекту. На этой стадии вы можете захотеть обратиться к широко используемому ПО под названием Gitosis. Gitosis — это просто набор сценариев (скриптов), который поможет вам управляться с файлом authorized_keys и реализовать простой контроль доступа. Действительно интересно, что интерфейсом для этого инструмента для добавления людей и определения доступа для них является не веб-интерфейс, а специальный git-репозиторий. Вы настраиваете информацию в этом проекте и, когда вы отправляете её в репозиторий, Gitosis исходя из неё перенастраивает сервер, что круто. Установка Gitosis не простейшая задача всех времен, но она и не так сложна. Проще всего для этого использовать Linux-сервер — данные примеры используют обычный Ubuntu 8.10 server. Gitosis’у нужны некоторые инструменты для Python, так что первым делом вы должны установить пакет Python’а setuptools, который в Ubuntu называется python-setuptools: $ apt-get install python-setuptools Затем вы клонируете и устанавливаете Gitosis с главного сайта проекта: $ git clone git://eagain.net/gitosis.git $ cd gitosis $ sudo python setup.py install Это установит несколько исполняемых файлов, которые Gitosis будет использовать. Затем Gitosis хочет расположить свои репозитории в каталоге /home/git, что неплохо. Но вы уже установили репозитории в /opt/git, так что вместо перенастройки всего на свете вы сделаете символическую ссылку: $ ln -s /opt/git /home/git/repositories Gitosis будет управлять ключами за вас, так что вы должны удалить текущий файл, добавить ключи снова позже и предоставить Gitosis’у управлять файлом authorized_keys автоматически. Сейчас просто уберите этот файл с дороги: $ mv /home/git/.ssh/authorized_keys /home/git/.ssh/ak.bak Затем вы должны вернуть пользователю git его командную оболочку, если вы меняли её на команду git-shell. Люди всё так же не смогут выполнить вход, но для вас это будет контролировать Gitosis. Итак, давайте поменяем эту строку в файле /etc/passwd git:x:1000:1000::/home/git:/usr/bin/git-shell обратно на эту: git:x:1000:1000::/home/git:/bin/sh Теперь самое время инициализировать Gitosis. Вы сделаете это выполнив команду gitosis-init с вашим персональным публичным ключом. Если вашего публичного ключа ещё нет на сервере вы должны будете скопировать его туда: $ sudo -H -u git gitosis-init /tmp/id_dsa.pub Initialized empty Git repository in /opt/git/gitosis-admin.git/ Reinitialized existing Git repository in /opt/git/gitosis-admin.git/ Это позволит пользователю с таким ключом изменять главный Git-репозиторий, который управляет настройками Gitosis’а. Затем вы должны вручную установить бит исполнения на сценарий post-update в новом управляющем репозитории. $ sudo chmod 755 /opt/git/gitosis-admin.git/hooks/post-update Всё готово. Если вы всё настроили правильно, вы можете попытаться соединиться по SSH с вашим сервером под тем пользователем, для которого вы добавили публичный ключ чтобы инициализировать Gitosis. Вы должны увидеть что-то вроде этого: $ ssh git@gitserver PTY allocation request failed on channel 0 fatal: unrecognized command 'gitosis-serve schacon@quaternion' Connection to gitserver closed. Это означает, что Gitosis узнал вас, но не пустил, потому что вы не пытались выполнить ни одну из команд Git. Ну так давайте выполним настоящую команду Git — вы склонируете управляющий репозиторий Gitosis: # на вашем локальном компьютере $ git clone git@gitserver:gitosis-admin.git Теперь у вас есть каталог с именем gitosis-admin, в котором есть две главные части: $ cd gitosis-admin $ find . ./gitosis.conf ./keydir ./keydir/scott.pub Файл gitosis.conf — файл настройки, который используется, чтобы указать пользователей, репозитории и права доступа. В каталоге keydir должны храниться публичные ключи всех пользователей, у которых есть какой-либо доступ к вашим репозиториям — по файлу на пользователя. Имя файла в keydir (в предыдущем примере scott.pub) у вас будет отличаться — Gitosis берёт это имя из описания в конце публичного ключа, который был импортирован сценарием gitosis-init. Если вы посмотрите в файл gitosis.conf, там должна быть указана только информация о проекте gitosis-admin, который вы только что склонировали: $ cat gitosis.conf [gitosis] [group gitosis-admin] writable = gitosis-admin members = scott Это показывает, что пользователь ‘scott’ — пользователь, чьим публичным ключом вы инициализировали Gitosis — единственный, кто имеет доступ к проекту gitosis-admin. А теперь давайте добавим новый проект. Вы добавите новую секцию с названием mobile, где вы перечислите всех разработчиков в вашей мобильной команде и проекты, к которым должны иметь доступ. Поскольку scott пока что единственный пользователь в системе, вы добавите его как единственного члена, и вы создадите новый проект под названием iphone_project чтобы начать: [group mobile] writable = iphone_project members = scott Когда вы вносите изменения в проект gitosis-admin, вы должны зафиксировать изменения и отправить их на сервер, чтобы они возымели эффект: $ git commit -am 'add iphone_project and mobile group' [master]: created 8962da8: "changed name" 1 files changed, 4 insertions(+), 0 deletions(-) $ git push Counting objects: 5, done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 272 bytes, done. Total 3 (delta 1), reused 0 (delta 0) To git@gitserver:/opt/git/gitosis-admin.git fb27aec..8962da8 master -> master Вы можете сделать ваш первый push в новый проект iphone_project добавив ваш сервер в качестве удалённого (remote) в локальную версию проекта и выполнив git push. Вам больше не нужно вручную создавать голые репозитории на сервере для новых проектов — Gitosis создаёт их сам автоматически когда видит первый push: $ git remote add origin git@gitserver:iphone_project.git $ git push origin master Initialized empty Git repository in /opt/git/iphone_project.git/ Counting objects: 3, done. Writing objects: 100% (3/3), 230 bytes, done. Total 3 (delta 0), reused 0 (delta 0) To git@gitserver:iphone_project.git * [new branch] master -> master Заметьте, что вам не нужно указывать путь (фактически, если вы это сделаете, то оно не сработает), только двоеточие и имя проекта — Gitosis найдёт его за вас. Вы хотите работать над проектом с вашими друзьями, так что вам нужно снова добавить их публичные ключи. Но вместо того, чтобы вручную добавлять их к файлу ~/.ssh/authorized_keys на вашем сервере, добавьте их, один файл на ключ, в директорию keydir. Как вы назовёте ключи определит как вы будете ссылаться на пользователей в gitosis.conf. Давайте по-новому добавим публичные ключи для Джона, Джози и Джессики: $ cp /tmp/id_rsa.john.pub keydir/john.pub $ cp /tmp/id_rsa.josie.pub keydir/josie.pub $ cp /tmp/id_rsa.jessica.pub keydir/jessica.pub Теперь вы можете добавить их всех в вашу ‘мобильную’ команду, чтобы они имели доступ на чтение и запись в iphone_project: [group mobile] writable = iphone_project members = scott john josie jessica После того, как вы зафиксируете и отправите изменения, все четыре пользователя будут иметь возможность читать и писать в проект. В Gitosis также есть простой контроль доступа. Если вы хотите, чтобы Джон имел только доступ на чтение к этому проекту, вы можете вместо этого сделать: [group mobile] writable = iphone_project members = scott josie jessica [group mobile_ro] readonly = iphone_project members = john Теперь Джон может клонировать проект и получать обновления, но Gitosis не позволит ему отправлять изменения обратно в проект. Вы можете создать таких групп сколько хотите, каждую содержащую разные проекты и пользователей. Вы также можете указать другую группу в качестве одного из пользователей (используя @ как префикс), чтобы автоматически добавить всех её членов: [group mobile_committers] members = scott josie jessica [group mobile] writable = iphone_project members = @mobile_committers [group mobile_2] writable = another_iphone_project members = @mobile_committers john Если у вас возникли какие-то проблемы, полезным может быть добавить loglevel=DEBUG в секции [gitosis]. Если вы потеряли доступ к отправке отправив неверную конфигурацию, вы можете вручную поправить файл /home/git/.gitosis.conf на сервере — файл, из которого Gitosis читает свою информацию. Отправка в проект берёт файл gitosis.conf, который вы только что отправили, и помещает его туда. Если вы отредактируете этот файл вручную, он останется таким до следующей успешной отправки в проект gitosis-admin. Pro Git

Перекрёстные ссылки книги для Gitosis

  • GitWeb
  • Вверх
  • Gitolite

Book navigation

  • Введение
  • Основы Git
  • Ветвление в Git
  • Git на сервере
    • Протоколы
    • Установка Git на сервер
    • Создание публичного SSH-ключа
    • Настраиваем сервер
    • Открытый доступ
    • GitWeb
    • Gitosis
    • Gitolite
    • Git-демон
    • Git-хостинг
    • Заключение
  • Распределённый Git
  • Инструменты Git

Последние материалы

  • Приложение scanimage
    11 hours 20 minutes ago
  • Утилита sensors
    4 days ago
  • Сканер Rkhunter
    1 week 4 days ago
  • Программа resize2fs
    2 weeks 3 days ago
  • Аудиопроигрыватель QMMP
    3 weeks 1 day ago
RSS feed

Secondary menu

  • О проекте

© 2008–2025 Олег Меньшенин mensh@yandex.ru