PostgreSQL
coub
express.js
freeware
git
jquery
laravel
links
linux
macos
mysql
node.js
php
powershell
python
ubuntu
vim
virtualbox
анекдот
блог
игры
интересно
стихи
цитаты
You have to
login
to post a new comment.
Git: разворачиваем репозиторий для группы разработчиков
July 06, 2013
В очередной раз напоминаю, что я не профессиональный администратор и возможно приведенный ниже вариант не отличается правильностью и безопасностью. Единственное за что я могу поручиться - этот вариант рабочий. Кроме того, здесь не пойдет речь о разделении прав внутри репозитория или репозиториев, все репозитории созданные по такому шаблону будут доступны для всех пользователей, которые будут иметь доступ к отладочному серверу и будут находиться в группе доступа к git. Я пишу о настройке под Debian.
Исходные
p.s.: хорошо бы заглушить вход в консоль для пользователя git.
Исходные
- Есть NN разработчиков
- Есть сервер на котором эти разработчики все вместе трудятся каждый под своей учетной записью
- Необходимо на этом сервере разместить git репозиторий с общим доступом для всех этих разработчиков
-
Создаем отдельного пользователя
useradd git
Задаем ему зубодробильный пароль и радостно забываем его. -
Теперь надо авторизоваться под этим пользователем (вообще можно и от рута все сделать, но так проще будет) и создать первый общий репозиторий
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)
С репозиторием все. Теперь нужно раздать доступ. -
Всех пользователей, которые будут иметь доступ к 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 # смотрим в каких группах сейчас выбранный пользователь состоит
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 не мог зайти в консоль и погрохать все репозитории, например.
Comments
No comments here yet.