PostgreSQL coub express.js freeware git jquery laravel links linux macos mysql node.js php powershell python ubuntu vim virtualbox анекдот блог игры интересно стихи цитаты

Git: разворачиваем репозиторий для группы разработчиков
July 06, 2013
В очередной раз напоминаю, что я не профессиональный администратор и возможно приведенный ниже вариант не отличается правильностью и безопасностью. Единственное за что я могу поручиться - этот вариант рабочий. Кроме того, здесь не пойдет речь о разделении прав внутри репозитория или репозиториев, все репозитории созданные по такому шаблону будут доступны для всех пользователей, которые будут иметь доступ к отладочному серверу и будут находиться в группе доступа к git. Я пишу о настройке под Debian.

Исходные
  1. Есть NN разработчиков
  2. Есть сервер на котором эти разработчики все вместе трудятся каждый под своей учетной записью
  3. Необходимо на этом сервере разместить git репозиторий с общим доступом для всех этих разработчиков
Порядок действий
  1. Создаем отдельного пользователя
    useradd git
    
    Задаем ему зубодробильный пароль и радостно забываем его.
  2. Теперь надо авторизоваться под этим пользователем (вообще можно и от рута все сделать, но так проще будет) и создать первый общий репозиторий
    su -l git # авторизуемся как пользователь git (тут по идее нужен рутовый пароль)
    mkdir my-repo-name # создаем папку под репозиторий
    chmod 770 my-repo-name # полный доступ владельцу и группе
    chmod +s my-repo-name # устанавливаем в этой папке наследование прав для группы
    cd my-repo-name # заходим в папку репозитория
    git init --bare --shared # инициализировали репозиторий (см. git help init)
    
    С репозиторием все. Теперь нужно раздать доступ.
  3. Всех пользователей, которые будут иметь доступ к git нужно добавить в соответствующую группу. Для этого поглядим что за группа у пользователя git
    whoami # git
    groups # git
    
    Теперь каждого кому нужен доступ в git добавляем в эту группу, делать это нужно с рутовыми привилегиями понятное дело
    usermod -a -G git user_login # добавляем пользователя в группу (см. usermod --help)
    
    Если решим у пользователя доступ к git отобрать надо будет просто его убрать из этой группы, вот так:
    deluser user_login git # удаляем пользователя из группы (см. deluser --help)
    groups user_login # смотрим в каких группах сейчас выбранный пользователь состоит
    
Все, по паролю доступ к git уже есть, то есть вот в такой манере
mkdir test-repo # создали папку под репозиторий
cd test-repo # зашли в неё
git clone ssh://user_login@my-host.com/home/git/test-repo . # клонируем репозиторий
git remote -v # куда смотрит локальный репозиторий (см. git --help remote)
Правда, при каждом push или pull запросе нужно будет вводить пароль. Казалось бы и так нормально, но..

ЕСТЬ СПОСОБ УДОБНЕЕ :)

Чтобы не вводить на каждый pull или push пароль, можно прикрутить доступ по публичному ключу. Для этого каждый разработчик должен сгенерить на своей локальной машине публичный ключ и прислать его нам. Сделать это можно так
ssh-keygen -t rsa # тут нас попросят задать имя ключа и ключевую фразу, нужно её запомнить
После этой процедуры сгенерится два ключа ~/.ssh/key-name и ~/.ssh/key-name.pub который собственно и является публичным ключем. Вот эти публичные ключи и должны прислать вам разработчики. Теперь на сервере их нужно добавить к авторизованным ключам для пользователя git.
su -l git # заходим под пользователем гита
cd ~ # переходим в домашнюю папку
mkdir .ssh # создаем папку для конфигов если её нет
cat key-name.pub >> .ssh/authorized_keys # добавляем в конец файла авторизованных ключей
Теперь на стороне разработчика нужно один раз авторизоваться с указанием конкретного ключа
ssh git@dev-host.com -i ~/.ssh/key-name # попросят ввести пароль от ключа, который был задан при генерации
Все, после этой процедуры постоянно вводить пароль для авторизации не потребуется. Все разработчики будут авторизовываться по ключу как пользователь git, а значит заморока с наследованием прав на папки больше не нужна. И теперь для добавления нового репозитория достаточно просто сделать следующее
su -l git # вошли как пользователь git
cd ~ # перешли в хомяк
mkdir new-repo # папка под репозиторий
cd new-repo # зашли в папку
git init --bare # создали пустой репозиторий
Такой репозиторий тут же станет доступен всем пользователям которые ходят по публичному ключу. Для разработчиков это будет выглядеть вот так:
mkdir new-project
cd new-project
git clone git@dev-host.com:new-repo .
Осталось добавить, что нужно репозитории регулярно резервировать, "во избежание" так сказать. Чтобы отобрать у пользователя доступ к гиту во втором случае (с публичным ключем), нужно определить его публичный ключ и удалить его из ~/.ssh/authorized_keys на сервере. Все ключи подписаны, так что возможно получится вычислить его по подписи. Если же не удастся.. то придется либо перезаписывать всем доступы, либо последовательно их отключать и смотреть у кого отвалится доступ. Как-то так :) В заметке нет ничего нового, почти все это можно прочитать здесь и здесь.
p.s.: хорошо бы заглушить вход в консоль для пользователя git.
sudo vim /etc/passwd
Ищем строку вида: git:x:1000:1000::/home/git:/bin/sh и приводим её к вот такому виду git:x:1000:1000::/home/git:/usr/bin/git-shell. Надо это затем, чтобы пользователь git не мог зайти в консоль и погрохать все репозитории, например.
git

Comments

No comments here yet.
You have to login to post a new comment.
aghr